Sdílet prostřednictvím


Podpora klientů Kernel-Mode v ovladačích UMDF

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.)