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.
spuštění vstupně-výstupní fronty
Když ovladač volá WdfIoQueueCreate k vytvoření vstupně-výstupní fronty, architektura automaticky umožní frontě přijímat vstupně-výstupní požadavky a doručovat je ovladači.
Ovladače obvykle volají WdfIoQueueCreate z funkce zpětného volání EvtDriverDeviceAdd. Architektura může začít dodávat vstupně-výstupní požadavky ovladači poté, co se vrátí funkce zpětného volání EvtDriverDeviceAdd.
Pokud váš ovladač používá výkonově spravované fronty pro vstupně-výstupní operace, rámec nemůže začít doručovat žádosti vašemu ovladači, dokud zařízení nevstoupí do svého pracovního stavu a rámec nezavolal funkci zpětného volání EvtDeviceD0Entry.
Zastavení a restartování vstupně-výstupní fronty
Ovladač může volat WdfIoQueueStop nebo WdfIoQueueStopSynchronously, aby rámec dočasně zabránil předávání vstupně-výstupních požadavků z fronty vstupně-výstupních operací. Chcete-li obnovit doručování vstupně-výstupních požadavků, ovladač volá WdfIoQueueStart.
Pokud váš ovladač používá fronty vstupně-výstupních operací spravovaných napájením, architektura automaticky zastaví fronty zařízení, když zařízení opustí funkční stav (D0) a architektura restartuje fronty, když se stav zařízení vrátí do D0.
přidání požadavků do vstupně-výstupní fronty
Když systém odešle do ovladače požadavek na řízení čtení, zápisu nebo vstupně-výstupních operací zařízení, architektura požadavek umístí do vstupně-výstupní fronty. Ovladač může řídit typy požadavků, které architektura ukládá do každé fronty voláním WdfDeviceConfigureRequestDispatching.
Ovladač může také znovu vytvořit frontu požadavků, které přijal z rozhraní, voláním WdfRequestForwardToIoQueue.
získávání požadavků z vstupně-výstupní fronty
Pokud ovladač určuje sekvenční nebo paralelní metodu odesílání pro vstupně-výstupní frontu, zpracovává žádosti v obslužných rutinách .
Pokud ovladač určuje ruční nebo sekvenční metodu odesílání, může získat požadavky voláním WdfIoQueueRetrieveNextRequest nebo WdfIoQueueRetrieveRequestByFileObject.
Hledání vstupně-výstupních požadavků
Pokud ovladač zvolí pro frontu vstupně-výstupních operací ruční metodu předání , může pomocí následujících kroků vyhledat konkrétní požadavky ve frontě:
Zavolejte WdfIoQueueFindRequest k vyhledání požadavku, který odpovídá kritériím zadaným ovladačem.
Pro zavolání WdfIoQueueRetrieveFoundRequest aby načetl požadavek, který WdfIoQueueFindRequest lokalizoval.
Vyprázdnění nebo vyčištění vstupně-výstupní fronty
Vymazání vstupně-výstupních front spočívá v zastavení vkládání vstupně-výstupních požadavků do fronty a zrušení všech požadavků, které už jsou ve frontě.
vyprázdnění vstupně-výstupní fronty znamená zastavení vkládání vstupně-výstupních požadavků do ní, a zároveň povolení doručení všech požadavků, které už jsou ve frontě, do ovladače.
Ovladače obvykle vyprázdní nebo vypustí své fronty pouze v případě, že fronty nejsou řízeny napájením. Pro fronty vstupně-výstupních operací spravovaných napájením mohou ovladače poskytovat funkce zpětného volání EvtIoStop a EvtIoResume.
Pokud některé fronty vašeho ovladače nejsou spravovány napájením, můžete chtít vyprázdnit nebo odsát frontu, pokud jejich přidružené zařízení nebo vstupně-výstupní kanál přestane být k dispozici. Obvykle frontu vyčistíte, místo abyste ji vyprázdnili, pokud neexistuje vysoká pravděpodobnost, že každý požadavek obsahuje velmi důležité informace. Například ovladač pro síťové zařízení může vyprázdnit fronty, zatímco ovladač pro paměťové zařízení pravděpodobně vyprázdní své fronty.
Pokud chcete, aby ovladač vyprázdnil nebo vyčerpal vstupně-výstupní frontu, může ovladač volat jednu z následujících metod objektu fronty:
WdfIoQueuePurge nebo WdfIoQueuePurgeSynchronously, k zastavení zařazování vstupně-výstupních požadavků do fronty a zrušení nezpracovaných požadavků.
WdfIoQueueDrain nebo WdfIoQueueDrainSynchronously, abyste zastavili přidávání vstupně-výstupních požadavků do fronty a zároveň umožnili doručení a zpracování požadavků, které jsou už v frontě.
Dávejte pozor při volání WdfIoQueueDrain a WdfIoQueueDrainSynchronously. Protože operace vyprázdnění čeká na dokončení požadavků, měli byste vyprázdnit frontu pouze pokud jste si jisti, že nevyřízené požadavky fronty se dokončí včas. Pokud nevíte, jak dlouho trvá dokončení vstupně-výstupních požadavků a je přijatelné zrušit nevyřízených požadavků, zvažte vymazání fronty.
přesun požadavků z jedné vstupně-výstupní fronty do jiné
Jakmile ovladač obdrží vstupně-výstupní požadavek, můžete požadovat, aby ovladač přeřadil žádost do jiné vstupně-výstupní fronty. Aby to ovladač provedl, zavolá funkci WdfRequestForwardToIoQueue nebo WdfRequestForwardToParentDeviceIoQueue, která přidá žádost na konec určené fronty. Nakonec rozhraní znovu doručí požadavek ovladači pomocí metody odesílání určené fronty. Další informace o přesunu vstupně-výstupních požadavků z jedné vstupně-výstupní fronty do jiné najdete v tématu Opětovné vytvoření fronty vstupně-výstupních požadavků.
Zachycení vstupně-výstupního požadavku před jeho zařazením do fronty
Ovladač může zachycovat vstupně-výstupní požadavek před tím, než rámec umístí požadavek do vstupně-výstupní fronty. Aby mohl ovladač zachytit vstupně-výstupní požadavky, musí zavolat WdfDeviceInitSetIoInCallerContextCallback a zaregistrovat EvtIoInCallerContext funkci zpětného volání.
Rámec přidruží funkci zpětného volání EvtIoInCallerContext k zařízení. V důsledku toho architektura volá zpětnou volací funkci EvtIoInCallerContext pokaždé, když přijme požadavek, který systém odesílá zařízení.
Obvykle když EvtIoInCallerContext callback funkce obdrží požadavek, provede určité předběžné zpracování požadavku. Dále funkce zpětného volání volá WdfDeviceEnqueueRequest, která předává požadavek zpět do rámce. Architektura pak může požadavek umístit do správné vstupně-výstupní fronty, stejně jako kdyby nevolala EvtIoInCallerContext funkci zpětného volání.
Primárním důvodem, proč ovladač může poskytnout funkci zpětného volání EvtIoInCallerContext, je, že ovladač musí zpracovávat vstupně-výstupní operace, které podporují vstupně-výstupní metodu nazvanou ani vyrovnávací, ani přímé vstupně-výstupní. Pro tuto vstupně-výstupní metodu musí ovladač přistupovat k přijaté vyrovnávací paměti v procesním kontextu původce V/V žádosti. Další informace naleznete v tématu Přístup k vyrovnávacím pamětím dat v Framework-Based ovladačích.
získání vlastností vstupně-výstupní (I/O) fronty
Chcete-li získat vlastnosti objektu fronty frameworku, může ovladač volat následující metody:
WdfIoQueueGetDevice, pro získání popisovače objektu zařízení, ke kterému patří objekt fronty.
WdfIoQueueGetState, aby se získaly informace o stavu fronty .