Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Разница в вызове функций   Найти похожие ветки 

 
Riply ©   (2008-01-05 21:45) [0]

Здравствуйте !
Уже почти час тупо смотрю и не могу понять
почему NtOpenDirectoryObject выдает "The handle is invalid"
(причины возвращения этой ошибки в MSDN не описаны),
а NtOpenFile работает без проблем.
В чем разница ?
function Nt_OpenDirectoryTest(const puDirName: PUNICODE_STRING): NTSTATUS;
var
ObjectAttr: OBJECT_ATTRIBUTES;
IoBlock: IO_STATUS_BLOCK;
hDirectory: THandle;
begin
InitializeObjectAttributes(@ObjectAttr, puDirName, OBJ_CASE_INSENSITIVE, 0, nil);
Result := NtOpenDirectoryObject(@hDirectory, DIRECTORY_QUERY, @ObjectAttr);
if Result = STATUS_SUCCESS
 then NtClose(hDirectory)
 else ShowMessage("NtOpenDirectoryObject :  " + SysErrorMessage(RtlNtStatusToDosError(Result)));

Result := NtOpenFile(@hDirectory, SYNCHRONIZE or FILE_LIST_DIRECTORY, @ObjectAttr,
                     @IoBlock, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
                     FILE_SYNCHRONOUS_IO_NONALERT or FILE_DIRECTORY_FILE);
if Result = STATUS_SUCCESS
 then NtClose(hDirectory)
 else ShowMessage("NtOpenFile :  " + SysErrorMessage(RtlNtStatusToDosError(Result)));
end;


Может кто свежим взглядом распознает в чем дело ?


 
guav ©   (2008-01-06 00:04) [1]

> NtOpenDirectoryObject выдает "The handle is invalid"

> if Result = STATUS_SUCCESS

Вообще-то с NTSTATUSом так не обращаются.
Проверка на успех - это не сравнение с STATUS_SUCCESS, а проверка старшего бита (макро NT_SUCCESS).
Приводить лучше сами значения NT_STATUS, а не интерпретацию соответствующего LastError.

По существу - не знаю, не работал с NtOpenDirectoryObject. Могу попробовать глянуть, если выложишь полный код (с объявленями NtOpenDirectoryObject и структур и значением параметра puDirName).


 
Riply ©   (2008-01-06 00:26) [2]

> [1] guav ©   (06.01.08 00:04)

Привет :)

> Вообще-то с NTSTATUSом так не обращаются
Я знаю :)

> Приводить лучше сами значения NT_STATUS, а не интерпретацию соответствующего LastError.

// MessageId: STATUS_OBJECT_TYPE_MISMATCH  $C0000024
// MessageText:
//  {Wrong Type}
//  There is a mismatch between the type of object required by the requested
//  operation and the type of object that is specified in the request.

> Проверка на успех - это не сравнение с STATUS_SUCCESS, а проверка старшего бита (макро NT_SUCCESS).
Эта ошибка не NT_SUCCESS - ая.

> Могу попробовать глянуть, если выложишь полный код (с объявленями
> NtOpenDirectoryObject и структур и значением параметра puDirName).

PUNICODE_STRING = ^UNICODE_STRING;
UNICODE_STRING = packed record
   Length : WORD;
   MaximumLength : WORD;
   Buffer : PWideChar;
 end;

PIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;
 IO_STATUS_BLOCK = packed record
  Status : NTSTATUS;
  Information : ULONG;
 end;

 POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;
 OBJECT_ATTRIBUTES = packed record
   Length : ULONG;
   RootDirectory : THandle;
   ObjectName : PUNICODE_STRING;
   Attributes : ULONG;
   SecurityDescriptor : PVOID;        // Points to type SECURITY_DESCRIPTOR
   SecurityQualityOfService : PVOID;  // Points to type SECURITY_QUALITY_OF_SERVICE
 end;

function NtOpenDirectoryObject(DirectoryHandle: PHandle;
                               DesiredAccess: ACCESS_MASK;
                               ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall;

wSource := "\??\E:\TestDir";
RtlInitUnicodeString(@uSource, PWideChar(wSource));


> Offtop
У меня опять проблеммы с почтой ?
Ты получал письмо ?


 
guav ©   (2008-01-06 01:07) [3]

Я предполагаю, дело в том что твой путь - не есть путь к Directory Object из корня пространства имён Windows, "\??" таким кодом открывается.

> > Offtop
> У меня опять проблеммы с почтой ?
> Ты получал письмо ?

Не знаю у кого проблемы я получил 3 января 2008 г. 18:38 и ответил 3 января 2008 г. 21:48, никаких писем после этого.


 
Riply ©   (2008-01-06 01:08) [4]

> [3] guav ©   (06.01.08 01:07)
> ответил 3 января 2008 г. 21:48, никаких писем после этого.

Не получила. Можешь еще раз отправить ?


 
guav ©   (2008-01-06 01:51) [5]

> Не получила. Можешь еще раз отправить ?

Сделано.


 
Riply ©   (2008-01-06 11:13) [6]

> [5] guav ©   (06.01.08 01:51)
> Сделано.

Не знаю в чем дело, но ничего нет :(
Если можно, попробуй отправить на ripply(песик)bk.ru


 
guav ©   (2008-01-06 17:10) [7]

Ну, а сейчас ?
И давай продолжим поиск проблем по ICQ (номер 0x00CD626FC)



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
15-1198529781
Evanescence
2007-12-24 23:56
2008.02.03
Ищу название и исполнитель песни


15-1198590545
Zawibis
2007-12-25 16:49
2008.02.03
Нужно построить график


3-1190804341
Vazhik
2007-09-26 14:59
2008.02.03
Псевдоним БД


2-1199842744
Артем
2008-01-09 04:39
2008.02.03
КАК сохранить JPEG в реестре


11-1183049737
Nikfel
2007-06-28 20:55
2008.02.03
Как создать свой компонент.