Вопрос касается NT Native API.
При перечислении типов объектов (они же объекты типов) в NT-образных системах через перечисление элементов каталога \ObjectTypes они возвращаются не в том порядке, в каком занумерованы в системе, а в порядке из создания (вроде как так, хотя я в этом и не уверен).
Так вот и сам вопрос, как определить правильный порядок нумерации объектов типов не залезая в ядро?
Здравствуйте Аноним, Вы писали:
А>Вопрос касается NT Native API. А>При перечислении типов объектов (они же объекты типов) в NT-образных системах через перечисление элементов каталога \ObjectTypes они возвращаются не в том порядке, в каком занумерованы в системе, а в порядке из создания (вроде как так, хотя я в этом и не уверен).
А>Так вот и сам вопрос, как определить правильный порядок нумерации объектов типов не залезая в ядро?
А какой порядок называется правильным?
-- Alex Fedotov
Re[2]: Перечисление объектов типов в NT/2000/...
От:
Аноним
Дата:
05.05.02 22:30
Оценка:
AF>А какой порядок называется правильным?
Вот такой (это для XP и .NET Server, для 2000-й тут нету DebugObject и KeyedEvent, для NT4 еще нет Job,WaitablePort и WmiGuid)
Нумерация с 1.
Type
Directory
SymbolicLink
Token
Process
Thread
Job
DebugObject
Event
EventPair
Mutant
Callback
Semaphore
Timer
Profile
KeyedEvent
WindowStation
Desktop
Section
Key
Port
WaitablePort
Adapter
Controller
Device
Driver
IoCompletion
File
WmiGuid
Здравствуйте Аноним, Вы писали:
AF>>А какой порядок называется правильным?
А>Вот такой (это для XP и .NET Server, для 2000-й тут нету DebugObject и KeyedEvent, для NT4 еще нет Job,WaitablePort и WmiGuid) А>Нумерация с 1.
А>Type А>[...] А>WmiGuid
ZwQueryObject с флагом ObjectAllTypesInformation?
Хотя, с другой стороны, я все равно не понимаю, чем важен порядок перечисления.
-- Alex Fedotov
Re[4]: Перечисление объектов типов в NT/2000/...
От:
Аноним
Дата:
06.05.02 17:32
Оценка:
Здравствуйте Alex Fedotov, Вы писали:
AF>ZwQueryObject с флагом ObjectAllTypesInformation?
Для этой функции уже надо иметь сам объект, чтоб скормить ей эго хэндл.
А если объекта нет — то и не узнать ничего.
AF>Хотя, с другой стороны, я все равно не понимаю, чем важен порядок перечисления.
*QuerySystemInformation возвращает номера типов, а не их имена.
Предположим, надо расположить типы в порядке возрастания их номера, то есть в том порядке, который получается при самой сборке винды.
Перечисляем объекты — имеем только номера типов.
Запрашиваем тип (строковый) для конкретного объекта — получаем его, это без проблем, но как минимум 5 типов не возвращаются, то есть *QuerySystemInformation такие объекты не перечисляет (возможно у меня их и нет, а может они вообще ядром не экспортируются). Но как тогда расположить те типы, экземпляры объектов которых отсутствуют в системе? Как определить их номера?
И кстати, почему иногда ZwQuerySystemInformation возвращает в буфере один тип (по номеру), а если запросить тип через ZwQueryObject для этого объекта — он будет другой?
Здравствуйте Аноним, Вы писали:
AF>>ZwQueryObject с флагом ObjectAllTypesInformation?
А>Для этой функции уже надо иметь сам объект, чтоб скормить ей эго хэндл. А>А если объекта нет — то и не узнать ничего.
Для ObjectAllTypesInformation можно передать NULL в качестве хэндла.
-- Alex Fedotov
Re[6]: Перечисление объектов типов в NT/2000/...
От:
Аноним
Дата:
06.05.02 19:37
Оценка:
Здравствуйте Alex Fedotov, Вы писали:
AF>Для ObjectAllTypesInformation можно передать NULL в качестве хэндла.
А... Понял...
Только у меня в OBJECT_ALL_TYPES_INFORMATION переменная NumberOfTypes на 2000й винде равна 0x17, а должно быть 0x1B (то есть 27)
В кои-то веки нашелся человек, который хотя бы понимает о чем речь в моей проблеме.
И пропал.
ZwQueryObject от NULL с флагом ObjectAllTypesInformation неправильно отрабатывает, хоть и возвращает STATUS_SUCCESS.
Код приводить не буду, там все тривиально.
При парсении буфера оказывается, что NumberOfTypes меньше чем должно быть.
Даже если покласть на это значение и разобрать буфер, считая что 27 типов, то действительно последние несколько типов не возвращаются.
Это все на 2000AS(EN)+SP2+все фиксы.
NtGlobalFlag = 0
Здравствуйте vasketsov, Вы писали:
V>В кои-то веки нашелся человек, который хотя бы понимает о чем речь в моей проблеме. V>И пропал.
V>Помоги плиз, если знаешь что за ерунда такая.