DeviceIoControl
기능을 사용하여 드라이브가 시스템 예약 드라이브 (PhysicalDrive0
또는 C-Drive
)인지 식별하려고합니다. 그러나 내 코드는 항상 모든 드라이브에 대해 true를 반환합니다.C에서 DeviceIoControl 기능을 사용하여 시스템 예약 드라이브 식별
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
isalways 함수가 성공한 것을 나타내는 0을 반환.- 심지어
pdg->PartitionType
에는 정크 정보가 있고true
을 반환하지 않습니다.
자세한 내용은 다음을 참조하십시오. * 반환 값 : 작업이 성공적으로 완료되면 반환 값은 0이 아닙니다. 작업이 실패하거나 보류중인 경우 반환 값은 0입니다. 자세한 오류 정보를 얻으려면 GetLastError. * – chris
을 호출하십시오. DeviceIoControl이 파티션 정보를 성공적으로 가져 왔고 (PARTITION_INFORMATION_EX 구조체에 저장되어 있으므로) 0 (성공)을 반환했습니다. 이제는 'PARTITION_INFORMATION_EX' 구조를보고 요청한 정보가 있는지 확인해야합니다. –