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 poskytuje pokyny pro řízení dispečerských rutin ovladačů.
Rutina AddDevice pro minidrivery AVStream
Většina minidriverů AVStream nedodává vlastní rutiny AddDevice . Místo toho používají KsAddDevice, výchozí obslužnou rutinu AddDevice nainstalovanou nástrojem KsInitializeDriver. Minidriverové, kteří přesto chtějí poskytnout vlastní obslužnou rutinu AddDevice, by měli postupovat podle následujících pokynů.
Pokud ovladač volá KsInitializeDriver během DriverEntry a později nahradí obslužnou rutinu AddDevice , minidriver může volat KsAddDevice z této rutiny, aby provedl výchozí zpracování přidání.
Minidriver může volat KsCreateDevice z této rutiny a předávat nominálně volitelné KSDEVICE_DESCRIPTOR. Pokud není volán KsInitializeDriver , jedná se o volání nejvyšší úrovně, které vytvoří zařízení AVStream popsané popisovačem.
Pokud minidriver vytvoří vlastní FDO a ručně se připojí k zásobníku zařízení, měl by zavolat KsInitializeDevice pro vytvoření zařízení AVStream.
Pokud ovladač neposkytuje KSDEVICE_DESCRIPTOR a přesto vytvoří zařízení, AVStream vytvoří výchozí zařízení AVStream. Toto zařízení neobsahuje žádné filtrovací mechanismy a nikdy neodesílá minidriveru. Minidriver může na zařízení vytvořit instanci struktur KSFILTERFACTORY voláním KsCreateFilterFactory.
Instalace vlastní obslužné rutiny AddDevice :
DriverObject->DriverExtension->AddDevice=MyAddDevice();
Doporučujeme, aby minidrivery AVStream používaly funkce poskytované KsInitializeDriver místo přepsání výchozí rutiny AddDevice dodané ovladačem třídy.
Další informace najdete v DRIVER_INITIALIZE funkci zpětného volání.
Rutina DriverEntry pro minidrivery třídy Stream
DriverEntry je počáteční vstupní bod minidriveru třídy streamu. Tato rutina se vyžaduje.
Vzhledem k tomu, že StreamClassRegisterMinidriver provádí většinu požadované inicializace ovladačů, primárním úkolem rutiny DriverEntry třídy stream je přidělit a vyplnit strukturu HW_INITIALIZATION_DATA konstantami a vstupními body specifické pro ovladače. DriverEntry by pak měl volat StreamClassRegisterMinidriver.
Další informace najdete v DRIVER_INITIALIZE funkci zpětného volání.
DriverEntry funkce AVStream minidriver
Funkce DriverEntry je počáteční vstupní bod do minidriveru AVStream.
Každý minidriver AVStream musí mít funkci výslovně pojmenovanou DriverEntry, aby mohl být načten. DriverEntry se volá přímo I/O systémem. DriverEntry obvykle volá KsInitializeDriver a pak vrátí hodnotu vrácenou KsInitializeDriver.
Další informace najdete v DRIVER_INITIALIZE funkci zpětného volání.
KsCancelRoutine – funkce
Funkce KsCancelRoutine provádí standardní funkci zrušení protokolu IRP: odebere položku a pak zruší a dokončí požadavek. Funkce je definována jako rutina PDRIVER_CANCEL. Je to výchozí funkce používaná pro KsAddIrpToCancelableQueue , pokud není k dispozici.
Tuto funkci obvykle volá subsystém vstupně-výstupní operace při rušení protokolu IRP, ale lze ji volat přímo v reakci na požadavek sady KSMETHOD_STREAM_PRESENTATION. Stejně jako u jakékoli typické rutiny zrušení tato funkce očekává, že se po zadání funkce získá zámek pro zrušení vstupně-výstupní operace.
Všimněte si, že tato rutina očekává, že KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) odkazuje na zámek pro přístup k seznamu, jak je uvedeno v KsAddIrpToCancelableQueue.
KsCancelRoutine lze použít k provedení předběžného zpracování seznamu odebrání, aniž by bylo skutečně dokončeno IRP. Pokud je hodnota Irp-IoStatus.Status> nastavená na STATUS_CANCELLED při zadávání této funkce, hodnota IRP se nedokončí. V opačném případě se stav nastaví na STATUS_CANCELLED a IRP bude dokončen. Tuto rutinu KsCancelRoutine lze použít v rámci rutiny zrušení k provedení počáteční manipulace se seznamem a uzamčení spinlocku a návratu do dokončovací rutiny ovladače pro specifické zpracování a konečné dokončení IRP.
Další informace najdete v rutině DRIVER_CANCEL .
Funkce KsDefaultDispatchPnp
KSDDKAPI
_Dispatch_type_(IRP_MJ_PNP) DRIVER_DISPATCH KsDefaultDispatchPnp;
Funkce KsDefaultDispatchPnp je výchozí hlavní obslužná rutina volání PnP; na tuto obslužnou rutinu lze směrovat oznámení týkající se objektu funkčního zařízení. Tato funkce předává všechna oznámení objektu zařízení PnP dříve nastavenému pomocí KsSetDevicePnpAndBaseObject a předpokládá použití hlavičky zařízení. Když se funkce předá IRP_MN_REMOVE_DEVICE, objekt zařízení se odstraní.
Funkce KsDefaultDispatchPnp vrátí stav zpracování IRP základního fyzického objektu zařízení.
Funkce KsDefaultDispatchPnp je užitečná v případě, že při odebrání zařízení nad rámec uvolnění záhlaví zařízení a odstranění skutečného objektu zařízení není potřeba žádné další vyčištění.
Další informace najdete v rutině DRIVER_DISPATCH .
KsDefaultDispatchPower
KSDDKAPI
_Dispatch_type_(IRP_MJ_POWER) DRIVER_DISPATCH KsDefaultDispatchPower;
Funkce KsDefaultDispatchPower je výchozí hlavní obslužnou rutinou dispečeru Napájení. Oznámení týkající se objektu funkčního zařízení je možné směrovat zde. Tato funkce předává všechna oznámení objektu zařízení PnP dříve nastavenému pomocí KsSetDevicePnpAndBaseObject a předpokládá použití hlavičky zařízení.
Funkce KsDefaultDispatchPower je užitečná, když není nutné žádné další čištění pro napájecí IRP nebo jako způsob dokončení jakéhokoli napájecího IRP. Umožňuje také konkrétní objekty souborů, jako je výchozí implementace hodin, připojit se k power IRPs pomocí KsSetPowerDispatch, a pracovat s nimi předtím, než je tato rutina dokončí. Tato funkce volá každou distribuční rutinu napájení před dokončením IRP.
Další informace najdete v rutině DRIVER_DISPATCH .
Rutina KsDefaultForwardIrp
KSDDKAPI
_Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
_Dispatch_type_(IRP_MJ_DEVICE_CONTROL)
DRIVER_DISPATCH KsDefaultForwardIrp;
Tato výchozí obslužná rutina umožňuje dispečerským rutinám předávat vstupně-výstupní požadavky odpovídajícím objektům fyzických zařízení.
Tato výchozí obslužná rutina poskytuje způsob, jak mohou dispečerské rutiny splnit požadavek, aby ovladač měl obslužnou rutinu funkce IRP_MJ_* pro konkrétní hlavní funkce.
Další informace najdete v rutině DRIVER_DISPATCH .