Главная страница
    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.47 MB
Время: 0.043 c
15-1198561231
mrFreeman2007
2007-12-25 08:40
2008.02.03
Как устанавливать компоненты?


2-1199350168
Xmen
2008-01-03 11:49
2008.02.03
Error while posting updates


15-1198487954
Kolan
2007-12-24 12:19
2008.02.03
А DBX есть в BDS 2006?


15-1198421299
общества
2007-12-23 17:48
2008.02.03
ООО, ОАО, ЗАО


2-1199887795
Поручик
2008-01-09 17:09
2008.02.03
Получить писок файлов в папке.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский