19,500
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
//my code
#include <windows.h>
#include <winioctl.h>
#define IOCTL_DISK_BASE FILE_DEVICE_DISK
#define IOCTL_DISK_GET_STORAGEID CTL_CODE(IOCTL_DISK_BASE, 0x709, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _STORAGE_IDENTIFICATION {
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
#define MANUFACTUREID_INVALID 0x01
#define SERIALNUM_INVALID 0x02
//end of my code
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE hDisk = CreateFile(_T("DSK1:"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (!hDisk) return -1;
PSTORAGE_IDENTIFICATION pStoreInfo = (PSTORAGE_IDENTIFICATION) new BYTE[100];
if (!pStoreInfo) {
CloseHandle(hDisk);
return -2;
}
DWORD dwBytesRet;
if (!DeviceIoControl(hDisk, IOCTL_DISK_GET_STORAGEID, NULL, 0, pStoreInfo, 100, &dwBytesRet, NULL)) { //3000 changed to 46
DWORD err = GetLastError();
delete [] pStoreInfo;
CloseHandle(hDisk);
return -3;
}
TCHAR tStr[200];
if (dwBytesRet)
{
unsigned char *SerialNo=(((BYTE *)pStoreInfo)+pStoreInfo->dwSerialNumOffset);
int i =0;
while (SerialNo[i]!=0 && i < (int)(dwBytesRet-pStoreInfo->dwSerialNumOffset))
{
tStr[i] = (TCHAR)SerialNo[i];
i++;
}
tStr[i] = 0;
}
delete [] pStoreInfo;
CloseHandle(hDisk);
MessageBox(NULL, tStr, _T("HDD Serial No"), MB_OK);
return 0;
}