Sdílet prostřednictvím


Konfigurace režimu zasílání pro vstupně-výstupní frontu

Výstraha

UMDF 2 je nejnovější verze UMDF a nahrazuje UMDF 1. Všechny nové ovladače UMDF by měly být zapsány pomocí UMDF 2. Do UMDF 1 se nepřidávají žádné nové funkce a v novějších verzích Windows 10 je omezená podpora UMDF 1. Univerzální ovladače systému Windows musí používat UMDF 2.

Archivované ukázky UMDF 1 najdete v aktualizaci ovladačů pro Windows 11, verze 22H2 z května 2022 – .

Další informace najdete v tématu Začínáme s UMDF.

Když dorazí vstupně-výstupní požadavky z aplikací, architektura umístí každý požadavek do příslušné vstupně-výstupní fronty. Způsob a kdy se požadavky doručují ovladači, závisí na tom, jak ovladač konfiguruje odesílání pro frontu vstupně-výstupních operací a jak ovladač určuje synchronizaci funkce zpětného volání. Fronta vstupně-výstupních operací také interaguje se subsystémem PnP a řízení spotřeby UMDF, aby udržovala vstupně-výstupní požadavky ve frontě, dokud zařízení nedosáhne odpovídajícího stavu.

Poznámka Režim odesílání fronty vstupně-výstupních operací nesouvisí s režimem synchronizace. Konfigurace odesílání vstupně-výstupní fronty řídí počet požadavků, které ovladač může přijmout ke zpracování v libovolném okamžiku, zatímco synchronizace řídí souběžné provádění funkcí zpětného volání událostí, které prezentují nebo ruší požadavky. Pomocí kombinace režimů odesílání a synchronizace se však vytváří několik režimů operace.

Ovladač konfiguruje odesílání pro vstupně-výstupní frontu, když ovladač volá metodu IWDFDevice::CreateIoQueue pro konfiguraci výchozí fronty nebo vytvoření sekundární fronty. Ovladač může zadat jednu z hodnot z typu WDF_IO_QUEUE_DISPATCH_TYPE výčtu v parametru DispatchTypeIWDFDevice::CreateIoQueue k identifikaci režimu odeslání. Objekt fronty I/O může podporovat následující způsoby odeslání:

  • Sekvenční

    Režim sekvenčního odeslání je určen pomocí hodnoty WdfIoQueueDispatchSequential . V tomto režimu odesílání fronta ve stavu zpracování vyvolává události tak, aby ovladač zpracovával pouze jeden požadavek najednou. Fronta odkládá všechny další požadavky, dokud ovladač nedokončí zpracování svého aktuálního požadavku nebo nezavolá metodu IWDFIoRequest::ForwardToIoQueue pro znovuzařazení požadavku. Po dokončení nebo předání aktuálního požadavku fronta vyvolá událost, která poskytne další požadavek.

  • Paralelní

    Režim paralelního odesílání je určen pomocí hodnoty WdfIoQueueDispatchParallel . V tomto režimu odesílání fronta ve stavu zpracování vyvolává události, jakmile jsou I/O požadavky připraveny pro ovladač. Když ovladač obdrží V/V požadavek, může ovladač zpracovat vstupně-výstupní požadavek jedním z následujících způsobů:

    • Ovladač volá metodu IWDFIoRequest::Complete nebo IWDFIoRequest::CompleteWithInformation , která okamžitě dokončí vstupně-výstupní požadavek. Ovladač okamžitě dokončí vstupně-výstupní požadavek, pokud je vstupně-výstupní požadavek neplatný, nemůže být vůbec obsluhován nebo může být dokončen zkopírováním dat z vyrovnávací paměti nebo mezipaměti s daty.
    • Ovladač volá metodu IWDFIoRequest::ForwardToIoQueue k přeřazení vstupně-výstupního požadavku do fronty.
    • Ovladač volá metodu IWDFIoRequest::Send , která předá vstupně-výstupní požadavek ovladači nižší úrovně.
  • Příručka

    Režim ručního odeslání je určen pomocí hodnoty WdfIoQueueDispatchManual . V tomto režimu zpracování fronta vstupně-výstupních operací automaticky neinformuje ovladač při příchodu požadavků do fronty. Ovladač musí volat metodu IWDFIoQueue::RetrieveNextRequest pro ruční načtení požadavků z fronty. Jedná se o model průzkumu.

    V UMDF verzích 1.9 a novějších, pokud ovladač používá ruční režim odeslání, může volat IWDFIoRequest2::Requeue k vrácení vstupně-výstupního požadavku do čela vstupně-výstupní fronty, ze které ho ovladač získal. Po volání IWDFIoRequest2::Requeue při dalším volání IWDFIoQueue::RetrieveNextRequest ovladač načte znovu zařazenou žádost.

Pro všechny režimy odeslání objekt fronty vstupně-výstupní přijme a sleduje požadavek, dokud jej ovladač nezpracuje nebo není zrušen.

Pokud ovladač nakonfiguruje frontu pro sériové nebo paralelní odesílání, architektura upozorní ovladač na požadavek prostřednictvím funkcí zpětného volání, které ovladač zaregistruje při vytváření nebo konfiguraci výchozí fronty. Další informace najdete v tématu Funkce zpětného volání událostí fronty vstupně-výstupních operací.