Sdílet prostřednictvím


Rutiny odesílání a seznamy IRQLs

Většina rutin odesílání ovladačů se volá v libovolném kontextu vlákna v IRQL = PASSIVE_LEVEL s následujícími výjimkami:

  • Všechny rutiny dispečerů nejvyšší úrovně se volají v kontextu vlákna, které pochází z V/V požadavku, což je obvykle vlákno aplikace v uživatelském režimu.

    Jinými slovy, rutiny odesílání ovladačů systému souborů a dalších ovladačů nejvyšší úrovně jsou volány v nespecifickém kontextu vlákna při IRQL = PASSIVE_LEVEL.

  • Rutiny DispatchRead, DispatchWrite a DispatchDeviceControl ovladačů zařízení nejnižší úrovně a přechodných ovladačů, které jsou nad nimi vrstvené v cestě stránkování systému, lze volat v IRQL = APC_LEVEL a v libovolném kontextu vlákna.

    Rutiny DispatchRead a/nebo DispatchWrite a všechny ostatní rutiny, které také zpracovávají požadavky na čtení a zápis v takovém zařízení nebo přechodném ovladači nejnižší úrovně, musí být vždy rezidentní. Tyto rutiny ovladače nemohou být stránkovatelné ani nemohou být součástí oddílu stránkovatelného obrazu ovladače; nesmí přistupovat k žádné stránkovatelné paměti. Kromě toho by neměly být závislé na žádných blokujících voláních (například KeWaitForSingleObject s nenulovým vypršením časového limitu).

  • Procedura DispatchPower ovladačů na hibernačních a/nebo stránkovacích cestách může být volána na úrovni IRQL = DISPATCH_LEVEL. Rutiny DispatchPnP těchto ovladačů musí být připravené ke zpracování požadavků PnP IRP_MN_DEVICE_USAGE_NOTIFICATION .

  • Procedura DispatchPower ovladačů, které při spuštění vyžadují nárazový proud, může být volána v IRQL = DISPATCH_LEVEL.

Další informace najdete v tématu Správa priorit hardwaru.