Текущий архив: 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