тогда регистрируйте два разных DosDevice имени для каждого устройства( вы так к драйверу из приложения обращаетесь?)
UNICODE_STRING linkname;
RtlInitUnicodeString(&linkname, L"\\DosDevices\\Device0");
IoCreateSymbolicLink(&linkname, &devname);
в обработчике IRP_MJ_CREATE отслеживаете ID процесса который обращается по именам:
http://www.wd-3.com/archive/namespace.htmзапоминаете ID процесса.
при обработке IRP_MJ_WRITE - проверяете ID процесса и узнаете какое чтение/запись производить.
единственное, что вам надо будет где то узнавать в каком порядке в драйвере имена давать. самое простое - это можно сделать путем проверки статуса при создании ссылки, создалось имя устройства, или оно уже кем то зарезервировано. беда только с неразберихой нумерации будет. если на ходу USB перетыкать.
как нумерацию имен в драйвере в строковую переменную переводить я где то на форуме выкладывал код. Rtl-функции были.
Добавлено через 40 секунд:о чем то я... даже запоминать ID не надо. можно каждый раз проверять.