Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перечисление объектов типов

Ответить
Настройки темы
Перечисление объектов типов

Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Короче, такая задача.
В системе есть некое количество объектов типов.
Если говорить проще, то это объекты типов.
Например, в 2000-й их 27 штук.
Перечислять я их тут не буду, смысла нет.
Каждому типу объектов соответствует
1) номер (число)
2) название (строка)
(это то, что видно не из ядра)

Фишка в том, что нумерация типов объектов в разных системах разная. То есть, при переходе с 2000-й на ХР добавили не просто 2 объекта, а втолкнули их в середину.
Однако необходимо уметь определять тип объекта по его номеру типа.

Перечислить все типы труда не представляет, они хранятся в директории \ObjectTypes (к файловой системе это отношения, разумеется, никакого не имеет). Но беда в том, что перечисляются они в непонятном порядке. То есть, точно не по возрастанию номера типа (может, по очереди создания?). У меня, например, первым всегда идет Directory, хотя с 1-м типом - это Type.
Вот и задача, как научиться определять порядок типов.

Делаю так.
1) NtOpenDirectoryObject для L"\\ObjectTypes" отрабатывает правильно.

2) NtQueryDirectoryObject( hDir, buf, dwSize, FALSE, TRUE, &dwContext, &dwRetSize)
возвращает в буфер данные в виде массива структур

typedef struct
_DIRECTORY_BASIC_INFORMATION {
UNICODE_STRING ObjectName;
UNICODE_STRING ObjectTypeName;
} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;

то есть отсюда точно не выудить никаких номеров.
ObjectTypeName здесь всегда Type.

вот и все.

Если тупо вызывать NtQuerySystemInformation для хэндлов (16 по-моему) - там возвращается тип объекта, но беда в том, что ядром экспортируются не все объекты, и инфы об этих объектах вообще не будет в буфере после вызова NtQuerySystemInformation. А хотелось бы не ограничивать возможности только тем набором типов, что перечислился при первом вызове.

Короче, как-то можно это сделать без
1) драйвера режима ядра.
2) условной компиляции (разные экзешники для разных систем)
3) забивания в код имен типов, с полседующей проверкой версии системы.

То есть, без драйвера, и чтоб при выходе новой версии НТ это тоже работало с вер-тью 99 процентов.

Если что-то непонятно - разжую .

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 16:59, 22-04-2002

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


vasketsov
На сколько я помню, функции с префиксом Nt не предназначены для использования кем-либо окромя системы. Т.е. они не описаны в стандартных хидерах, и импортировать их приходится ручками по номеру. Или я не прав? И в MSDN о них не слова.

И попутно, а зачем это нужно?

-------
http://ivank.ru


Отправлено: 10:37, 23-04-2002 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


ivank
существуют
ntdll.h
ntdll.lib
в DDK.
Но там мало, приходится сторонние источники подымать, книжки умные, е-буки, и прочее.

Зачем надо.
Предположим, хочется тебе прибить объект системный. Любой из тех, что можно прибить не из ядра (а это почти все объекты, если права есть). А что за объект - неизвестно. Иногда и по имени его можно догадаться, если он именованый, а если нет - то беда. А перечисление объектов, как я уже писал, выдает только индекс типа, а не сам тип. А "объект типа 24" как-то страннее звучит, чем File или Key.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 10:47, 23-04-2002 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Думаю, здесь помогут с большей вероятностью: http://forum.ixbt.com/?id=26

-------
http://ivank.ru


Отправлено: 17:32, 24-04-2002 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перечисление объектов типов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Непонятка при присвоении значения переменной, имеющей тип: перечисление. Oleg_SK Программирование и базы данных 5 04-12-2008 07:22
различия типов процессоров alexandri Хочу все знать 14 24-01-2005 14:43
Регистрация типов файлов в linux Bozs Общий по Linux 10 06-12-2004 14:20
Проблемма преобразования типов в C++ sich Программирование и базы данных 3 09-08-2004 17:36
Несовпадение типов Crew Программирование и базы данных 1 26-03-2003 01:00




 
Переход