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, jak ovladač User-Mode Driver Framework (UMDF) podporuje klienty režimu jádra počínaje verzí UMDF 2.
Klient režimu jádra je ovladač režimu jádra, který odesílá vstupně-výstupní požadavky na ovladač UMDF. Ovladač režimu jádra může být nad ovladačem UMDF ve stejném zásobníku zařízení nebo může být v jiném zásobníku zařízení.
Ovladač režimu jádra může předávat vstupně-výstupní požadavky, které přijal z aplikace v uživatelském režimu, nebo může vytvořit nové vstupně-výstupní požadavky a odeslat je ovladači uživatelského režimu.
Jak podporovat klienty jádového režimu v ovladači UMDF
Chcete-li povolit podporu ovladače UMDF pro klienty režimu jádra, musí soubor INF ovladače UMDF obsahovat direktivu UmdfKernelModeClientPolicy v oddílu INF DDInstall.WDF.
Architektura poskytuje dvě metody, které jsou užitečné pro ovladače, které podporují klienty režimu jádra. Ovladač může volat metodu WdfRequestGetRequestorMode , která určuje, jestli vstupně-výstupní požadavek pochází z režimu jádra nebo uživatelského režimu. Pokud vstupně-výstupní požadavek pochází z uživatelského režimu, ovladač může volat WdfRequestIsFromUserModeDriver a určit, jestli požadavek pochází z aplikace nebo jiného ovladače uživatelského režimu.
Omezení ovladačů v režimu jádra
Ovladač UMDF může zpracovávat vstupně-výstupní požadavky z ovladače režimu jádra pouze v případě, že ovladač režimu jádra splňuje následující požadavky:
Ovladač v režimu jádra musí být spuštěný v IRQL = PASSIVE_LEVEL, když odešle vstupně-výstupní požadavek.
Pokud ovladač nenastavil direktivu UmdfFileObjectPolicy INF na AllowNullAndUnknownFileObjects, musí mít každý vstupně-výstupní požadavek, který ovladač režimu jádra odesílá ovladači uživatelského režimu, přidružený souborový objekt. Rámec musí již být upozorněn, že správce vstupně-výstupních operací vytvořil objekt souboru. (Takové oznámení způsobí, že architektura zavolá funkci zpětného volání EvtDeviceFileCreate ovladače uživatelského režimu, ale tato funkce zpětného volání je volitelná.)
Požadavek V/V nemůže obsahovat funkční kód IRP_MJ_INTERNAL_DEVICE_CONTROL.
Buffery požadavku V/V nesmí obsahovat ukazatele na další informace, protože ovladač uživatelského režimu ukazatele nemůže dereferencovat.
Pokud požadavek V/V obsahuje kód řízení V/V, který specifikuje metodu "žádný" přístup k vyrovnávací paměti, ovladač režimu jádra musí odeslat požadavek V/V v kontextu procesu aplikace, která vytvořila tento požadavek V/V. Další informace o tom, jak podporovat metodu "ani jedna" v ovladači UMDF, naleznete v tématu Správa metod přístupu vyrovnávací paměti v ovladačích UMDF.
Ovladač UMDF může upravit výstupní data V/V požadavku v uživatelském režimu. Ovladač režimu jádra proto musí ověřit všechna výstupní data, která přijímá z ovladače uživatelského režimu.
Klient v režimu jádra by měl obvykle ověřit hodnotu Informace, kterou ovladač UMDF předává do WdfRequestCompleteWithInformation. Pokud je klient ovladačem KMDF, může volat WdfRequestGetCompletionParams aby získal tyto informace ve struktuře IO_STATUS_BLOCK.
Architektura obvykle neověřuje informační hodnotu, kterou ovladač UMDF předává WdfRequestCompleteWithInformation. (Tento parametr obvykle určuje počet přenesených bajtů.) Rámec ověřuje hodnotu informace pouze pro výstupní vyrovnávací paměti a pouze pro vyrovnávací vstupně-výstupní metodu přístupu k datům. (Například architektura ověřuje, že počet přenesených bajtů nepřekračuje velikost výstupní vyrovnávací paměti operace čtení, pokud je metoda přístupu uložena do vyrovnávací paměti vstupně-výstupní operace.)