Samostatné rutiny DispatchCreate a DispatchClose

Rutiny dispatch ovladače pro požadavky IRP_MJ_CREATE a IRP_MJ_CLOSE nemusí dělat nic víc než dokončit vstupní IRP s použitím STATUS_SUCCESS. Další informace najdete v tématu Dokončení irps.

Rutiny dispatch jiného ovladače pro IRP_MJ_CREATE a IRP_MJ_CLOSE požadavky můžou dělat víc práce v závislosti na základním ovladači zařízení nebo na podkladovém zařízení. Zvažte následující scénáře:

  • Při přijetí žádosti o vytvoření může ovladač třídy inicializovat interní frontu a odeslat požadavek IRP_MJ_INTERNAL_DEVICE_CONTROL do odpovídajícího ovladače portu požadujícího informace o konfiguraci zařízení nebo výhradní přístup k portu kontroleru.

  • Příjem IRP_MJ_CLOSE označuje, že poslední odkaz na objekt souboru, který je přidružený k objektu cílového zařízení, byl odebrán. To znamená, že všechny popisovače objektu souboru byly uzavřeny a všechny nevyřízené vstupně-výstupní požadavky byly dokončeny nebo zrušeny.

  • Při přijetí žádosti o vytvoření může ovladač méně často používaného zařízení volat MmLockPagableCodeSection aby načetl do paměti některé manipulační rutiny ovladače, které zpracovávají jiné požadavky IRP_MJ_XXX. Při přijetí požadavku na vzájemné uzavření může ovladač volat MmUnlockPagableImageSection, aby ušetřil systémovou paměť tím, že stránkovatelná část obrazu může být stránkována, když jsou zavřeny všechny popisovače objektů souboru pro objekty zařízení tohoto ovladače.

Některé ovladače zpracovávají požadavky IRP_MJ_CLOSE pouze kvůli symetrii, protože po otevření objektů zařízení chráněným subsystémem nebo ovladačem vyšší úrovně se objekty zařízení ovladačů nižší úrovně nezavřou, dokud se samotný systém nezavře. Například ovladače klávesnice a myši nastavují objekty zařízení představující fyzická zařízení, která musí být funkční v době, kdy je systém spuštěný, takže tyto ovladače můžou mít minimální rutiny DispatchClose pro symetrii nebo mohou kombinovat rutiny DispatchCreateClose .

Pokud zařízení řízené ovladačem nižší úrovně musí být k dispozici, aby systém pokračoval v provozu, nebude obecně volána rutina DispatchClose ovladače. Například některé systémové diskové ovladače nemají rutinu DispatchClose , ale tyto ovladače obvykle mají rutiny DispatchFlushBuffers a DispatchShutdown k dokončení všech nevyřízených vstupně-výstupních operací souborů před vypnutím systému.

I když můžete implementovat samostatné rutiny DRIVER_DISPATCH a DispatchClose , ovladače někdy mají jednu rutinu DispatchCreateClose pro zpracování žádostí o vytvoření i uzavření.