Hallo zusammen!

Ich versuche momentan geleitet von diesem Code (der in einem Test ohne den nachfolgenden Fehler funktionierte, der in meiner "Reproduktion" auftritt) zu schauen, welche USB-Geräte sich an meiner Maschine befinden: http://www.intel.com/intelpress/usb/examples/DUSBVC.PDF

Und zwar habe ich nun folgenden Ausschnitt:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void CDeviceEnum::EnumerateRootDevices(HANDLE hRoot, NODE_INFORMATION& info)
{
    USB_DESCRIPTOR_REQUEST req;
    DWORD dwBytes = 0;
    for(int index = 1; index < info.HubDesc.bNumPorts + 1; ++index)
    {
        memset(&req, NULL, sizeof(req));
        USB_NODE_CONNECTION_INFORMATION ci;
        ci.ConnectionIndex = index;
        DeviceIoControl(hRoot, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION, &ci, sizeof(ci), &ci, sizeof(ci), &dwBytes, 0);
        if(ci.ConnectionStatus != DeviceConnected)
            continue;
        if(ci.DeviceIsHub)
            continue;
        
        req.ConnectionIndex = index;
        req.SetupPacket.bmRequest = 0x80;
        req.SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR;
        req.SetupPacket.wValue = USB_STRING_DESCRIPTOR_TYPE << 8;
        req.SetupPacket.wLength = 4;
 
        if(!DeviceIoControl(hRoot, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
            &req, sizeof(req), &req, sizeof(req), &dwBytes, NULL))
        {
            std::cout << "-> GetLangId: " << GetLastError() << std::endl;
            continue;
        }
 
        USHORT langId = req.Data[2] + ((USHORT)req.Data[3] << 8);
        memset(&req, NULL, sizeof(req));
        req.ConnectionIndex = index;
        req.SetupPacket.bmRequest = 0x80;
        req.SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR;
        req.SetupPacket.wValue = ci.DeviceDescriptor.iProduct | (USB_STRING_DESCRIPTOR_TYPE << 8);
        req.SetupPacket.wValue = USB_STRING_DESCRIPTOR_TYPE;
        req.SetupPacket.wIndex = langId;
        req.SetupPacket.wLength = 255;
 
        if(!DeviceIoControl(hRoot, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
            &req, sizeof(req), &req, sizeof(req), &dwBytes, NULL))
        {
            std::cout << "-> GetString: " << GetLastError() << std::endl;
            continue;
        }
    }
}


Hierbei funktioniert soweit alles perfekt bis auf die Tatsache, dass ab dem ersten geprüften DeviceIoControl mit dem Request der ErrorCode 2 auftritt. USB_CONNECTION_INFORMATION ci beinhält jedoch genau die richtigen Werte, das habe ich dann auch mit der Ausgabe des funktionierenden Intel-Codes abegeglichen. Allerdings erzeugt mein Code da den FILE_NOT_FOUND-Fehler, während derjenige von Intel dieses Problem nicht zu kennen scheint.

Übersehe ich auf Grund der fortgeschrittenen Uhrzeit etwas?

Besten Dank und Gruss
Cromon