【发布时间】:2011-09-04 07:07:00
【问题描述】:
我有一个派生自 THandleStream 的简单类,我用它来编辑原始卷。我调用 Windows createfile() 函数来打开驱动器,但该函数从不返回有效句柄,而是一个奇异的错误代码(调试时 348 和运行时 304,但没有引发错误,这只是句柄值看起来很奇怪)。这就是我正在做的:
Constructor TDiskStream.Create(Const aDrive: String);
Var
Hdl: Cardinal;
A,B: Int64;
Begin
Hdl := CreateFile( PChar(ADrive),
GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE,
0, OPEN_EXISTING, 0, 0);
Inherited Create( Hdl );
GetDiskFreeSpaceEx( PChar( RightStr(ADrive,2) + '\'), A, FSize, @B );
End;
句柄值与 msdn 上描述为 ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING 的错误代码匹配,但似乎非常罕见。 aDrive 参数设置正确(格式为 \\.\x: )。
这里出了什么问题,我怎样才能获得我的有效文件句柄?
【问题讨论】: