Mithilfe von WMI zu erkennen, welches Gerät verursacht ein Win32_DeviceChangeEvent

Ich habe einige code schreiben, der erkennt, hinzufügen und entfernen von USB-Geräten, und ich habe mit dem folgenden WMI code zum registrieren für das Gerät ändern Benachrichtigungen:

watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(DeviceChangeEventReceived);
watcher.Start();

Dies ist der hf-code:

void DeviceChangeEventReceived(object sender, EventArrivedEventArgs e)
{
   foreach (PropertyData pd in e.NewEvent.Properties)
   {
      Log.Debug("\t" + pd.Name + ":" + pd.Value + "\t" + pd.Value.GetType());
   }
}

Dies ist großen und ganzen, es funktioniert für alle USB-Gerät einstecken oder entfernen aus dem system. Das problem, dass ich habe ist, wie erkenne ich das das Gerät speziell, die Ursache der Ereignisse?

Anderer Stelle in meinem Programm, ich bin halten Sie eine Liste der aktuell verbundenen Geräte, die mich am meisten interessiert, so dass, wenn ein Gerät-entfernt event durch kommt, kann ich überprüfen, dass die Liste gegen WMI mit "select * from Win32_PnPEntity" oder einige andere ähnliche Abfrage. ABER, dies ist eine sehr ungenaue und umständliche Art und Weise der Ermittlung des Geräts, das entfernt wurde. Das zusätzliches problem ist, ich habe keine Möglichkeit, genau zu sagen, was Gerät Hinzugefügt wurde, es sei denn, ich cache die gesamte Liste der Win32_PnPEntity vor der Zeit, und tun, wirklich tolle Vergleiche/Validierungen.

Übersehe ich etwas offensichtliches hier? Wie Verbinde ich das Gerät ändern Sie Ereignisse zu einem bestimmten Gerät?

UPDATE: ich habe noch nicht eine ideale Lösung für dieses problem, aber das was ich mache, ist die Aufrechterhaltung einer Liste der aktuell verbundenen Geräte (von der ich interessiert bin) in Erinnerung, und jedes mal, wenn ein Ereignis behandelt wird (siehe oben), habe ich die Abfrage der Win32_PnPEntity, um zu sehen, ob die Geräte, die ich gespeichert habe in meinem angeschlossenen Geräte in der Liste sind noch immer verbunden. Dies ist eine sub-optimale Lösung, denn es scheint nur seltsam, dass ich kann nicht alle spezifischen Geräte-Identifikation Informationen aus dem Ereignis, das angibt, "device change-Ereignis". Scheint SEHR seltsam, dass diese info nicht verfügbar ist. Seufzer

Schreibe einen Kommentar