Announcement

Collapse
No announcement yet.

Vom USBStick VID,PID und Seriennummer auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vom USBStick VID,PID und Seriennummer auslesen

    Hallo

    wie kann ich die VID,PID und die Seriennummer eines Angeschlossen USB-Sticks auslesen. Ich habe schon eein paar code-snipsel gefund und kann Eigenschaften vom USB-Stick ausgelesen nur leider fehlen mir die wichtigsten daten VID,.. usw. könnt ihr mir vielleicht helfen.

    VID = VendorID
    PID = ProduktID

    Struktur für Daten erfassung
    Code:
    struct STRUCT_USB_DEVICE_INFO
    {
       DWORD                            dwDevice;
       TCHAR                            szFriendlyname [MAX_NAME];
       TCHAR                            szDeviceID     [MAX_NAME];
       TCHAR                            szVolumename1  [MAX_NAME];
       TCHAR                            szVolumename2  [MAX_NAME];
       TCHAR                            szVolumeFS     [MAX_NAME];
       TCHAR                            szVolumePath   [MAX_NAME];
       TCHAR                            szDevicePath   [MAX_NAME];
    
       DWORD                            dwSerial;
       DWORD                            dwComponentlength;
       DWORD                            dwFilesystemflags;
    
       DISK_GEOMETRY                    disk_geo;
    
       LARGE_INTEGER                    iBytes_physical;
       long                             iBytes_available;
       long                             iBytes_total;
       long                             iBytes_free;
    
    };
    Meine Funktion zu Suchen aller USB-Sticks und Daten Erfassung
    Code:
    #include <sysmac.h>
    #include <dbt.h>
    #include <windows.h>
    #include <stdio.h>
    #include <winbase.h>
    #include <winioctl.h>
    #include <string.h>
    #include <setupapi.h>
    #include <devguid.h>
    
    bool TForm1::FindDevices()
    {
    
    
       GUID                             l_guid = { 0x53f56307L, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } };
    
       HANDLE                           l_hFile = 0;
       HDEVINFO                         l_hDevInfo = 0;
    
       SP_DEVINFO_DATA                  l_devinfo;
       SP_DEVICE_INTERFACE_DATA         l_devdata;
       SP_DEVICE_INTERFACE_DETAIL_DATA  l_devdata_detail;
       PSP_DEVICE_INTERFACE_DETAIL_DATA l_pdevdata_detail = NULL;
       GET_LENGTH_INFORMATION           l_length_info;
    
       STRUCT_USB_DEVICE_INFO           l_usb;
    
       DWORD                            l_dwEnum = 0;
       DWORD                            l_dwType = 0;
       DWORD                            l_dwSize = 0;
       DWORD                            l_dwSize_Detail = 0;
    
       //--- Deviceliste ermitteln
       l_dwEnum = 0;
       l_hDevInfo = SetupDiGetClassDevs(&l_guid, NULL, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
       if(l_hDevInfo != INVALID_HANDLE_VALUE)
       {
          //--- Groessen der Strukturen belegen
          l_devinfo.cbSize = sizeof(l_devinfo);
          l_devdata.cbSize = sizeof(l_devdata); 
    
          //--- Devices enumerieren 
          while(SetupDiEnumDeviceInterfaces(l_hDevInfo, NULL, &l_guid, l_dwEnum, &l_devdata) == TRUE)
          {
    
             //--- Puffer initialisieren
             memset(&l_usb, 0, sizeof(l_usb));
    
             //--- Benoetigte Bytes fuer Detaildaten ermitteln
             if(SetupDiGetDeviceInterfaceDetail(l_hDevInfo, &l_devdata, NULL, 0, &l_dwSize_Detail, NULL) == FALSE)
             {
                if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)
                {
                   l_pdevdata_detail = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(l_dwSize_Detail);
                   l_pdevdata_detail->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);
    
                   //--- DeviceDetail und DeviceInfo ermitteln
                   if(SetupDiGetDeviceInterfaceDetail(l_hDevInfo, &l_devdata, l_pdevdata_detail, l_dwSize_Detail, &l_dwSize_Detail, &l_devinfo) == TRUE)
                   {
    
                      //--- Registryinformationen auslesen
                      l_dwSize = sizeof(l_usb.szFriendlyname);
                      SetupDiGetDeviceRegistryProperty(l_hDevInfo, &l_devinfo, SPDRP_FRIENDLYNAME, &l_dwType, (UCHAR*)l_usb.szFriendlyname, l_dwSize, NULL);
    
                      //--- Handle auf das Gerät öffnen
                      l_hFile = CreateFile(l_pdevdata_detail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
                      if(l_hFile != INVALID_HANDLE_VALUE)
                      {
                         //--- Device-ID ermitteln
                         if(SetupDiGetDeviceInstanceId(l_hDevInfo, &l_devinfo, l_usb.szDeviceID, sizeof(l_usb.szDeviceID), &l_dwSize) == TRUE)
                         {
                            if(DeviceIoControl(l_hFile, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &l_usb.disk_geo, sizeof(l_usb.disk_geo), &l_dwSize, NULL) > 0)
                            {
                               //--- Prüfung af entfernbares Laufwerk
                               if(l_usb.disk_geo.MediaType == RemovableMedia)
                               {
                                  l_usb.dwDevice = l_devinfo.DevInst;
    
                                  //--- Größe des Laufwerks ermitteln
                                  if(DeviceIoControl(l_hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &l_length_info, sizeof(l_length_info), &l_dwSize, NULL) > 0)
                                  {
                                     l_usb.iBytes_physical  = l_length_info.Length;
                                     strcpy(l_usb.szDevicePath, l_pdevdata_detail->DevicePath);
    
                                     //Speicher der Gefunden Daten des USB-Sticks
                                     AllUSB[Anzahl] = l_usb;
                                     Anzahl++;
    
    
                               }  }
                            }
                         }
                         CloseHandle(l_hFile);
                         l_hFile = 0;
                      }
                   }
                   free(l_pdevdata_detail);
                   l_pdevdata_detail = NULL;
                }
             }
    
             //--- Naechstes Device prüfen
             l_dwEnum++;
          }
    
          //--- Deviceliste wieder feigeben
          SetupDiDestroyDeviceInfoList(l_hDevInfo);
          return TRUE;
       }
       else
       {
          return FALSE;
       }
    
    };
    Mfg SK-2
    Mfg SK-2

  • #2
    Google mal nach libusb.

    mfg
    Fred

    Comment

    Working...
    X