J'essaie d'identifier si un lecteur est un lecteur réservé au système (PhysicalDrive0
ou C-Drive
) en utilisant la fonction DeviceIoControl
. Cependant, mon code retourne toujours vrai pour tous les lecteurs.Identification du lecteur système réservé à l'aide de la fonction DeviceIoControl en C++
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 retour 0, ce qui indique que la fonction a réussi.- Même
pdg->PartitionType
contient des informations inutiles et ne renvoie pastrue
.
Vous pourriez vouloir prendre de plus près: * Valeur de retour: Si l'opération se termine avec succès, la valeur de retour est non nulle. Si l'opération échoue ou est en attente, la valeur de retour est zéro. Pour obtenir des informations d'erreur étendues, appelez GetLastError. * – chris
DeviceIoControl a récupéré avec succès les informations de partition et il est (stocké dans votre structure 'PARTITION_INFORMATION_EX') donc il a retourné 0 (succès). Vous devez maintenant regarder votre structure 'PARTITION_INFORMATION_EX' et voir si les informations que vous avez demandées sont là ou non. –