Здравствуйте все. Вопрос весьма детский, но я упёрся намертво. В драйвере создаётся файл лога (создаётся он в функции DriverEntry, т.е. в контексте процесса System), затем в обработчике IRP_MJ_READ фильтра повешенного на драйвер файловой системы должна производиться запись в лог. Так вот, запясь я произвести не могу, т.к. у меня всегда STATUS_INVALID_HANDLE. Пытался делать вот что: 1. Описал функцию ZwDuplicateObject (в DDK она почему-то не описана оказалась), в DriverEntry сохраняю хэндл открытого файла и UniqueProcessId процесса System в структуре расширения своего устройства (может это и есть ошибка - хэндл-то не PID, но как получить хэндл процесса в ядре я не знаю , в структуре EPROCESS ничего подобного не нашёл), затем в обработчике IRP_MJ_READ извлекаю из структуры расширения хэндл файла и PID процесса System, делаю вызов ZwDuplicateObject, получаю вместо вожделенного хэндла 00 00 00 00. 2. В DriverEntry получаю указатель на объект файла лога (ObReferenceObjectByHandle(....)), сохраняю его в структуре расширения, а в обработчике IRP_MJ_READ извлекаю из структуры расширения этот указатель, вызываю ObFindHandleForObject(....), получаю что-то не очень похожее на хэндл, а именно: 0х000002с8, что и даёт мне STATUS_INVALID_HANDLE в ZwWriteFile(....). Предполагаю, что надо было идти вообще другим путём (в строители, а не в программисты). Заранее всем спасибо.