Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato část popisuje správné použití typů objektů rozhraní WFP (Windows Filtering Platform).
Zasedání
Rozhraní WFP API je orientované na relaci a většina volání funkcí se provádí v kontextu relace. Nová relace klienta je vytvořena voláním FwpmEngineOpen0. Relace skončí buď při volání klienta FwpmEngineClose0, nebo proces klienta ukončí. Když je relace zničena, buď záměrně, nebo spuštěním RPC, základní filtrovací modul (BFE) nejprve přeruší všechny existující transakce.
Při vytváření nové relace může volající vytvořit dynamickou relaci předáním příznaku FWPM_SESSION_FLAG_DYNAMICFwpmEngineOpen0. Všechny objekty přidané během dynamické relace se po skončení relace automaticky odstraní.
Transakce
Rozhraní WFP API je transakční a většina volání funkcí se provádí v kontextu transakce. Volající můžou k explicitní kontrole transakcí použít FwpmTransactionBegin0, FwpmTransactionCommit0a FwpmTransactionAbort 0. Pokud je však volání funkce provedeno mimo explicitní transakci, provede se v rámci implicitní transakce. Pokud probíhá transakce, při ukončení relace se automaticky přeruší. Implicitní transakce nejsou nikdy vynuceně přerušeny.
Transakce jsou buď jen pro čtení, nebo jen pro čtení/zápis a vynucují sémantiku Atomic Consistent Isolated Durable (ACID).
Každá relace klienta může mít současně probíhající pouze jednu transakci. Pokud se volající pokusí zahájit druhou transakci před potvrzením nebo přerušením prvního, vrátí BFE chybu.
Pokud operace v průběhu transakce selže, nemá vliv na celkový stav transakce. Předpokládejme například, že klient zahájí transakci a úspěšně volá FwpmFilterAdd0 třikrát předtím, než se čtvrté volání nezdaří. Klient teď má možnost:
- Přerušení transakce, v takovém případě nebude přidán žádný z filtrů.
- Potvrzení transakce, v takovém případě budou přidány první tři filtry.
- Pokračování s dalšími operacemi, včetně potenciálně opakování neúspěšného FwpmFilterAdd0.
Při zahájení transakce BFE počká, dokud nevyprší platnost relace txnWaitTimeoutInMSec získat zámek. Pokud se zámek během této doby nezíská, získání zámku (a FwpmTransactionBegin0 volání) selže. Tím zabráníte klientům, aby nereagoval na neomezenou dobu. Pokud klient neurčil časový limit uzamčení, výchozí hodnota je 15 sekund.
Každá transakce má také časový limit uzamčení. Toto je maximální doba, po kterou může zámek vlastnit. Pokud vlastník během této doby zámek nevyvolá, transakce je vynuceně přerušena, což způsobí uvolnění zámku. Časový limit uzamčení není konfigurovatelný. Volajícím v režimu jádra je nekonečné a jedna hodina pro volající v uživatelském režimu. Pokud je transakce vynuceně přerušena, další volání provedené v rámci této transakce selže s FWP_E_TXN_ABORTED.
Životnost objektů
Objekty můžou mít jednu ze čtyř možných životností:
- Dynamická – Objekt je dynamický pouze v případě, že je přidán pomocí dynamického popisovače relace. Dynamické objekty jsou aktivní, dokud nebudou odstraněny nebo se ukončí vlastní relace.
- Statické – Objekty jsou ve výchozím nastavení statické. Statické objekty jsou aktivní, dokud nebudou odstraněny, BFE se zastaví nebo se systém vypne.
- Trvalé – Trvalé objekty se vytvářejí předáním příslušného příznaku FWPM_*_FLAG_PERSISTENT do funkce Fwpm*Add0. Trvalé objekty jsou aktivní, dokud se neodstraní.
- Integrované – předdefinované objekty BFE jsou předdefinované a nelze je přidat ani odstranit. Žijí navždy.
Filtry ve vrstvách režimu jádra je možné označit jako filtry za běhu předáním příslušného příznaku FwpmFilterAdd0. Při spuštění ovladače TCP/IP se do systému při spuštění ovladače TCP/IP přidají filtry spouštění a po dokončení inicializace BFE se odeberou. Trvalé objekty se při spuštění BFE přidají.
V mnoha případech poskytovatel zásad nemusí chtít, aby se jeho trvalá zásada vynucovala, pokud je zprostředkovatel zakázaný. Při přidávání zprostředkovatele může volající zadat volitelný název služby systému Windows. Při přidávání trvalých objektů může volající volitelně určit zprostředkovatele, který tento objekt vlastní. Při spuštění služby přidá BFE do systému trvalé objekty pouze v případě, že nejsou přidruženy k poskytovateli nebo přidružený zprostředkovatel nemá žádný název služby systému Windows nebo přidružená služba Systému Windows je nastavena na automatické spuštění.
Přidružení objektů
Některé objekty mají odkazy na jiné objekty. Filtr například vždy odkazuje na vrstvu a může odkazovat na bublinový popisek a kontext zprostředkovatele. Objekty nemohou odkazovat na objekty, které mohou mít kratší životnost. Dynamický objekt proto nemůže odkazovat na dynamický objekt z jiné relace. Statický objekt nemůže odkazovat na dynamický objekt. Trvalý objekt nemůže odkazovat na dynamický objekt, statický objekt ani trvalý objekt vlastněný jiným zprostředkovatelem.
Objekt nelze odstranit, dokud nebudou odstraněny všechny objekty, které na něj odkazují.
Identifikátory LUID a identifikátory GUID
Všechny objekty rozhraní WFP API v uživatelském režimu (FWPM) jsou identifikované globálně jedinečným identifikátorem (GUID) a odkazují na další objekty podle GUIDs. Identifikátor GUID musí být jedinečný pouze v rámci typu objektu. Například filtr a kontext zprostředkovatele můžou mít stejný identifikátor GUID, ale dva filtry nemohou. Při přidávání nového objektu můžou volající přiřadit identifikátor GUID objektu nebo ho nechat inicializovaný nulou a nechat BFE přiřadit GUID.
Všechny objekty rozhraní WFP API v režimu jádra (FWPS) jsou identifikované místně jedinečným identifikátorem (LUID) a odkazují na jiné objekty podle jejich LUID. Přechod z guid na LUID umožňuje WFP šetřit nestrákovaný fond a optimalizovat zpracování za běhu. Šířka LUID závisí na typu objektu a rozsahu od UINT16 do UINT64. funkce LUIDjsou vždy přiřazeny nástrojem BFE.