我试过createfile然后直接物理读取的方法,但是读取出来的每个分区无法和实际的盘符分配情况一一对应,所以想问问有没有什么windowsapi可以使用?
刚发现使用IOCTL_DISK_GET_DRIVE_LAYOUT_EX这个控制码似乎可以进行deviceioctl后获得,但是我写了段测试代码无效,返回PartitionCount为一个很大的数,代码如下
#include
#include
#include
#include
using namespace std;
int main()
{
DWORD junk;
DRIVE_LAYOUT_INFORMATION_EX pt;
HANDLE hDevice = CreateFileA("\\\\.\\PHYSICALDRIVE0",
GENERIC_READ,
FILE_SHARE_READ,// |
// FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("error,no such device!");
exit(0);
}
//DeviceIoControl(hFile,IOCTL_DISK_GET_DRIVE_LAYOUT,.....);
BOOL bResult = DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // operation to perform
NULL, 0, // no input buffer
&pt, sizeof(pt), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
cout<
}
拜托,我的代码是有错的,那个叫孙冰男的,你原原本本复制一遍干嘛