Comment puis-je réinitialiser les périphériques USB à l'aide de l'API Windows?
Connaissez-vous un moyen d'utiliser les API de Windows XP pour réinitialiser le bus USB? En d'autres termes, j'aimerais avoir l'OS à coup de pied hors de tout les périphériques USB qui sont connectés, et puis l'auto-détecter tout nouveau.
Je suis conscient de devcon, et je suppose que j'ai pu faire des appels système à elle, mais je suis l'espoir d'un appel direct à l'API.
OriginalL'auteur Isaac Moses | 2009-06-12
Vous devez vous connecter pour publier un commentaire.
Du mode noyau: Vous pouvez forcer un périphérique USB spécifique pour être re-connecté, comme s'il était débranché et replugged de nouveau, par l'envoi d'un
IOCTL_INTERNAL_USB_CYCLE_PORT
à son AOP. (Cela ne peut être fait à partir d'un mode noyau, par exemple par le biais d'un pilote d'assistance.) Ce "cycle" entraîne une réinitialisation USB, après laquelle l'appareil sera de nouveau énumérés. Par exemple, si l'appareil est à nouveau avec un autre périphérique USB descripteur, un autre pilote ne peut être apparié.Depuis le mode utilisateur: ce faire, Vous pouvez éjecter le périphérique à travers les CfgMgr API. Par exemple, pour aller au-dessus de tous les concentrateurs USB et éjecter tous les appareils:
GUID_DEVINTERFACE_USB_HUB
avecSetupDiGetClassDevs(... DIGCF_DEVICEINTERFACE)
.SetupDiEnumDeviceInfo
).DevInst
membre:CM_Get_Child(DevInst)
et puisCM_Get_Sibling
à plusieurs reprises de revenir sur tous les nœuds enfants du moyeu (c'est à dire les périphériques USB).CM_Request_Device_Eject
.OriginalL'auteur Ilya
Bien, vous pouvez utiliser l'API de Configuration (setupdi xxx fonctions) pour énumérer les périphériques USB dans le système, et ensuite appeler WinUsb_ResetPipe sur chacun d'eux, mais je ne suis pas sûr si c'est ce que vous cherchez. Il a été un moment depuis que j'ai travaillé avec les périphériques USB, mais je me souviens, il n'existe pas de méthode standard pour la réinitialisation de l'appareil (c'est à dire de simuler un arrêt/mise en marche du cycle). Si c'est possible pour un périphérique particulier, vous devez envoyer un approprié IOCTL (à l'aide de DeviceIOControl) pour le pilote. L'IOCTL varient d'un fabricant à l'autre.
OriginalL'auteur Peter Ruderman
Il est possible de cycle de la mère sur le port USB hub périphérique est attaché, en tant que bien. Cela va entraîner, entre autres choses, apparrent débrancher/rebrancher actions, comme vous le verrez un ballon popup lorsque cela se produit.
Beaucoup de ce qui est mal documenté, et honnêtement, j'ai eu l'impression il ya seulement une poignée de personnes à Microsoft qui a vraiment la comprendre. La conception de la décision que j'ai faite pour les futurs appareils que je conçois, c'est que j'ai l'intention d'inclure la surveillance de la fonctionnalité sur les deux côtés, ainsi qu'un dispositif de côté plein de la fonction reset. De cette façon, si l'appareil sur les chiffres, il est confondu, il suffit de les couper son propre pouvoir pour un deuxième et entièrement reset, si l'hôte ne peut pas communiquer avec lui, il pourrait faire la même chose, et si l'appareil pense que tout est bien, mais l'hôte sait mieux, l'hôte pourrait ordonner la remise à zéro.
Il y a au moins trois Api utile dans la recherche de ce problème: l'API de Configuration, le Gestionnaire de configuration de l'API, et de divers WMI extensions. Toutefois, soyez prudent à propos de la plongée dans WMI si vous avez l'intention d'utiliser un Intégré à XP cible, vous devrez inclure beaucoup d'autres choses dans votre image de système d'exploitation que vous pourriez ne pas avoir besoin.
OriginalL'auteur Matt Heck
Autant que je sache, il n'existe aucun moyen pour ce faire, vous pouvez émettre une commande PnP rescan le bus pour les nouveaux appareils, mais ce n'est pas la même que l'exécution d'une réinitialisation du bus.
En outre, tout simplement parce que d'un point de vue matériel que vous avez attribué une réinitialisation du bus ne veut pas dire que Windows va supprimer l'Aop qui représentent les enfants du hub et les redétecter; le bus USB pilote peut (et ne doit) faire ce que je décris (c'est à dire problème matériel réinitialiser le bus sans déranger l'arborescence des périphériques), et seulement après l'appareil ne répond pas, est-il question de la surprise, de suppression et de le tirer de l'arbre.
OriginalL'auteur Paul Betts