- var
- bByteReturn: Cardinal;
- FSCTL_LOCK_VOLUME: integer;
- begin
- try
- //FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS)
- FSCTL_LOCK_VOLUME := CTL(FILE_DEVICE_FILE_SYSTEM, METHOD_BUFFERED, 6, FILE_ANY_ACCESS); //dwIoControlCode Code de controle de l'action a effectuer
-
- hFile := CreateFile(PChar('\\.\' + copy(dcbLecteur.Text, 1, pos(':', dcbLecteur.Text))), GENERIC_WRITE or GENERIC_READ, FILE_SHARE_READ + FILE_SHARE_WRITE,
- nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); //on récupère un handle sur le volume désiré
- //FILE_SHARE_READ ou FILE_SHARE_WRITE est obligatoire (au moins l'un des deux) pour dwShareMode
-
- if hFile = INVALID_HANDLE_VALUE then //si l'handle est invalide alors on arrête
- begin
- ShowMessage(SysErrorMessage(GetLastError)); //message explicatif du code erreur renvoyé
- //par GetLastError
- Exit;
- end;
-
- if NOT DeviceIoControl(hFile, FSCTL_LOCK_VOLUME, nil, 0, nil, 0, bByteReturn, nil) then
- ShowMessage(SysErrorMessage(GetLastError)) //message explicatif du code erreur renvoyé
- else //par GetLastError
- Caption := dcbLecteur.Text + ' > Locked (' + IntToStr(hFile) + ')';
- //******************************************************************************
- //Si vous avez un accès refusé c'est possible que vous n'y avez pas accès car
- //il y a un fichier d'ouvert sur ce volume ! Il vous faut laccès exclusif dessus
- //******************************************************************************
-
- ShowMessage('Si tout s''est bien passé, n''oubliez pas de UNLOCK le meme driver que vous avez' +
- ^M + 'LOCK! sinon en fermant le programme les volumes seront reliberés a la fermeture des handles');
- except
- ShowMessage(SysErrorMessage(GetLastError))
- end;
var
bByteReturn: Cardinal;
FSCTL_LOCK_VOLUME: integer;
begin
try
//FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS)
FSCTL_LOCK_VOLUME := CTL(FILE_DEVICE_FILE_SYSTEM, METHOD_BUFFERED, 6, FILE_ANY_ACCESS); //dwIoControlCode Code de controle de l'action a effectuer
hFile := CreateFile(PChar('\\.\' + copy(dcbLecteur.Text, 1, pos(':', dcbLecteur.Text))), GENERIC_WRITE or GENERIC_READ, FILE_SHARE_READ + FILE_SHARE_WRITE,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); //on récupère un handle sur le volume désiré
//FILE_SHARE_READ ou FILE_SHARE_WRITE est obligatoire (au moins l'un des deux) pour dwShareMode
if hFile = INVALID_HANDLE_VALUE then //si l'handle est invalide alors on arrête
begin
ShowMessage(SysErrorMessage(GetLastError)); //message explicatif du code erreur renvoyé
//par GetLastError
Exit;
end;
if NOT DeviceIoControl(hFile, FSCTL_LOCK_VOLUME, nil, 0, nil, 0, bByteReturn, nil) then
ShowMessage(SysErrorMessage(GetLastError)) //message explicatif du code erreur renvoyé
else //par GetLastError
Caption := dcbLecteur.Text + ' > Locked (' + IntToStr(hFile) + ')';
//******************************************************************************
//Si vous avez un accès refusé c'est possible que vous n'y avez pas accès car
//il y a un fichier d'ouvert sur ce volume ! Il vous faut laccès exclusif dessus
//******************************************************************************
ShowMessage('Si tout s''est bien passé, n''oubliez pas de UNLOCK le meme driver que vous avez' +
^M + 'LOCK! sinon en fermant le programme les volumes seront reliberés a la fermeture des handles');
except
ShowMessage(SysErrorMessage(GetLastError))
end;