February 15th, 2007

Вопрос к френдам-программистам

Есть драйвер, который принимает IRP с IRP_MJ_DEVICE_CONTROL. IRP, полученное драйвером, может быть либо передано юзермодовским процессом через обычный DeviceIoControl, либо сформировано другим драйвером в ходе выполнения совсем другого запроса юзермодовского процесса. Во втором случае IRP может быть доставлено в наш драйвер через APC, при этом код нашего драйвера выполняется в контексте в общем случае произвольного процесса.

А теперь вопрос: существует ли надежный способ узнать PID процесса, породившего оригинальный запрос, работающий независимо от способа доставки IRP в драйвер? Или, другими словами, как узнать, какаой процесс является "заказчиком" APC?

Заранее спасибо тем, кто ответит, хотя хрен кто ответит :-(