begin process at 2010 02 10 07:34:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > ENUMERER LES PARTITIONS SUR PERIFERIQUE USB

ENUMERER LES PARTITIONS SUR PERIFERIQUE USB


 Information sur la source

Note :
Aucune note
Catégorie :Système Classé sous :usb, partition, enumerer, deviceiocontrol, windows Niveau :Débutant Date de création :02/01/2008 Date de mise à jour :05/01/2008 17:25:26 Vu / téléchargé :4 300 / 284

Auteur : draluorg

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (32)
Ajouter un commentaire et/ou une note


 Description

Voici quelques lignes qui montrent comment enumerer les partitions sur periferique usb.
L'enumeration n'est pas vraiment le plus interessant ici mais plutot la fonction IsUsb qui renvoie si une partition est connectee par usb ou non.

Je poste cette source car j'ai eu un peu de mal a trouver comment faire quand j'en avais besoin et j'ai pas trouvé d'équivalent sur le site.

Je sais pas si ca merite une source, peut etre qu'un snippet serait plus adapté ?

++



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   EnumUsb
    •   Release
      • EnumUsb.ex_Télécharger ce fichier [Réservé aux membres club]2 048 octets
    • EnumUsb.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 581 octets
    • EnumUsb.vcprojTélécharger ce fichier [Réservé aux membres club]6 321 octets

Télécharger le zip


 Historique

02 janvier 2008 22:25:52 :
...
05 janvier 2008 17:25:26 :
- Suppression de lstrcat - Remplacement goto par while

 Sources du même auteur

Source avec Zip Source avec une capture GESTIONNAIRE DE SERVICES WINDOWS

 Sources de la même categorie

Source avec Zip Source avec une capture [C/WIN32/WMI]SAVOIR SI UNE CLASSE COM EST INSTALLÉE par rt15
Source avec Zip Source avec une capture [C/WIN32][DRIVER] DÉTECTION DE CRÉATION OU DE SUPPRESSION DE... par deck_bsd
Source avec Zip DÉTECTION DE LANCEMENT D'APPLICATION (WIN32, REGISTERSHELLHO... par buno
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &... par deck_bsd
PRODUCER CONSUMER C (WITHIN LINUX) par PCBill

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture USB DETECTION par abandonware
EXPLORATEUR DE FICHIERS WINDOWS EN C par wildhawk
Source avec Zip Source avec une capture CLASSE GRAPH: GESTION DES GRAPHIQUES DANS LES APPLICATIONS W... par Pistol_Pete
Source avec Zip [SDL/C++] JEU SIMPLE POUR COMMENCER DANS LA PROGRAMMATION DE... par marmous
Source avec Zip RÉCEPTION DE TRAPS SNMP EN QUELQUES LIGNES DE C++ AVEC L'API... par jccharreteur

Commentaires et avis

Commentaire de BruNews le 02/01/2008 21:52:08 administrateur CS

call  dword ptr ExitProcess
où est passé le param de ExitProcess ?

Commentaire de draluorg le 02/01/2008 22:27:50

Salut BruNews,

Erf wai j'ai oublier un ptit push...
Voila qui est corrigé, merci pour la remarque.

++

Commentaire de SAKingdom le 02/01/2008 23:38:06

Pourquoi appels tu AppMain via Main ?
Serait pas plus simple de faire de AppMain ton point d'entré ?

Commentaire de draluorg le 03/01/2008 00:14:22

wai c'est vrai... mais ca permet d'avoir un AppMain moins encombré.
Enfin, dans ce cas ci c'est vrai que c'est dérisoire mais bon ca mange pas de pain non plus...

++

Commentaire de BruNews le 03/01/2008 00:18:47 administrateur CS

de Main() à AppMian() il n'y a qu'un call (push, mov et jmp en 1 instruction cpu) donc pas grave alors que sinon il coderait tout en asm vu que sans CRT.

Commentaire de SAKingdom le 03/01/2008 00:40:45

Ah bon ?
Le compilateur ne génèrerait pas un code similaire si on codait la fonction en C (optimisation pour la vitesse active bien sûr) ?

Commentaire de BruNews le 03/01/2008 11:10:38 administrateur CS

Avec certainement une stackframe en plus.

Commentaire de Pamaury le 03/01/2008 11:49:25

Je vois pas l'intérêt de coder Main en assembleur, cela ne que compile que sur Visual C++ et c'est pas plus clair; bref on ne gagne absolument rien alors que le reste du code est intéressant.

Commentaire de draluorg le 03/01/2008 15:07:40

re,

humm wai, en meme temps le main ici n'a rien avoir avec le code, c'est juste pour dire d'avoir un ptit proj pour tester...
Puis a mon avis quand vous utilisez un main par defaut y a quand meme un code plus ou moins similaire derriere, qui va lancer votre main, puis faire un ExitProcess avec ce qu'a retourné votre main...

++


Commentaire de SAKingdom le 03/01/2008 16:47:37

"y a quand meme un code plus ou moins similaire derriere, qui va lancer votre main, puis faire un ExitProcess avec ce qu'a retourné votre main..."

Si tu utilises le CRT oui mais pas autrement.

BruNews >> Et bien, toutes optimisations pour la vitesse activent, aucun stackframe. Cependant, ajoute un tableau par exemple (+ appel de fonctions) et là, oui, c'est sûr, il y aura un stackframe.

Sinon, si c'est pour pratiquer son assembler, alors ok mais faudrait s'assurer que AppMain soit en __stdcall (ou autres). Pas très grave ici vu que cette fonction n'a pas de paramètres mais c'est une habitude à prendre.

Commentaire de draluorg le 03/01/2008 16:53:13

re,

heuuu quand tu as un main du genre:

int main( int argc, const char* argv[] )

C'est bien un main par defaut ca non ?
ils te viennent d'ou tes args ?
et le int il sert a quoi? a retourner l'ExitCode non ?

Ce sont des questions, pas des affirmations...

++

Commentaire de SAKingdom le 03/01/2008 17:00:06

Ce main est pour le CRT. Aucun argument ne sera envoyé dans un point d'entré spécifié par l'utilisateur et aucune valeur de retour ne sera attendu.

Commentaire de BruNews le 03/01/2008 17:05:26 administrateur CS

draluorg, il n'y a pas de main() "par défaut", il y a ceux prévus par le CRT sinon il y a un point d'entrée du prog (adresse où il commence), rien de plus.
Comme dit par SAK, si point d'entrée perso alors nenni params car personne n'est là pour en fournir.

Commentaire de draluorg le 03/01/2008 17:27:11

Eh wai ok, quand je parlais de main par defaut je veux dire le main que l'on voit un peu partout...

Apres ok c'est pour le CRT, mais je comprends pas trop ce qui gene, a partir du moment ou on veut se passer du CRT il est un peu normal de se faire un "pré-main" aussi non ?

Bon ok comme je l'ai dis plus haut, ici c'est pas indispensable, mais imaginons que je veuille aussi un main genre:

int main( int argc, const char* argv[] )

C'est quand meme beaucoup plus propre de faire un "pre-main" que d'aller encombrer le Main avec des GetCommandLine et co...

++

Commentaire de SAKingdom le 03/01/2008 17:30:24

Plus propre peut-être mais surtout inutile.

Commentaire de SAKingdom le 03/01/2008 17:32:34

Si tu veux avoir plus propre, tu te fais une petite fonction inline qui traitera la ligne de commande et la retournera au format char **.

Commentaire de draluorg le 03/01/2008 17:51:46

mwai, mais bon, que ce soit ton main qui check les args ou ton pre-main qui te les envois c'est kif-kif, apres c'est une question de choix.

Sinon appart ca, y en a qui sont allé plus loin que mon main ? :p

++

Commentaire de SAKingdom le 03/01/2008 18:14:17

char chDrv[5]= "\\\\.\\";
...
CreateFileA(lstrcatA(chDrv, sDriveLetter), ...);

Il y aura, en théorie, débordement tampon là. (en théorie car en pratique, le compilo reculera esp de 8 pour l'alignement.)

Commentaire de draluorg le 03/01/2008 19:03:28

erf wai j'sais meme plus compter jusqu'a 6!

Mais bon pas tres cool de la part du compilo de laisser passer ce genre de trucs!

Merci pour l'info, je corrige ca des que j'ai une minute ;)

++

Commentaire de BruNews le 03/01/2008 19:16:42 administrateur CS

bien fait !!!

voila vraiment ce que j'ai envie de dire quand je vois
char chDrv[5]; et autres variables de dimensions exotiques.
Des multiples de 4 minimum !!!

lstrcat ??? appel vers dll pour écrire au bout d'une chaine, tu abuses.

Commentaire de Pamaury le 03/01/2008 19:24:37

Je vois pas en quoi utiliser lstrcat est abuser, si on raisonne comme çà on recode strcat, strcpy, memcpy, memcmp, memset, ... on en fini plus, autant utiliser les fonctions à notre disposition non ? çà coûte pas plus cher, à moins d'avoir une raison valable pour ne pas le faire.

Commentaire de SAKingdom le 03/01/2008 19:28:30

lstrcat pour copier 1 ou 2 caractères, c'est abuser.

On pourrait faire:
BOOL IsUsb(char sDriveLetter)
{
   char chDrv[8]= "\\\\.\\";
   ...
   chDrv[4] = sDriveLetter; chDrv[5] = ':'; chDrv[6] = 0;
   hDevice = CreateFileA(chDrv, ...);
   ...
}

Commentaire de SAKingdom le 03/01/2008 19:36:52

Aussi:

Enum:
...
if (dwDrvLst!=0)goto Enum;

pourrait être remplacé par un do while:

do {
   ...
} while(dwDrvLst);

Fera plus "propre" et plus "structuré" (quoi que reviendra au même une fois compilé).

Commentaire de BruNews le 03/01/2008 19:58:39 administrateur CS

l'important à dire c'est qu'il n'y a aucun rapport entre un lstrcat (appel ddl) et strcat qui est macro donc aucun appel, code inline.

Commentaire de SAKingdom le 03/01/2008 21:28:48

Oui mais, inline ou pas, utiliser strcat pour écrire 2 caractères au bout d'une chaine dont on connait déjà la taille initial est aussi abusé. On aurait pu, à la limite, remplacer par strcpy:
strcpy((chDrv+4), sDriveLetter);

Commentaire de Pamaury le 03/01/2008 22:39:50

Il me semble que vous cherchez la petite bête, abuser ou pas, tel n'est pas la question. Pour moi, le plus important c'est la lisibilité et clairement (l)strcat est la solution la plus claire des trois proposée.

Commentaire de Arnotic le 03/01/2008 23:06:26 administrateur CS

.NET permet un code trés "lisible"et te donnera à peu près les mêmes performence que du C écrit "lisiblement". Il faut rester cohérent.

Commentaire de BruNews le 03/01/2008 23:25:05 administrateur CS

A part que le .NET cohérent ne mène pas encore au chomage, le C "cohérent" à tout coup.

Commentaire de draluorg le 03/01/2008 23:31:50

erf... c'est un peu un faux debat, tout depend de ce qu'on doit faire ou veux faire...

oui lstrcat est abusé, du au fait que je ne code en C que depuis meme pas un mois, je ne codais qu'en vb6 avant et que j'ai pas encore les bons reflexe en C.(et inutile de dire que je maitrise pas encore toute la synthaxe)

Dans mon cas, je code avant tout pour me faire plaisir, et pour apprendre, donc oui pour moi les remarques de BruNews et SAKingdom sont du pain beni! Et n'ayant pas de delai pour mes applis, ecrire deux lignes de plus ne me pose aucun soucis.

Apres si on est codeur dans une boite qui vous submerge de boulot et que plusieurs personnes vont devoir relire le code etc il est clair qu'on utilisera plutot des strcat et compagnie, mais avoue le, on ne parle plus de plaisir la!

Pour le while a la place du goto, wai en effet c'est plus joli

++

Commentaire de draluorg le 05/01/2008 17:27:45

re,

Voila j'ai enlevé le lstrcat en suivant vos recommandations et j'ai mis un while a la place du goto...

++

Commentaire de verdy_p le 08/01/2008 07:54:14

Le source indique que "A:" et "B:" ne peuvent pas être des partitions USB. C'est faux! Ma clé USB peut être reconnue si je veux avec une partition "A:", la clé étant alors bootable et se comportant alors comme un floppy USB. En dehors du boot, la même partition sur la clé est reconnnue comme une partition normale (dans ce cas elle apparait avec une lettre "D:" ou plus. Le partitionnement est modifiable dynamiquement (je peux en faire une disquette de n'importe quelle taille de 180Ko à 4Mo, la taille occupée dépendant uniqument de celle des fichiers que j'y stocke, la clé se chargeant d'émuler le système de fichier. Je peux même y mettre plusieurs "disquettes" et sélectionner laquelle sera reconnue au boot. Je peux aussi, en dehors du boot, décider de monter sous Windows une partition pour qu'elle soit reconnue comme un lecteur de disquettes avec une lettre quelconque: les logiciels qui veulent formater une disquette n'y voient que du feu, le pilote Windows émulant le BIOS floppy. Le pilote permet aussi d'échanger les lettres de lecteurs floppy si on a aussi un floppy classique, et il le fait de la même façon que lorsque le BIOS émule un lecteur B: quand on a un seul lecteur (il demande un changement de disquette dans le lecteur, et il suffit alors d'indiquer au pilote la partition à monter dans le pseudo-lecteur, cette partition pouvant être un lecteur floppy physique ou un fichier de partition sur la clé.
Accessoirement, le pilote compresse aussi les fichiers sur la clé pour en augmenter le débit, alors que la clé est déjà plus rapide qu'un floppy normal...
Très pratique cette clé pour un PC portable qui n'a aucun lecteur floppy.
La clé émule aussi un lecteur/graveur CD ou DVD (grace à son pilote compatible ATAPI)... Pratique pour tester une nouvelle compilation à graver: elle est reconnue sous NERO et IncD.

Commentaire de draluorg le 08/01/2008 15:36:37

lol..

en effet j'avais jamais essayer d'assinger A et B a autre chose qu'un floppy mais on peu le faire, par contre tu ne les trouveras jamais ainsi par defaut c'est reserve pour les floppy.
Je corrigerai a l'occasion, d'ici la c'est juste une ligne a supprimer..

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

usb ->centronic 36 [ par TouTSpeed ] bonjour à tousj'ai apris plein de chose grâce a ce site et je vous en remerci tout d'abord mais voila j'ai un petit problème! Je suis e enumerer la liste des lecteurs en c [ par theoutlawz ] Bonjour; pourriez-vous me montrer le code qui permet de lister les lecteurs (disques, usb...) présents sur le Disque en c et savoir par exemple si c'e problème usb windows 98 [ par konanlouis ] salut!!!j'ai un  PC qui utilise windows 98. le problème ai que il ne reconnait aucune clé usb . par contre il  reconnait les souris hd usb que faire? Utilisation de flex/bison dans application graphique Windows (API) [ par uaip ] Bonjour à tous Je résume tout depuis le début. J'ai découvert flex et bison sous Linux, j'ai commencé un projet de compilateur sous le terminal : j'é Routage basé sur le port de destination IP [ par Kotomine ] Bonjour bonjour ! J'ai établi un VPN OSI2 qui fonctionne assez bien (malgré le fait que pour diverses contraintes, je dois le faire passer par du TC Interrompre le trafic réseau sur windows [ par taggle ] Salut, je voudrais savoir si c'était possible de stopper/brider volontairement le trafic réseau de ma machine en C++ de manière simple. J'imagine qu Comment creer un exe autonome en managed C++ + Windows::form [ par vfabula ] Bonhour, Ma question est la suivante: Comment créer un exe independant pouvant être éxecuté sur une autre machine, sachant que cet exe est programm Dll g++ sous VS [ par greenzephyr ] Salut à tous, Je dois faire une appli Windows Form qui utilise une dll compilée sous Linux avec g++. Je dispose des sources de cette dll. Pour vous cree une dll en visual c++ express pour vba [ par assireme81 ] salut tout le monde c'est la premiere fois que j'utilise ce forum donc je ne sais pas comment ca marche vrement voila mon probleme je veux creer une Driver de manette de jeu virtuelle [ par Kotomine ] Bonjour, Hum .. je n'ai jamais codé de driver windows et je n'ai aucune idée de comment m'y prendre. (J'aimerais le faire sur du winXP SP3) A long t


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales