如何写我之前锁定的分区(使用Delphi)

时间:2011-01-11 19:00:10

标签: delphi locking

我想锁定一个分区,使用TFileStream写几个文件,然后解锁它。 我找到了如何锁定和解锁,但我不知道如何写。 到目前为止,我的代码是:

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,但我不知道如何......

你能帮帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

你已经打开了一些东西并收到了文件句柄。要写入,请使用WriteFile。如果您对流更熟悉,可以将句柄包裹在THandleStream内。

请注意,执行此操作时,您不会编写文件。您正在直接写入磁盘,以下抽象级别,其中存在“文件”这样的概念。并且在此期间您无法对任何普通文件执行I / O操作(因为您锁定了卷)。

虽然这是您提出的问题的答案,但它可能不是您问题的解决方案。我邀请您发布一个描述您问题的新问题;不要担心你现在正在寻求的解决方案。