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.
Toto téma popisuje "životní cyklus" objektu, to jest způsob, jakým se na objekty odkazuje a sleduje správce objektu. Toto téma také popisuje, jak nastavit objekty jako dočasné nebo trvalé.
Počet odkazů na objekt
Správce objektů udržuje počet odkazů na objekt. Při vytváření objektu nastaví správce objektů počet odkazů objektu na jeden. Jakmile tento čítač klesne na nulu, objekt se uvolní.
Ovladače musí zajistit, aby správce objektů měl přesný referenční počet pro všechny objekty, se kterými manipulují. Objekt, který je uvolněn předčasně, může způsobit pád systému. Objekt, jehož počet odkazů je kvůli chybě vyšší, než by měl být, nebude nikdy uvolněn.
Na objekty lze odkazovat buď pomocí úchytu, nebo ukazatelem. Kromě počtu referencí správce objektů udržuje také počet otevřených popisovačů k objektu. Každá rutina, která otevře popisovač, zvyšuje počet odkazů na objekt i počet popisovačů o jednu. Každé volání takové rutiny se musí shodovat s odpovídajícím voláním ZwClose. Další informace naleznete v tématu Popisovače objektů.
V režimu jádra lze na objekt odkazovat ukazatelem. Rutiny, které vracejí ukazatele na objekty, jako je IoGetAttachedDeviceReference, zvyšují počet odkazů o jeden. Jakmile ovladač dokončí používání ukazatele, musí zavolat na ObDereferenceObject, aby snížil počet odkazů o jeden.
Všechny následující rutiny zvyšují počet odkazů objektu o jednu:
Každé volání provedené v některé z předchozích rutin musí být spárováno s odpovídajícím voláním ObDereferenceObject.
Rutiny ObReferenceObject a ObReferenceObjectByPointer jsou k dispozici, aby ovladače mohly zvýšit počet odkazů známého ukazatele objektu o jeden. ObReferenceObject jednoduše zvýší počet odkazů. ObReferenceObjectByPointer provede kontrolu přístupu před zvýšením počtu odkazů.
Rutina ObReferenceObjectByHandle přijímá popisovač objektu a poskytuje ukazatel na podkladový objekt. Také se zvýší počet odkazů o jeden.
Dočasné a trvalé objekty
Většina objektů je dočasná; existují tak dlouho, dokud se používají, a pak je uvolní správce objektů. Objekty lze vytvořit, které jsou trvalé. Pokud je objekt trvalý, správce objektů sám obsahuje odkaz na objekt. Proto počet odkazů zůstává větší než nula a objekt není uvolněn, pokud se již nepoužívá.
K dočasnému objektu lze přistupovat dle jeho názvu, dokud počet jeho popisovačů není nulový. Jakmile se počet popisovačů sníží na nulu, název objektu se odebere z oboru názvů správce objektů. K těmto objektům je stále možné přistupovat ukazatelem, pokud počet odkazů zůstane větší než nula. K trvalým objektům lze přistupovat podle názvu, pokud existují.
Objekt může být v době vytvoření objektu trvalý zadáním atributu OBJ_PERMANENT v OBJECT_ATTRIBUTES struktuře objektu. Další informace naleznete v tématu InitializeObjectAttributes.
Chcete-li vytvořit trvalý objekt dočasný, použijte rutinu ZwMakeTemporaryObject . Tato rutina způsobí automatické odstranění objektu, jakmile se už nepoužívá. (Pokud objekt nemá otevřené popisovače, název objektu se okamžitě odebere z oboru názvů správce objektů. Samotný objekt zůstane, dokud počet odkazů nepřestane na nulu.)