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

Discussion in 'WASM.NT.KERNEL' started by elimli, Jul 11, 2007.

  1. elimli

    elimli New Member

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

    gilg New Member

    Blog Posts:
    0
    Joined:
    May 19, 2005
    Messages:
    527
    Не совсем не зависимым. Например, обработчик IRP_MJ_CREATE (остальные аналогично):
    Code (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

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Мало что можно добавить к сказанному gilg.
    Вообще девайсы создаешь как обычно, только в двойном экземпляре - и девайсы и ссылки.

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

    Code (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