Всем привет. Помогите, если кто знает. Мне надо получить PDRIVER_OBJECT для каждого работающего в системе драйвера.
Заранее благодарен.
V>Всем привет.
Даова.
V>Помогите, если кто знает.
А кто не знает — тем что теперь делать?
V>Мне надо получить PDRIVER_OBJECT для каждого работающего в системе драйвера.
Драйвера находятся в папке
\Driver.
Папка — имеется в виду объект —
directory — Менеджера объектов ядра.
Объекты, находящиеся в папке
\Driver, являются драйверами, т.е. имеют тип
IoDriverObjectType —
DRIVER_OBJECT.
Для работы с папками ядра предназначены следующие экспорты ядра:
ZwOpenDirectoryObject()
ZwQueryDirectoryObject()
ZwClose()
Вызов
ZwQueryDirectoryObject() на данный момент почему-то недокументирован, вот его описание:
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryDirectoryObject (
IN HANDLE DirectoryObjectHandle,
OUT PDIRECTORY_OBJECT_INFORMATION DirectoryObjectInformation,
IN ULONG BufferLength,
IN BOOLEAN GetNextIndex,
IN BOOLEAN IgnoreInputIndex,
IN OUT PULONG ObjectIndex,
OUT PULONG DataWritten OPTIONAL);
typedef struct _DIRECTORY_OBJECT_INFORMATION
{
UNICODE_STRING ObjectName;
UNICODE_STRING ObjectTypeName;
BYTE Data [1];
}
DIRECTORY_OBJECT_INFORMATION, *PDIRECTORY_OBJECT_INFORMATION;
Более подробно
здесь — просто замените префикс
Nt- на
Zw-.
Ещё более подробно — в исходниках ядра
Windows Server 2003.
V>Заранее благодарен.
$100
Здравствуйте, Unmanaged, Вы писали:
[skip]
U>Драйвера находятся в папке \Driver.
U>Папка — имеется в виду объект — directory — Менеджера объектов ядра.
U>Объекты, находящиеся в папке \Driver, являются драйверами, т.е. имеют тип IoDriverObjectType — DRIVER_OBJECT.
U>Для работы с папками ядра предназначены следующие экспорты ядра:
Драйвер может где угодно находится в дереве обьектов ядра.
[skip]
V>>Заранее благодарен.
U>$100
Так что вам неустойку предется заплатить в размере $1000
... << RSDN@Home 1.2.0 alpha rev. 685>>
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
U>>Драйвера находятся в папке \Driver.
U>>Папка — имеется в виду объект — directory — Менеджера объектов ядра.
U>>Объекты, находящиеся в папке \Driver, являются драйверами, т.е. имеют тип IoDriverObjectType — DRIVER_OBJECT.
З>Драйвер может где угодно находится в дереве обьектов ядра.
Теперь всем понятно, чем коллективный разум лучше
.
Абсолютно верно.
Основные папки, в которых расположены объекты-драйвера, это
\Driver и
\FileSystem.
Но могут быть и другие, хотя это — скорее исключительный случай.
Если нужно перечислить именно все драйвера, то придётся рекурсивно обходить дерево объектов.
P.S.
$200