MBR的读取
来源:互联网 发布:淘宝中权重是什么意思 编辑:程序博客网 时间:2024/05/21 17:58
- void CKillScriptDlg::ReadMBR(BYTE* pMBR, UINT nLen)
- {
- HANDLE hDevice;
- LPSTR szBuff = NULL;
- DISK_GEOMETRY Geometry = {0};
- BOOL bRet;
- DWORD bytes = 0,bread = 0,count = 0;
- int i = 0;
-
- hDevice = CreateFileA( "////.//PHYSICALDRIVE0",
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL, OPEN_EXISTING, 0, NULL );
- if (hDevice == INVALID_HANDLE_VALUE)
- {
- MessageBoxA(NULL,"打开设备出错",NULL,MB_OK);
- return;
- }
-
- bRet = DeviceIoControl(hDevice,
- FSCTL_LOCK_VOLUME,
- NULL, 0,
- NULL, 0,
- &count, NULL);
- if(!bRet)
- {
- CloseHandle(hDevice);
- return;
- }
- bRet = DeviceIoControl(hDevice,
- IOCTL_DISK_GET_DRIVE_GEOMETRY,
- NULL, 0,
- &Geometry,
- sizeof(DISK_GEOMETRY),
- &count,NULL);
- if(!bRet)
- {
- goto END;
- }
- szBuff = (LPSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Geometry.BytesPerSector);
- if( szBuff == NULL)
- {
- MessageBoxA(NULL,"分配内存出错",NULL,MB_OK);
- goto END;
- }
- bytes = 512;
- bRet = ReadFile(hDevice, szBuff, bytes, &bread, NULL);
- if (bRet == FALSE || bread<512)
- {
- MessageBoxA(NULL,"读MBR出错",NULL,MB_OK);
- goto END;
- }
- for(int n=0; n<512; n++)
- {
- pMBR[n] = szBuff[n];
- }
- END:
-
- DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &count,NULL);
- CloseHandle(hDevice);
- }