Пожалуйста помогите решить следующую проблему: Имеется готовый драйвер который открывает некий девайс и работает через него. В драйвере есть собственная имплементация IRP_MJ_READ/IRP_MJ_WRITE. Для связи с пользовательским режимом хотелось бы открыть еще один девайс со своими собственными правами доступа и "подцепленный" к своим собственным create/close/read/write callbacks которые независимы от первого девайса. Реально ли это сделать?
Не совсем не зависимым. Например, обработчик IRP_MJ_CREATE (остальные аналогично): Код (Text): NTSTATUS DispatchCreate(PDEVICE_OBJECT devobj, PIRP irp) { if (devobj == DeviceObject1) { ..... } else if (devobj == DeviceObject2) { ..... } ..... } Т.е. для всех девайсов будут одни и те же каллбэки, но внутри можно легко различить, к какому девайсу был направлен запрос.
Мало что можно добавить к сказанному gilg. Вообще девайсы создаешь как обычно, только в двойном экземпляре - и девайсы и ссылки. Вообще можно хоть 10 девайсов понаделать. Обработчик будет выглядеть примерно так: Код (Text): NTSTATUS DispatchSomething( DEVICE_OBJECT* DeviceObject, IRP* Irp ) { switch( DeviceObject ) { case Device1: ..... case Device2: ..... } } И не забудь всё подчистить в Unload