Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с ObOpenObjectByName  (Прочитано 13948 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexCasual
Помогающий

by
Offline Offline

« : 19-08-2011 20:32 » new

ObOpenObjectByName() возвращает код ошибки 0хс0000024 :

Код:
RtlInitUnicodeString(&obj_name, L"\\Device\\Tcp");

InitializeObjectAttributes(&objAttr, &obj_name, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);

status = ObOpenObjectByName(&objAttr, NULL, KernelMode, NULL, NULL, NULL, &hObject);
if (!NT_SUCCESS(status))
{
DbgPrint("[Driver entry]: ObOpenObjectByName error!\n %x",status);
}

Поможет кто-нибудь понять в чём дело?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-08-2011 13:14 » 

http://msdn.microsoft.com/en-us/library/ms681382%28v=vs.85%29.aspx
Ошибка 0x24 - "Too many files opened for sharing."
« Последнее редактирование: 20-08-2011 14:38 от Ochkarik » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 20-08-2011 14:17 » 

какая ОС? в семерке второй параметр ObOpenObjectByName не может быть NULL. да и вообще это хак... функция не документирована.
как прототип ObOpenObjectByName объявляли?

да, про использование ObOpenObjectByName  можно почитать блог товарища x64:  Типы объектов ядра

Добавлено через 4 минуты и 36 секунд:
PS можно воспользоваться другим способом через ZwCreateFile
http://www.codeproject.com/KB/system/driverdev5asp.aspx

Добавлено через 8 минут и 55 секунд:
PPS
0хс0000024 это STATUS_OBJECT_TYPE_MISMATCH.
- "{Wrong Type} There is a mismatch between the type of object that is required by the requested operation and the type of object that is specified in the request."
http://msdn.microsoft.com/en-us/library/cc704588(PROT.10).aspx

NTSTATUS и Error Codes  немного разные вещи.
Error Codes- возвращает GetLastError(). а NTSTATUS - обработчики IRP в структуре IO_STATUS_BLOCK с последующей выдачей наружу. подробнее о структуре NTSTATUS Defining New NTSTATUS Values
« Последнее редактирование: 20-08-2011 15:01 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 21-08-2011 22:29 » 

Поможет кто-нибудь понять в чём дело?

Какая система-то? Начиная с Windows 7 такое больше не прокатит, надо, как минимум, *IoFileObjectType во втором параметре. А вообще, файловые объекты на таких девайсах, как \Device\Tcp, принято создавать через ZwCreateFile() или хотя бы IoCreateFile(). Так все TDI-клиенты делают, зачем же нарушать традицию?
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #4 : 22-08-2011 15:32 » 

Система XP SP2,да пришлось сделать через ZwCreateFile()...С *IoFileObjectType такая же муть)
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #5 : 08-06-2012 06:01 » 

Ну, не знаю = актуальна ли тема. В общем с этой функцией все хорошо, но применять ее можно не всегда.
Например, в Legacy FS Filters при обработки precreate этого стопудов делать нельзя. В данном случае стоит
цель получить объект драйвера или device ? Если device, то *IoDeviceObjectType, драйвер = *IoDriverObjectType
Вызывать ТОЛЬКО на PASSIVE IRQL, лучше всего из отдельного потока.

Добавлено через 17 дней, 3 часа, 29 минут и 50 секунд:
Выкопал пару нюансов под 7-й. Вызов вышеозначенной функции для открытия ФАЙЛОВ не прокатит, поскольку там надо создавать
private-microsoft parsing structures, передавая их как контекст либо в параметре PACCESS_STATE, либо как ParsingContext .
ZwCreateFile (который редиректится в IoCreateFile) делает все это за автоматически. STATUS_OBJECT_TYPE_MISMATCH будет
возвращаться тогда, когда права доступа, указанные при вызове функции, не совпадают с правами того, что указано в качестве
параметра ObjectType. В PnpNotipfication, где как параметр "приходит" структура с PUNICODE_STRING в качестве SymbollicLink,
без этих долбаных структур мне открыть объект не удалось. В принципе, можно всю эту хлабуду раскопать, поскольку описание
этих структур можно найти в ИНЕТ, а методы работы с ними "зацепить" из ReactOS

Добавлено через 30 минут и 35 секунд:
Хотя объект типа \\Driver\Driver с IoDriverObjectType открываются без проблем
« Последнее редактирование: 25-06-2012 10:02 от oleshii » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines