cs_kha
Messages postés38Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention29 juillet 2004
-
5 févr. 2004 à 18:43
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
3 mars 2004 à 08:20
Hello,
Quand on met une clé USB sur win xp, ou un hdd usb ou firewire, ya une petite icone qui se met dans la tray barre et qui permet de "l ejecter" de facon correcte avant de debrancher le periph.
Mais le prob, c'est que cette manip ne peut etre faitre sur certains compte utlisateurs basiques : du coup on ne peut pas ejecter le periph et quand on le debranche a chaud win affiche une erreur disant qu il a mal ecrit certaines donnees...
Donc voila ma question : est ce que qqun saurait quoi utiliser (une fonction de l api win par ex.) pour deconnecter un hdd externe usb ?
thx.
NB: j'ai recherché déjà dans google et la msdn et l aide .NET et j'ai rien trouvé...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 9 févr. 2004 à 21:23
salut
il existe surement une fonction mineure IRP_MJ_DEVICE_CONTROL qui permet de faire ca :
on envoit au pilote par la fonction DeviceIOControl
tu peux regarder dans la DDK online de osr.com s'il y a une IOCTL ou IRP_MJ_xxx ou IRP_MN_xx ou autre qui permet de déconnecter (queque part dans mass storage ou usb storage je crois)
cs_kha
Messages postés38Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention29 juillet 2004 10 févr. 2004 à 00:37
J ai essaye ca : le probleme c'est que j'arrive meme pas a recupere le noeud : il me renvoi une erreur, soit pointeur invaldie soit je sais plus quoi... ptant le prog est correct :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{
int res = 0;
char buffer[20];
char* hid = "USBSTOR\Disk&Ven_IC25N020&Prod_ATMR04-0&Rev_0811\6&666dadf&0"; // test avec une chaine "device instance"
HMACHINE hMachine = NULL; // NULL for local machine
PDEVINST pdnDevInst_OUT = NULL; // pointeur sur un noeud
DEVINST dnDevInst = NULL; // null au depart mais c'est la le probleme :
// il en faut un obligatoirement non NULL => comment recuperer un handle ?
// ds la doc ils disent avec CM_Locate_DevNode_Ex mais ca marche pas
res = CM_Locate_DevNode_Ex(pdnDevInst_OUT, hid, CM_LOCATE_DEVNODE_NORMAL, hMachine);
_itoa(res, buffer, 10);
MessageBox(NULL, buffer, "msg", 0);
// Voir les codes de sortie dans cfgmgr32.h : CR_SUCCESS = 0
Mais le probleme, c'est qu'un message windows d avertisement apparait lors du CM_Request_Device_Eject_Ex, me disant que le peripherique n'est pas amovible ou alors qu'il ne peut pas etre deconnecte, alors que si en réalité il peut l etre (et c est un periph de stockage de masse par usb)
j'y comprends plus rien :(
help
thx!
Vous n’avez pas trouvé la réponse que vous recherchez ?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 3 mars 2004 à 08:20
salut
effectivement il y a plusireurs device par périphérique et seul le device père est déconnectable.
Je vais bientot mettre sur vbfrance une source qui permet d'obtenir la liste des périphérique déconnectables et de les déconnecter si souhaité...