Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Совместное использование обьектов ядра


Автор: acersanyaua 3.12.2014, 01:05
У меня есть обьект ядра например WaitableTimer , я его создал 
    HANDLE htimerProcess = CreateWaitableTimer(NULL, FALSE, L"Time1");    
и я хочу например что бы другой процесс использовал мой обьект ядра 

HANDLE htimerProcess2 = CreateWaitableTimer(NULL, FALSE, L"Time1");

Т.е я дублирую имя , в качестве 3 параметра передаю имя первого обьекта. И тут я начинаю не понимать, это значит что я создал новый обьект с такой же самой таблицей описателей ? Или это просто копия (ссылка) на существующий обьект и как это можно доказать , ведь адреса у этих обьектов разные. Заранее спасибо.

Автор: Dem_max 3.12.2014, 08:03
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682492(v=vs.85).aspx

Цитата

The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.

The object can be created in a private namespace. For more information, see Object Namespaces.

Автор: xvr 3.12.2014, 13:05
Цитата(acersanyaua @  3.12.2014,  01:05 Найти цитируемый пост)
Или это просто копия (ссылка) на существующий обьект

Оно самое (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682492%28v=vs.85%29.aspx) -
Цитата

 If the named timer object exists before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS.


Цитата(acersanyaua @  3.12.2014,  01:05 Найти цитируемый пост)
как это можно доказать , ведь адреса у этих обьектов разные.

А откуда вы адреса взяли? HANDLE это не адрес, а просто число. Физически ваши объекты лежат в кернеле.

Что бы извлечь их имена, можно воспользоваться функций (частично недокументированной) http://undocumented.ntinternals.net/source/usermode/undocumented%20functions/nt%20objects/type%20independed/ntqueryobject.html

Вот еще для затравки - http://technet.microsoft.com/en-us/sysinternals/bb896657.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)