У меня есть простой класс, производный от 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;
Значение дескриптора соответствует коду ошибки, описанному как ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING в msdn, но это кажется очень необычным. Параметр aDrive задан правильно (в формате \\.\x:).
Что здесь не так, как мне получить действительный дескриптор файла?