Перейти к содержанию
Авторизация  
CalypsoToolz

Получение серийника HDD

Рекомендуемые сообщения

Всем привет! Нужна помощь по С++, ибо с ним знаком лишь поверхностно. В общем, пытаюсь получить 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, то прошу поделиться кодом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...