パーティションをロックし、TFileStreamを使用していくつかのファイルを書き込み、ロックを解除したいとします。 ロックとロック解除の方法が見つかりましたが、書き込み方法はわかりません。 は、これまでのところ、私のコードは次のとおりです。私が以前にロックしたパーティションに書き込む方法(Delphiを使用)
Const
FSCTL_LOCK_VOLUME = $00090018;
FSCTL_UNLOCK_VOLUME = $0009001C;
var HLockedVol: THandle;
implementation
{$R *.dfm}
function LockDrive(Drive: AnsiChar): Boolean;
var
OldMode: UINT;
BytesReturned: Cardinal;
begin
Result := False;
OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
HLockedVol := CreateFile(PChar(Format('\\.\%s:', [AnsiLowerCase(string(Drive))])), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
OPEN_EXISTING, 0, 0);
if HLockedVol <> INVALID_HANDLE_VALUE then
begin
Result := DeviceIoControl(HLockedVol, FSCTL_LOCK_VOLUME, nil, 0, nil, 0, BytesReturned, nil);
end;
finally
SetErrorMode(OldMode);
end;
end;
function UnlockDrive: Boolean;
var
OldMode: UINT;
BytesReturned: Cardinal;
begin
Result := False;
OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if HLockedVol <> INVALID_HANDLE_VALUE then
begin
try
Result := DeviceIoControl(HLockedVol, FSCTL_UNLOCK_VOLUME, nil, 0, nil, 0, BytesReturned, nil);
finally
CloseHandle(HLockedVol);
end;
end;
finally
SetErrorMode(OldMode);
end;
end;
私はHLockedVolを使用することを想定していますが、私は方法がわからない...
あなたは私を助けてくださいことはできますか? ありがとうございます。
2つのファイルを書き込むためにボリュームをロックする目的は何ですか?ファイルレベルではなくセクタレベルでパーティション(またはボリューム)を低レベルで読み書きする場合は、ボリュームを開く必要があります。 –
あなたはそれをロックしているように見えません。ハンドルがまだ開いている間に他の人がハンドルを開くことを許可します。 –
Eugene Mayevski 'EldoS Corp:他のアプリケーションやWindowsが同時に書いていると、私のアプリケーションは失敗します。 To David Heffernan:私はUSBスティック/キーでテストしています。ファイルマネージャーでアクセスすることも、書き込むこともできません。しかし、あなたが言うことが真実なら、私にそれをロックするより良い方法を教えてください。 –