Trouver le processus qui a un verrou exclusif sur un périphérique USB poignée
J'ai une bibliothèque des lectures/écritures sur une clé USB-appareil à l'aide des API CreateFile (). L'appareil arrive à mettre en œuvre le HID-profil de périphérique, tel qu'il est compatible avec Microsoft HID pilote de classe.
Une autre application installée sur le système d'ouverture de l'appareil en mode lecture/écriture avec aucun mode de partage. Qui empêche ma bibliothèque (et tout ce qu'il consomme) de travailler avec l'appareil. Je suppose que c'est la frotter avec un HID périphérique compatible -- autres le pilote logiciel (souris, les contrôleurs, les PHIDGETS, etc) peuvent être peu coopératifs.
De toute façon, l'appareil chemin d'accès du fichier est de la forme:
1: "\\?\hid#hpqremhiddevice&col01#5&21ff20e7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}". 2: "\\?\hid#vid_045e&pid_0023#7&34aa9ece&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}". 3: "\?\hid#vid_056a&pid_00b0&col01#6&5b05f29&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
Et j'essaie de l'ouvrir à l'aide de code, comme:
// First, open it with minimum permissions, this device may not be ours.
// we'll re-open it later in read/write
hid_device_ref = CreateFile(
device_path, GENERIC_READ,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
Je l'ai considéré comme un outil comme FileMon ou le Moniteur de Processus de SysInternals. Mais je n'arrive pas à l'obtenir à l'état de l'utilisation de l'appareil descripteurs de fichiers comme l'un de ceux énumérés ci-dessus.
OriginalL'auteur Mike Haboustak | 2008-08-22
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé l'outil appelé poignée de sysinternals?
De toute façon, ni windows ne ce (afficher le nom de l'application qui a verrouillé l'appareil): lorsque vous essayez d'éjecter un périphérique USB, Windows indique que l'appareil est actuellement en cours d'utilisation et ne peut pas être supprimer maintenant.
OriginalL'auteur botismarius
C'est ce que j'utilise pour lire à partir d'un Magtek lecteur de carte:
Essayez ces options, et voir si vous pouvez au moins en lecture à partir de l'appareil.
Je comprends votre douleur ici... j'ai trouvé l'USB HID documentation être fondamentalement mauvais dans plusieurs endroits.
[Modifier] Il n'y a pas beaucoup là-bas sur ce problème. Voici un codeproject lien qui touche légèrement sur le sujet dans un fil de discussion au fond. Sonne comme peut-être si c'est un clavier ou de la souris de windows attrape exclusivement.
OriginalL'auteur Eric Z Beard
Il y a un truc que vous pouvez faire lorsque vous ouvrez la poignée du dispositif requérant ni lire, ni écrire autorisation et d'interagir avec elle en utilisant uniquement la fonctionnalité de rapports. Jan Axelson mentionne cette astuce dans ses livres sur l'USB périphériques HID. Je crois que c'est le problème avec le verrouillage exclusif, qui vous rencontrez (par exemple) lorsque vous tentez d'ouvrir un handle vers un périphérique Windows considère un système de clavier ou de la souris. Même si vous ne pouvez pas lire ou écrire la poignée, vous pouvez toujours envoyer un rapport spécial à l'appareil à l'aide de
HidD_SetFeature
et de lire un rapport à partir de l'appareil à l'aide deHidD_GetFeature
. Je ne sais pas désinvolte d'une façon de lire l'entrée de rapports ou d'envoyer des rapports de sortie dans ces circonstances, et c'est peut-être impossible de le faire, mais vous ne pourriez pas besoin, surtout si l'appareil est "votre" appareil dans le sens que vous contrôlez le firmware. Strictement parlant, ce n'est rien pour répondre à votre question, comme demandé, mais il semblait potentiellement pertinentes, alors j'ai pensé que je jetterais là-bas.OriginalL'auteur zaphod
Cool, je vais essayer ces options, car ils sont probablement mieux les valeurs par défaut compte tenu de mes intentions. Malheureusement, je sais que mon appareil est-il et je vais finalement besoin d'accès en lecture/écriture plus tard (une fois que j'ai inspecter les descripteurs et avoir vérifiée, il est enfait mon appareil).
Ce qui signifie que mon but ultime EST de savoir ce qu'il l'aide, afin que je puisse informer le client/utilisateur: "Hey man, 'iexplore.exe" est actuellement à l'aide de votre SuperWidget appareil. Vous aurez à fermer vers le bas afin d'utiliser SuperWidget application." (si ce n'est au niveau de l'application, du moins au support téléphonique de niveau.)
J'ai oublié de mentionner que le windows erreur signalée par GetLastError() est:
(Donc de votre partage de solutions de rechange sera probablement obtenir le fichier ouvert, en supposant qu'aucun FILE_SHARE_NONE au nom des autres processus).
[modifier]
OriginalL'auteur Mike Haboustak