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
Meine Funktion zu Suchen aller USB-Sticks und Daten Erfassung
Mfg SK-2
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; };
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; } };
Comment