Sdílet prostřednictvím


Stránkovatelný a odložitelný kód v ovladači protokolu

Vývojáři ovladačů by měli kód určit jako stránkovatelný, kdykoli je to možné, a uvolnit tak systémové místo pro kód, který musí být rezidentem paměti. Funkce můžete označit jako stránkovatelné pomocí makra NDIS_PAGEABLE_FUNCTION. IRQL, funkce správy prostředků a další vlastnosti funkce mohou zabránit tomu, aby funkce byla stránkovatelná.

Každá funkce ProtocolXxx běží na úrovni IRQL v rozsahu od PASSIVE_LEVEL po DISPATCH_LEVEL. Funkce, které běží výhradně v IRQL = PASSIVE_LEVEL by měly být označené jako stránkovatelné.

Funkce ovladače, která běží na IRQL = PASSIVE_LEVEL, může být stránkována, pokud nevolá ani není volána žádnou funkcí, která běží na IRQL >= DISPATCH_LEVEL – například funkci, která získá spinlock. Získání spinlocku způsobí, že IRQL získávajícího vlákna je zvýšena na DISPATCH_LEVEL. Funkce ovladače, například ProtocolBindAdapterEx, která běží v IRQL = PASSIVE_LEVEL nesmí volat žádné NdisXxx funkce, které běží na >IRQL = DISPATCH_LEVEL, pokud je tato funkce ovladače označena jako stránkovatelný kód. Další informace o technologii IRQL pro každou funkci NdisXxx naleznete v tématu funkce knihovny NDIS.

Funkce DriverEntry ovladačů protokolu NDIS, stejně jako kód, který je volána pouze z DriverEntry, by měla být zadána jako inicializační kód pouze pomocí makra NDIS_INIT_FUNCTION. Kód, který je identifikován tímto makrem, se předpokládá, že se spustí pouze jednou v době inicializace systému a v důsledku toho se mapuje pouze během této doby. Jakmile se funkce označená jako pouze pro inicializaci vrátí hodnotu, je zahozena.