【发布时间】:2012-09-19 03:58:52
【问题描述】:
我正在尝试使用DeviceIoControl 函数识别驱动器是否为系统保留驱动器(PhysicalDrive0 或C-Drive)。但是,我的代码始终为所有驱动器返回 true。
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results
PARTITION_INFORMATION_MBR *pdg
hDevice = CreateFile(TEXT("\\\\.\\C:"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |
FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
bResult = DeviceIoControl(
hDevice, // device to be queried
IOCTL_DISK_GET_PARTITION_INFO_EX, // operation to perform
NULL, 0, // no input buffer
pdg, sizeof(*pdg), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL // synchronous I/O
);
-
bResult总是返回0,表示函数成功。 - 即使
pdg->PartitionType有垃圾信息,也不会返回true。
【问题讨论】:
-
您可能需要仔细查看: 返回值:如果操作成功完成,则返回值非零。如果操作失败或处于挂起状态,则返回值为零。要获取扩展错误信息,请调用 GetLastError。
-
DeviceIoControl 成功检索了分区信息,并且它(存储在您的
PARTITION_INFORMATION_EX结构中)因此它返回 0(成功)。您现在需要查看您的PARTITION_INFORMATION_EX结构,看看您请求的信息是否存在。
标签: c++ deviceiocontrol