Главная страница
    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.044 c
2-1199569366
петрович07
2008-01-06 00:42
2008.02.03
Двумерный массив,задача


11-1182271513
Vladimir Kladov
2007-06-19 20:45
2008.02.03
Секреты Delphi IDE - пополнения


2-1199609083
datorn
2008-01-06 11:44
2008.02.03
Tray


15-1198567473
Vlad Oshin
2007-12-25 10:24
2008.02.03
Электричество. Объясните.


2-1199601680
molodoy
2008-01-06 09:41
2008.02.03
конект к IB или FB через прокси





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский