Возник такой вопрос — функции драйвера могут выполняться в контексте произвольного потока,отсюда следует,что блокировать поток нельзя (KeWaitFor...),но как же тогда быть с посылкой IOCTL другому драйверу с ожиданием ответа (IoCallDriver->KeWaitForSingleObject) — это ведь обыденная практика — но мы не знаем в каком контексте вызывается мы посылаем OCTL поэтому не можем блокировать поток или как? Совсем запутался...
Обработчик IOCTL'ей выполняется в контексте конкретного потока — того который его позвал. В контексте произвольного (не предсказуемого) потока исполняются всяческие ISR и DPC.
Как много веселых ребят, и все делают велосипед...
Re: Контекст потока в драйвера
От:
Аноним
Дата:
15.09.12 19:24
Оценка:
нужно либо отправлять запрос асинхронно, что более предпочтительно, либо делать синхронный запрос в системном рабочем потоке или собственном потоке драйвера. так же если (top level)драйвер делает свой запрос в результате обработки пользовательского запроса то в принципе здесь может быть допустимо ожидание прямо в контексте потока сделавшего запрос.