Delphi THandleStream中的CreateFile Windows错误

| 我有一个从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:)。 这是怎么了,我该如何设法获得有效的文件句柄?     
已邀请:
        
CreateFile
不返回错误代码-它返回有效的句柄或INVALID_HANDLE_VALUE(-1)。这是带有错误检查的
CreateFile
函数调用的标准用法:
var
  H: THandle;

begin
  H:= CreateFile(PChar(\'\\\\.\\D:\'), GENERIC_READ,
    FILE_SHARE_WRITE or FILE_SHARE_READ, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if H = INVALID_HANDLE_VALUE then
    raise Exception.Create(Format(\'Oops - error opening disk: %d\', [GetLastError]));
...
    
        对我来说,那些看起来像是有效的句柄值。是什么让您认为它们不是? CreateFile不返回错误代码。如果失败,则返回Invalid_Handle_Value。通过调用GetLastError给出错误代码。有关这些功能如何工作的详细信息,请参阅MSDN上的文档。 如果CreateFile失败,建议通过引发异常依次使构造函数失败:
if Hdl = Invalid_Handle_Value then
  RaiseLastOSError;
    

要回复问题请先登录注册