CalypsoToolz 451 Опубликовано 1 ноября, 2015 Всем привет! Нужна помощь по С++, ибо с ним знаком лишь поверхностно. В общем, пытаюсь получить SerialNumber HDD, используя код от r(ft)-guard: void __cdecl new_SendPacket(unsigned int This, char *Format, ...) { ... wchar_t serialNumber[1024]; memset(serialNumber, 0, 1024 * 2); if (!getHDDSerialNumber(serialNumber)) { Debug("Get HDD Serial Number Fail!"); return; } ... } bool getHDDSerialNumber(wchar_t *str) { HANDLE hPhysicalDriveIOCTL = 0; char serialNumber[1024], windir[256], filename[256]; if (GetWindowsDirectoryA(windir, 256) == 0) return false; memset(filename, 0, 256); strcpy_s(filename, "\\\\.\\\\"); windir[2] = 0; strcat_s(filename, windir); hPhysicalDriveIOCTL = CreateFileA(filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE) return false; STORAGE_PROPERTY_QUERY query; unsigned long cbBytesReturned = 0; char buffer[10000]; memset ((void *) &query, 0, sizeof (query)); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; memset (buffer, 0, sizeof (buffer)); if (!(DeviceIoControl(hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &buffer, sizeof(buffer), &cbBytesReturned, 0))) { CloseHandle(hPhysicalDriveIOCTL); return false; } STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer; sprintf_s(serialNumber, 1000, "%02X%02X", flipAndCodeBytes(buffer, descrip->SerialNumberOffset, 1, serialNumber)); mbstowcs_s(0, str, 1000, serialNumber, 1000); return true; } Функция возвращает false на этом участке: if (!(DeviceIoControl(hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &buffer, sizeof(buffer), &cbBytesReturned, 0))) { CloseHandle(hPhysicalDriveIOCTL); return false; } Почитал про функцию DeviceIoControl, переписывал по найденным примерам, но попытки успехом не увенчались. В чем может быть проблема / может какой другой способ посоветуете? Те, кто пользуется этим гуардом, если у вас определяется HDD SerialNumer, то прошу поделиться кодом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты