2

最近、Windows Filtering Platform 機能をドライバーに追加しました。

wfp から必要な情報を問題なく取得できましたが、問題はブート プロセス中にあります。wfp 機能を追加して以来、ドライバーを使用するマシンはブートできません。デッドロックが発生します (コンピューターがスプラッシュ画面)。

これはおそらく、ドライバーが FltMgr のみに依存しており、おそらく wfp フレームワークが読み込まれる前に読み込まれるためだと考えました (TcpStack?)。

私の質問は、wfp フレームワークがロードされているかどうかを Service Manager またはその他の機関に尋ねる方法はありますか? またはさらに - wfp が依存しているドライバーは何ですか? (そのため、使用を開始する前にロードされているかどうかを確認できました)

4

1 に答える 1

2

これが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
}
于 2012-01-13T12:23:53.300 に答える