Finden Sie heraus, welcher Prozess eine exklusive Sperre auf einem USB-Gerät behandeln
Ich habe eine Bibliothek, die liest/schreibt auf ein USB-Gerät mit CreateFile() API. Das Gerät geschieht zu implementieren, die HID-device-Profil, so dass es kompatibel mit Microsoft HID class-Treiber.
Einer anderen Anwendung auf dem system installiert ist, öffnen Sie das Gerät im lese - /schreib-Modus mit keine Freigabe-Modus. Die verhindert, dass meine Bibliothek (und alles, was verbraucht er) arbeiten mit dem Gerät. Ich nehme an, das ist der Haken mit einer HID-kompatiblen Gerät -- andere-Treiber-software (Mäuse, Controller, PHIDGETS, etc) können unkooperativ.
Sowieso, die Geräte-Datei-Pfad ist von der form:
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}".
Und ich versuche, es zu öffnen mit code wie:
// 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);
Habe ich mir überlegt ein tool wie FileMon oder Process Monitor von SysInternals. Aber ich kann nicht scheinen, um es zu melden-Nutzung auf Gerät Datei-handles wie die, die oben aufgeführt sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, das tool namens Griff von sysinternals?
Jedenfalls weder windows dies tut (zeigt den Namen der Anwendung, die gesperrt das Gerät): wenn Sie versuchen, Auswerfen eines USB-Geräts, Windows sagt nur, dass das Gerät zurzeit verwendet und kann nicht entfernen, jetzt.
Dies ist, was ich verwenden zum Lesen aus einer Magtek Kartenleser:
Versuchen Sie, diese Optionen und sehen, wenn Sie mindestens aus dem Gerät gelesen.
Ich verstehe deinen Schmerz hier... ich fand die USB-HID-Dokumentation werden grundsätzlich falsch an mehreren stellen.
[Bearbeiten] Es gibt nicht viel da draußen auf dieses problem. Hier ist ein codeproject link, dass leicht berührt, auf das Thema in ein Gewinde an der Unterseite. Klingt vielleicht, wenn es eine Tastatur oder eine Maus windows packt es ausschließlich.
Gibt es einen trick, den Sie tun können, wo Sie das Gerät öffnen und handhaben ersuchenden weder Lesen noch schreiben-Berechtigung und mit ihm zu interagieren, die nur mithilfe von feature berichtet. Jan Axelson erwähnt diesen trick in Ihren Büchern über die USB-HID-Geräte. Ich glaube, dies wird um das problem mit der Schreibsperre, die Sie stoßen würde (zum Beispiel), wenn Sie versuchen, öffnen Sie ein handle für ein Gerät, das Windows hält eine system-Tastatur oder-Maus. Auch wenn Sie nicht Lesen können, oder schreiben Sie den Griff, können Sie immer noch senden Sie eine Funktion, Bericht an das Gerät unter Verwendung
HidD_SetFeature
und Lesen Sie einen Bericht aus dem Gerät mitHidD_GetFeature
. Ich weiß nicht, offhand ein Weg zum Eingang Lesen, Berichte oder senden Ausgabe berichtet unter diesen Umständen, und vielleicht ist es unmöglich, so zu tun, aber Sie vielleicht nicht brauchen, entweder von denen, vor allem, wenn das Gerät "Ihren" Gerät-in dem Sinne, dass Sie die Kontrolle der firmware. Streng genommen bedeutet dies nichts auf Ihre Frage zu Antworten, wie gefragt, aber es schien interessant, so dass ich dachte, ich würde werfen es draußen.Cool - ich werde versuchen diese Optionen, wie Sie sind wahrscheinlich bessere Standardwerte angesichts meiner Absichten. Leider, ich weiß, mein Gerät ist da und ich müssen irgendwann den lese - /Schreibzugriff später (sobald ich überprüfen Sie die Deskriptoren und verifed es ist infact mein Gerät).
Was bedeutet, dass mein eigentliches Ziel IST es, zu wissen, was es, so kann ich Sie informieren die Kunden/user: "Hey Mann, 'iexplore.exe' wird aktuell mit Ihrem SuperWidget Gerät. Sie haben zu schließen, dass nach unten, um zu verwenden SuperWidget Anwendung." (wenn nicht auf der Applikations-Ebene, dann zumindest auf dem Handy-support-level.)
Ich vergaß zu erwähnen, dass die windows-Fehler gemeldet, der von GetLastError() ist:
(So Ihre sharing-alternativen wird wohl die Datei zu öffnen, vorausgesetzt, es ist kein FILE_SHARE_NONE im Namen des anderen Prozesses).
[Bearbeiten]