Хотел осуществить такую задумку: 1. при загрузке драйвера создается один Device0 посредством вызова IoCreateDevice. IoCreateDevice( DriverObject, sizeof(DEVICE_EXTENSION1), &device_name, 0, 0, FALSE, &device_object); 2. при обращении к нему через DeviceIoControl с определенными параметрами создается Device1. IoCreateDevice( device_object -> DriverObject, sizeof(DEVICE_EXTENSION2), &device_name, 0, 0, FALSE, &device_object2); 3. При этом у Device0 и Device1 различные device_extension. И думал что при работе с Device1 будут вызываться функции обработки такие же как и у Device0. Но этого не происходит. Device1 создается, но ни на какие функции не реагирует. Как такое может быть? Или есть какое-то вето на момент создания Device'ов?
Функции обработки IRP, Fast I/O привязаны к DRIVER_OBJECT. Если ты в драйвере создаешь несколько устройств, то обрабатывать их будут одни и те же функции. В твоем случае думаю проблема кроется в том, что у тебя для двух различных устройств указывается одно и то же имя. Или device_name хранит разные имена при первом и втором вызове?
Имена разные, это просто в качестве примера. К тому же если бы имена были одинаковы - выдал бы ошибку. После каждого вызова идет проверка статуса выполнения - они STATUS_SUCCESS. Так что они корректно созданы. Но второй device не реагирует.
Блин, ну что за терминология! Не реагирует... Йопт, что значит не реагирует? Девайсы что ли танго должны танцевать при любой системной активности? Выше уже в принципе всё сказали, правда, недостаточно чётко. Ещё раз: объект-девайс (DEVICE_OBJECT) пассивен, вызываются всегда обработчики объекта-драйвера (DRIVER_OBJECT). При чём вызываются всегда для какого-то конкретного девайса (которому предназначается запрос), а не просто так. Это, кстати, распространённое заблуждение большинства современных драйверописателей. Они почему-то думают, что запросы посылаются драйверам, но на самом деле целью запроса всегда является устройство, а обработчики запросов привязаны к драйверам совсем по другой причине - потому что драйвер может обслуживать (да-да, это именно тот термин) несколько устройств одновременно.