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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ObOpenObjectByPointer  (Прочитано 9490 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
sasha_s7
Гость
« : 16-02-2006 15:45 » new

Как правильно вызвать ObOpenObjectByPointer для получения хэндла по созданному в драйвере объекту тпа KEVENT? Сей хэндл надо дать процессу для использования в юзермоде. Я уже много чего перепробывал и либо BSOD, либо неудача.
Записан
Ochkarik
Модератор

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

« Ответ #1 : 26-02-2006 13:35 » 

               status =
              ObReferenceObjectByHandle(  (HANDLE)hEvent,
                           EVENT_MODIFY_STATE,
                           *ExEventObjectType,
                           KernelMode,
                           (PVOID*)&lpCurrChannelRes->pkEvent,
                           NULL);
правда это наоборот... по евенту созданному в приложении создается хандел ядра.
посмотри внимательно, может размещение памяти не так, или указатель не тот отдаешь?
и второе... это наверное надо в контексте процесса делать. того которому отдашь потом.
« Последнее редактирование: 26-02-2006 13:42 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 27-02-2006 14:14 » 

Ничего у тебя не выйдет, так как ты сделал вот так
KEVENT Event;
ObOpenObjectByPointer( &Event, bla-bla-bal ...  );

То это прямой путь к BSOD, так как у твоего Event нет OBJECT_HEADER, правда система про это не знает ну и при вызове ObOpenObjectByPointer идет затирание чужой памяти.

Записан
Ochkarik
Модератор

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

« Ответ #3 : 28-02-2006 11:37 » 

млин.... народ... а об чем вообще речь то идет?Не понял
какой нафиг ObReferenceObjectByPointer?!

"ObReferenceObjectByPointer increments the pointer reference count for a given object."
и ТОЛЬКО!
и никакой хендл там не отдается.... 
я тоже хорош... ДОКУ НАДО ЧИТАТЬ!


"IoCreateSynchronizationEvent - creates or opens a named synchronization event for use in serialization of access to hardware between two otherwise unrelated drivers."
PKEVENT
  IoCreateSynchronizationEvent(
    IN PUNICODE_STRING  EventName,
    OUT PHANDLE  EventHandle
    );
или:
"IoCreateNotificationEvent creates or opens a named notification event used to notify one or more threads of execution that an event has occurred."

PKEVENT
  IoCreateNotificationEvent(
    IN PUNICODE_STRING  EventName,
    OUT PHANDLE  EventHandle
    );

......................
только ВНИМАТЕЛЬНО прочитайте доку... че то меня там не зарадовало... хендл например... мейби - все равно по имени придется делать.
PS кстати говоря... а смысл, событие в драйвере создавать? для аналогичных целей открывал его в апликухе и через IOControl отдал хендл драйверу... а там уже PKEvent великолепно получается, ниже писал... удалить его апликуха, пока драйвер число ссылок не уменьшит, не сможет... волноваться нечего. кроме того его именовать в этом случае не обязательно... сколько приложений запустил столько событий и тебе придет... а так - придется еще самому их именовать уникально...
« Последнее редактирование: 28-02-2006 11:54 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 28-02-2006 11:48 » 

Утверждение про "и никакой хендл там не отдается.... 
я тоже хорош... ДОКУ НАДО ЧИТАТЬ!" не раскрыто.

ObOpenObjectByPointer
ObOpenObjectByPointer opens an object referenced by a pointer and returns a handle to the object.

NTSTATUS
  ObOpenObjectByPointer(
    IN PVOID  Object,
    IN ULONG  HandleAttributes,
    IN PACCESS_STATE  PassedAccessState OPTIONAL,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_TYPE  ObjectType,
    IN KPROCESSOR_MODE  AccessMode,
    OUT PHANDLE  Handle
    );

кстати и твой ObReferenceObjectByPointer нельзя вызывать для KEVENT без хидера.


Записан
Ochkarik
Модератор

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

« Ответ #5 : 28-02-2006 12:02 » 

эээ.... пардон, у мя DDK старенький стоит)))
там ObOpenObjectByPointer  ваще не описан... а я на ObReferenceObjectByPointer смотрел...
виновен, вру волосы Здесь была моя ладья...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

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

« Ответ #6 : 01-03-2006 11:55 » 

млин.. а где вы все описание выдрали   ObOpenObjectByPointer???
поставил DDK February 22, 2005там тоже нет... опять недокументированные? но откуда?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #7 : 01-03-2006 14:19 » 

Он в IFSDK.
У меня WDK 5112 , это типа объеденение DDK и IFSDK для Longhorn. DDK больше не будет.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines