bruger Windows Filtreringsplatform i Kernel Driver

Indlæg af Hanne Mølgaard Plasc

Problem



Vi har for nylig tilføjet Windows Filtering Platform-muligheder til vores driver.


Vi har formået at få de oplysninger, vi krævede fra wfp uden problem, men problemet er under opstartsprocessen - da vi tilføjede wfp-mulighederne, kan maskiner, der bruger driveren, ikke starte - de får en deadlock (computeren er 'fast' i skærmbilledet).


Vi regnede med det nok fordi vores driver kun er afhængig af FltMgr og er sandsynligvis indlæst, før wfp-rammen er indlæst (TcpStack?).


Mit spørgsmål er - er der en måde at spørge Service Manager eller en anden myndighed om, hvorvidt WFP-rammen er indlæst eller ej? eller endnu mere - hvad er driverne wfp er afhængig af? (så jeg kunne kontrollere, om de er indlæst, før de begynder at bruge det)

Bedste reference


Her er hvad jeg gør i 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
}