我有一个简单的类,是从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:)。
这里有什么问题,我怎样才能获得有效的文件句柄?