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