Использование платформы фильтрации Windows в драйвере ядра
Недавно мы добавили возможности платформы фильтрации Windows в наш драйвер.
Нам удалось без проблем получить требуемую информацию от wfp, но проблема заключается в процессе загрузки - так как мы добавили возможности wfp, машины, использующие драйвер, не могут загрузиться - они зашли в тупик (компьютер "завис"). заставка).
Мы выяснили это, вероятно, потому что наш драйвер зависит только от FltMgr и, вероятно, загружается до загрузки инфраструктуры wfp (TcpStack?).
Мой вопрос - есть ли способ спросить Service Manager или любой другой орган, загружен ли фреймворк wfp? или еще дальше - от каких драйверов зависит wfp? (чтобы я мог проверить, загружены ли они, прежде чем начать его использовать)
1 ответ
Решение
Вот что я делаю в DriverEntry.
//
// Wait for the WFP engine to be ready.
//
FWPM_SERVICE_STATE bfeState;
bfeState = FwpmBfeStateGet0();
if (bfeState != FWPM_SERVICE_RUNNING)
{
WaitTime.QuadPart = (-5000000); // wait 500000us (500ms) relative
do {
KeDelayExecutionThread (KernelMode, FALSE, &WaitTime);
bfeState = FwpmBfeStateGet0();
WaitCycles--;
} while (bfeState != FWPM_SERVICE_RUNNING && WaitCycles > 0);
}
if (bfeState != FWPM_SERVICE_RUNNING)
{
// log and error handling
}