|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Перечисление объектов типов |
|
Перечисление объектов типов
|
Модер Сообщения: 1716 |
Короче, такая задача.
В системе есть некое количество объектов типов. Если говорить проще, то это объекты типов. Например, в 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 процентов. Если что-то непонятно - разжую ![]() |
|
------- Отправлено: 16:59, 22-04-2002 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
На сколько я помню, функции с префиксом Nt не предназначены для использования кем-либо окромя системы. Т.е. они не описаны в стандартных хидерах, и импортировать их приходится ручками по номеру. Или я не прав? И в MSDN о них не слова. И попутно, а зачем это нужно? |
------- Отправлено: 10:37, 23-04-2002 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать ivank
существуют ntdll.h ntdll.lib в DDK. Но там мало, приходится сторонние источники подымать, книжки умные, е-буки, и прочее. Зачем надо. Предположим, хочется тебе прибить объект системный. Любой из тех, что можно прибить не из ядра (а это почти все объекты, если права есть). А что за объект - неизвестно. Иногда и по имени его можно догадаться, если он именованый, а если нет - то беда. А перечисление объектов, как я уже писал, выдает только индекс типа, а не сам тип. А "объект типа 24" как-то страннее звучит, чем File или Key. |
------- Отправлено: 10:47, 23-04-2002 | #3 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Думаю, здесь помогут с большей вероятностью: http://forum.ixbt.com/?id=26
|
------- Отправлено: 17:32, 24-04-2002 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|