драйвер с несколькими девайсами

Тема в разделе "WASM.NT.KERNEL", создана пользователем elimli, 11 июл 2007.

  1. elimli

    elimli New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2007
    Сообщения:
    20
    Пожалуйста помогите решить следующую проблему:
    Имеется готовый драйвер который открывает некий девайс и работает через него. В драйвере есть собственная имплементация IRP_MJ_READ/IRP_MJ_WRITE. Для связи с пользовательским режимом хотелось бы открыть еще один девайс со своими собственными правами доступа и "подцепленный" к своим собственным create/close/read/write callbacks которые независимы от первого девайса. Реально ли это сделать?
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Не совсем не зависимым. Например, обработчик IRP_MJ_CREATE (остальные аналогично):
    Код (Text):
    1. NTSTATUS
    2. DispatchCreate(PDEVICE_OBJECT devobj, PIRP irp)
    3. {
    4.   if (devobj == DeviceObject1) {
    5.       .....
    6.   } else if (devobj == DeviceObject2) {
    7.      .....
    8.   }
    9.   .....
    10. }
    Т.е. для всех девайсов будут одни и те же каллбэки, но внутри можно легко различить, к какому девайсу был направлен запрос.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Мало что можно добавить к сказанному gilg.
    Вообще девайсы создаешь как обычно, только в двойном экземпляре - и девайсы и ссылки.

    Вообще можно хоть 10 девайсов понаделать. Обработчик будет выглядеть примерно так:

    Код (Text):
    1. NTSTATUS DispatchSomething( DEVICE_OBJECT* DeviceObject, IRP* Irp )
    2. {
    3.   switch( DeviceObject )
    4.   {
    5.   case Device1:
    6.     .....
    7.   case Device2:
    8.     .....
    9.   }
    10. }
    И не забудь всё подчистить в Unload