1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
R:=GetDriveType(lecteur);
Case R of
DRIVE_UNKNOWN : ShowMessage('Inconnu');
DRIVE_NO_ROOT_DIR : ShowMessage('Inconnu');
DRIVE_REMOVABLE :begin
{C'est ici que ça se passe}
H:=CreateFile('\\.\'+Lecteur,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,
nil,OPEN_EXISTING,0,0);
if H= INVALID_HANDLE_VALUE then ShowMessage('Erreur Handle')
else begin
DeviceIoControl(H,FSCTL_LOCK_VOLUME,nil,0,nil,0,cb,nil);
DeviceIoControl(H,FSCTL_DISMOUNT_VOLUME,nil,0,nil,0,cb,nil);
MRBuffer.PreventMediaRemoval := False; //<- a ne pas oublier :oops:
PMRBuffer:=@MRBuffer;
DeviceIoControl(H,IOCTL_DISK_MEDIA_REMOVAL,nil,0,nil,0,cb,nil);
DeviceIoControl(H,IOCTL_DISK_EJECT_MEDIA , nil, 0,nil,0, cb, nil);
CloseHandle(H);
end;
end;
DRIVE_FIXED : ShowMessage('Fixe');
DRIVE_REMOTE : ShowMessage('Réseau');
DRIVE_CDROM : begin
H:=CreateFile('\\.\'+Lecteur,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,
nil,OPEN_EXISTING,0,0);
if H= INVALID_HANDLE_VALUE then ShowMessage('Erreur Handle')
else begin
DeviceIoControl(H,FSCTL_LOCK_VOLUME,nil,0,nil,0,cb,nil);
DeviceIoControl(H,FSCTL_DISMOUNT_VOLUME,nil,0,nil,0,cb,nil);
DeviceIoControl(H,IOCTL_STORAGE_EJECT_MEDIA , nil, 0,nil,0, cb, nil);
CloseHandle(H);
end;
end;
DRIVE_RAMDISK : ShowMessage('RAM');
else showmessage('Erreur : ');
end; |
Partager