Ho uno strano problema quando scrivo un singolo settore su un drive USB
Queste sono le funzioni che uso (ovviamente semplificate)
Lettura di un singolo settore (questa funziona corrrettamente)
hDevice := CreateFile(PChar('\\.\G:'),
GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
0,
0);
If hDevice <> INVALID_HANDLE_VALUE Then
If SetFilePointerEx(hDevice, 10*512, nil, FILE_BEGIN) Then
begin
ReadFile(hDevice, Data[1], 512, BytesRead, nil);
end;
Scrittura di un singolo settore (qui' avviene l'errore)
hDevice := CreateFile(PChar('\\.\G:'),
GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
If hDevice <> INVALID_HANDLE_VALUE Then
If SetFilePointerEx(hDevice, 10*512, nil, FILE_BEGIN) Then
begin
WriteFile(hDevice, Data[1], 512, BytesWrite, nil);
end;
Praticamente WriteFile ritorna sempre con errore 5 (accesso negato). Tenete presente che il programma lavora con i permessi di amministratore,ho provato ad utilizzare la funzione DeviceIoControl con parametyro FSCTL_LOCK_VOLUME in maniera da bloccare il disco, ho provato ad eseguire la funzione DeleteVolumeMountPoint per smontare l'USB e lavorare con il nome fisico dell'unità ma nulla.
Quindi, per concludere
Il programma è un 32bit
CreateFile funziona perfettamente
SetFilePointerEx funziona perfettamente
ReadFile funziona perfettamente
WriteFile mi da sempre l'errore 5 (access denied) ma solo su Windows 10 e Windows 11
Qualche idea?
Grazie