Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 12.07.11 15:51
Оценка:
Покажите пожалуйста пример или посоветуйте.
Как создать DRIVER_OBJECT для DriverEntry драйвера ?

Пример кода из React Os:


    WCHAR NameBuffer[100];
    USHORT NameLength;
    UNICODE_STRING LocalDriverName;
    NTSTATUS Status;
    OBJECT_ATTRIBUTES ObjectAttributes;
    ULONG ObjectSize;
    PDRIVER_OBJECT DriverObject;

    /* Create a random name and set up the string*/
    NameBuffer = L"\\Driver\\1234567";
    LocalDriverName.Length = NameLength * sizeof(WCHAR);
    LocalDriverName.MaximumLength = LocalDriverName.Length + sizeof(UNICODE_NULL);
    LocalDriverName.Buffer = NameBuffer;

    /* Initialize the Attributes */
    ObjectSize = sizeof(DRIVER_OBJECT) + sizeof(EXTENDED_DRIVER_EXTENSION);
    InitializeObjectAttributes(&ObjectAttributes,
                               &LocalDriverName,
                               OBJ_PERMANENT | OBJ_CASE_INSENSITIVE,
                               NULL,
                               NULL);

    /* Create the Object */
    Status = ObCreateObject(KernelMode,
                            IoDriverObjectType,
                            &ObjectAttributes,
                            KernelMode,
                            NULL,
                            ObjectSize,
                            0,
                            0,
                            (PVOID*)&DriverObject);
    if (!NT_SUCCESS(Status)) return Status;


Ошибка возникает при вызове ObCreateObject. 0xC0000005.
Re: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: x64 Россия  
Дата: 12.07.11 16:18
Оценка:
AR>Как создать DRIVER_OBJECT для DriverEntry драйвера ?

Зачем?
Re[2]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 12.07.11 16:26
Оценка:
Здравствуйте, x64, Вы писали:

AR>>Как создать DRIVER_OBJECT для DriverEntry драйвера ?


x64>Зачем?


Я разрабатываю драйвер фильтр файловой системы.
Загружаю драйвер для которого DRIVER_OBJECT = NULL.
Не работает обработка IRQ сообщений.
Пожалуйста, подскажите что делать.
Re[3]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: x64 Россия  
Дата: 12.07.11 17:50
Оценка:
AR>Я разрабатываю драйвер фильтр файловой системы.
AR>Загружаю драйвер для которого DRIVER_OBJECT = NULL.
AR>Не работает обработка IRQ сообщений.

Что это за ересь? Во-первых, зачем в фильтре файловой системы загружать другие драйвера? Во-вторых, даже если это и необходимо, почему нельзя реализовать это через документированные средства ядра? И может быть всё таки IRP-пакеты имелись в виду, а не IRQ, которое есть суть совсем другое?

AR>Пожалуйста, подскажите что делать.


Меньше травы курить?
Re[4]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 13.07.11 06:11
Оценка:
Здравствуйте, x64,

Я пытаюсь создать Device для своего Driver. Для этого создаю DRIVER_OBJECT.
Следующей код рабочий, но неработает сам драйвер, похоже что не обрабатывая IRP:

DRIVER_OBJECT driverObject;
PDRIVER_OBJECT pdoDriver = g_pdoDriver;

for (i = 0; i< IRP_MJ_MAXIMUM_FUNCTION; i++)
{ 
   pdoDriver->MajorFunction[i] = Unimplemented;
}
pdoDriver->MajorFunction[IRP_MJ_CREATE] = Create;
pdoDriver->MajorFunction[IRP_MJ_WRITE] = Write;
pdoDriver->MajorFunction[IRP_MJ_READ] = Read;
pdoDriver->DriverUnload = Unload;

RtlInitUnicodeString(&DeviceName, L"\\23456789");
status = IoCreateDevice(pdoDriver, sizeof(DEVICE), &DeviceName, FILE_DEVICE_DISK_FILE_SYSTEM, 0, FALSE, &pdoDevice);
Re[5]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: x64 Россия  
Дата: 13.07.11 07:42
Оценка: 5 (1)
AR>Я пытаюсь создать Device для своего Driver.

Это похвально.
Какого типа девайс ты пытаешься создать?
Фильтрующий девайс (FiDO), управляющий девайс (CDO) или что?

AR>Для этого создаю DRIVER_OBJECT.


Ещё раз спрашиваю: зачем?
Объект-драйвер у тебя уже есть в DriverEntry().
При загрузке любого драйвера система создаёт его автоматически.

AR>Следующей код рабочий, но неработает сам драйвер, похоже что не обрабатывая IRP:


Следующий код это кусок просто невообразимого говна.
Я так понимаю, никакую литературу ты по файловым фильтрам не читал?
Какой ужос вообще, ну начини хотя бы отсюда и исходники из WDK полистай.

AR>DRIVER_OBJECT driverObject;

AR>PDRIVER_OBJECT pdoDriver = g_pdoDriver;

Оспади, что это?!
К тому же, pdo это префикс физических девайсов.
В файловых системах не используется, равно как и в фильтрах.

AR>...i < IRP_MJ_MAXIMUM_FUNCTION...


Здесь нужно ставить <=.
Иначе пропустишь обработчик для IRP_MJ_PNP.

AR>RtlInitUnicodeString(&DeviceName, L"\\23456789");


Управляющие девайсы следует создавать в папке \Device.
Фильтрующие (приаттаченные в стек) девайсы имён не имеют.

AR>...FILE_DEVICE_DISK_FILE_SYSTEM...


Ты не имеешь права явно использовать этот тип.
Это возможно только если ты пишешь драйвер файловой системы.
Для управляющих девайсов следует использовать FILE_DEVICE_UNKNOWN.
Re[6]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 13.07.11 12:09
Оценка:
Здравствуйте, x64, Вы писали:

AR>>Я пытаюсь создать Device для своего Driver.


x64>Это похвально.

x64>Какого типа девайс ты пытаешься создать?
x64>Фильтрующий девайс (FiDO), управляющий девайс (CDO) или что?

x64>Ты не имеешь права явно использовать этот тип.

x64>Это возможно только если ты пишешь драйвер файловой системы.
x64>Для управляющих девайсов следует использовать FILE_DEVICE_UNKNOWN.

Статью прочитал, спасибо. Попробую сформулировать.
Это пример кода из драйвера файловой системы, с его device и пытаюсь
создать. Проблема в том что объект DRIVER_OBJECT из DriverEntry равен
NULL или недоступен. Я пытаюсь создать device для какого-то объекта который
не равен NULL, для этого создал переменную:
DRIVER_OBJECT driverObject;

Предпологаю что существует проблема с IRP в том что, для созданный
таким образом device, возможно, перестает обрабатывать IRP. Драйвер
файловой системы неработает. Подскажите как быть. Как создать свой
DRIVER_OBJECT ? Как это связано с обработкой IRP? Как это связано с
драйвером файловой системы?

Спасибо.
Re[7]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: x64 Россия  
Дата: 13.07.11 12:45
Оценка:
AR>Проблема в том что объект DRIVER_OBJECT из DriverEntry равен NULL или недоступен.

Да откуда ж вас наркоманов столько берётся.
Т.е. по-твоему в DriverEntry() приходит NULL, я правильно понял?
Re[8]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 13.07.11 13:34
Оценка:
Здравствуйте, x64, Вы писали:

AR>>Проблема в том что объект DRIVER_OBJECT из DriverEntry равен NULL или недоступен.


x64>Да откуда ж вас наркоманов столько берётся.

x64>Т.е. по-твоему в DriverEntry() приходит NULL, я правильно понял?

Да, драйвер загружается из другого драйвера, без использования ZwLoadDriver.
Re[9]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: x64 Россия  
Дата: 13.07.11 17:09
Оценка:
AR>Да, драйвер загружается из другого драйвера...

Ну так а у того, первого драйвера, есть объект-драйвер, или тоже нет?
Если есть, то его можно использовать для создания девайсов в других драйверах.

AR>...без использования ZwLoadDriver.


Почему нет-то?
Буткит что ли очередной пишешь?
Re[10]: Как создать DRIVER_OBJECT для DriverEntry драйвера ?
От: AhRong  
Дата: 14.07.11 04:57
Оценка:
Есть объект-драйвер, попробую использовать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.