Wie man freundlich Gerätenamen aus DEV_BROADCAST_DEVICEINTERFACE und Geräte-Instanz-ID

Habe ich registriert ein Fenster mit RegisterDeviceNotification und kann erfolgreich erhalten DEV_BROADCAST_DEVICEINTERFACE Nachrichten. Jedoch, die dbcc_name Feld in der zurückgegebenen struct ist immer leer. Die Struktur habe ich so definiert:

[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
    public int dbcc_size;
    public int dbcc_devicetype;
    public int dbcc_reserved;
    public Guid dbcc_classguid;
    [MarshalAs(UnmanagedType.LPStr)]
    public string dbcc_name;
}

Und ich bin mit Marshal.PtrToStructure auf den LParam der WM_DEVICECHANGE Nachricht.

Sollten diese arbeiten?

Oder noch besser... gibt es eine alternative Möglichkeit, um den Namen des Geräts bei der Verbindung?

BEARBEITEN (02/05/2010 20:56GMT):

Fand ich heraus, wie man die dbcc_name Feld zu füllen, durch, dies zu tun:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
    public int dbcc_size;
    public int dbcc_devicetype;
    public int dbcc_reserved;
    public Guid dbcc_classguid;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
    public string dbcc_name;
}

aber ich brauche immer noch einen Weg, um einen "Benutzerfreundlichen" Namen aus was ist int dbcc_name. Es sieht wie folgt aus:

\?\USB#VID_05AC&PID_1294&MI_00#0#{6bdd1fc6-810f-11d0-bec7-08002be2092f}

Ist und ich wirklich wollen einfach nur, es zu sagen "Apple iPhone" (das ist das, was das Gerät in diesem Fall).

InformationsquelleAutor snicker | 2010-02-05

Schreibe einen Kommentar