Я пытаюсь получить серийный номер жесткого диска или метки аккумулятора

#include "stdafx.h"#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <process.h>
#include <WinIoCtl.h>
#include <Winbase.h>

typedef struct _MEDIA_SERIAL_NUMBER_DATA {
ULONG SerialNumberLength;
ULONG Result;
ULONG Retreived;
DWORD SerialNumberData[];
} MEDIA_SERIAL_NUMBER_DATA, *PMEDIA_SERIAL_NUMBER_DATA;  // the structure of IOCTL_MEDIA_SERIAL_NUMBER_DATA

int main() {
HANDLE hard;
bool result;
MEDIA_SERIAL_NUMBER_DATA  val;
char buf[sizeof(MEDIA_SERIAL_NUMBER_DATA)];
MEDIA_SERIAL_NUMBER_DATA * p = (MEDIA_SERIAL_NUMBER_DATA *) buf;

hard = CreateFile(L"\\\\.\\C:", 0, FILE_SHARE_WRITE, NULL,    OPEN_EXISTING, 0, 0);
result = DeviceIoControl(hard, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER,    NULL, 0, buf, sizeof buf, 0, NULL);

if (hard == INVALID_HANDLE_VALUE)
printf("Terminal error : invalid handle value \n");

printf("valeur Handle : %c \n", hard);
printf("valeur retour :    %d \n", result);
printf("valeur serial : %d \n",    p->SerialNumberData);
printf("valeur longeur num serie : %d \n",    p->SerialNumberLength);

CloseHandle(hard); // free the Handle
system("pause");
return 0;
}

Когда я компилирую и выполняю этот кусок кода, я получаю следующий результат:

valeur Handle : D
valeur retour : 0
valeur serial : 15530164
valeur longeur num serie : -858993460

-2

Решение

Попробуйте прочитать некоторую документацию.

  1. Почти все ваши printfs использовать неверную строку формата.
  2. Ваша структура не является структурой, которая DeviceIoControl возвращается за IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER,
  3. Если lpOverlapped является NULL, lpBytesReturned не может быть NULL,
  4. IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER получает серийный номер USB-устройство.
  5. Возвращаемое значение ноль от DeviceIoControl указывает на неудачу.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]