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.
Životní cyklus objektu architektury zahrnuje čas od okamžiku vytvoření objektu do okamžiku odstranění. Počet odkazů objektu řídí, kdy bude odstraněn.
Vytvoření objektu architektury
Většina objektů architektury je vytvořena voláním ovladače metody vytvoření objektu. Každý ovladač architektury musí například volat WdfDriverCreate vytvořit objekt ovladače rozhraní.
Další objekty architektury jsou vytvořeny architekturou. Když například uživatelská aplikace otevře zařízení pro operace čtení nebo zápisu, rámec vytvoří rámcový objekt souboru a předá ho do EvtDeviceFileCreate zpětné volací funkce ovladače.
Několik objektů architektury lze vytvořit buď architekturou, nebo ovladačem. Když například správce vstupně-výstupních operací doručí požadavek na vstupně-výstupní operace ovladači, architektura vytvoří objekt požadavku na rozhraní a doručí ho ovladači, obvykle zavoláním jednoho z obslužných rutin žádostí ovladače. Ovladač může také vytvářet objekty požadavků architektury a dodávat je jiným ovladačům.
Použití referenčních počtů
Architektura udržuje referenční počet pro každý objekt. Když je objekt vytvořen, architektura nastaví jeho referenční počet na jeden. Pokud se počet odkazů změní na nulu, architektura objekt odstraní.
Ovladače mohou upravit počet odkazů objektu voláním WdfObjectReference ke zvýšení počtu odkazů nebo WdfObjectDereference ke snížení počtu odkazů. (Ovladač může volat WdfObjectDereference jen v případě, že dříve volal WdfObjectReference.)
Ve většině případů nemusí ovladače navyšovat nebo dekrementovat počet odkazů objektu. Framework zvýší počítadlo předtím, než předá popisovač objektu ovladači, a sníží počítadlo, když ovladač už objekt nepotřebuje.
Ovladače volají WdfObjectReference, aby se zajistilo, že objekt nebude odstraněn (rozhraním nebo vláknem ovladače), než ovladač dokončí jeho použití. Příklad situace, kdy by ovladač měl volat WdfObjectReference a WdfObjectDereference, viz Synchronizace zrušení odeslaných požadavků.
Odstranění objektu architektury
Objekty jsou odstraněny buď proto, že ovladač volá WdfObjectDelete nebo protože architektura volá interní rutinu odstranění, ale objekt je odstraněn pouze v případě, že jeho referenční počet je nula. Po tom, co se ovladač nebo rozhraní pokusí odstranit objekt, zůstane popisovač objektu platný, dokud počet odkazů neklesne na nulu. Ovladač nemůže odstranit objekt jednoduše tím, že zavolá WdfObjectDereference ke snížení počtu odkazů objektu na nulu – ovladač musí také volat WdfObjectDelete.
Pokud je objekt rámce podřízeným objektem nadřazeného objektu a nadřazený objekt je odstraněn, rámec se pokusí nejdříve odstranit podřízený objekt, než odstraní nadřazený. Odstranění objektu začíná od objektu, který je od nadřazeného objektu nejdále a probíhá v hierarchii objektů směrem ke kořeni.
Ovladače mohou zaregistrovat následující dvě funkce zpětného volání, které rozhraní volá, když ovladač nebo architektura odstraňuje objekt:
EvtCleanupCallback je funkce zpětného volání, kterou rozhraní volá, aby mohl ovladač zavolat WdfObjectDereference, pokud dříve zavolal WdfObjectReference pro objekt, který je odstraněn.
EvtDestroyCallback je funkce zpětného volání, kterou architektura volá poté, co je počet referencí objektu zmenšen na nulu.
Jedna z těchto funkcí zpětného volání musí uvolnit všechny prostředky specifické pro objekty, které ovladač při vytváření objektu přidělil.
Architektura vždy zpracovává odstranění některých objektů architektury a ovladače se nesmí pokoušet tyto objekty odstranit. Seznam objektů architektury, které ovladače nemohou odstranit, naleznete v tématu WdfObjectDelete.