#define PASSIVE_LEVEL 0 // Passive release level
#define LOW_LEVEL 0 // Lowest interrupt level
#define APC_LEVEL 1 // APC interrupt level
#define DISPATCH_LEVEL 2 // Dispatcher level
#define CMCI_LEVEL 5 // CMCI handler level
#define PROFILE_LEVEL 27 // timer used for profiling.
#define CLOCK1_LEVEL 28 // Interval clock 1 level - Not used on x86
#define CLOCK2_LEVEL 28 // Interval clock 2 level
#define IPI_LEVEL 29 // Interprocessor interrupt level
#define POWER_LEVEL 30 // Power failure level
#define HIGH_LEVEL 31 // Highest interrupt level
Dispatch Routine IRQL and Thread Context
The following table summarizes the IRQL and thread context requirements for file system filter driver dispatch routines.
Dispatch routine | Caller's IRQL: | Caller's thread context: |
---|---|---|
Cleanup | PASSIVE_LEVEL | Nonarbitrary |
Close | APC_LEVEL | Arbitrary |
Create | PASSIVE_LEVEL | Nonarbitrary |
DeviceControl (except paging I/O) | PASSIVE_LEVEL | Nonarbitrary |
DeviceControl (paging I/O path) | APC_LEVEL | Arbitrary |
DirectoryControl | APC_LEVEL | Arbitrary |
FlushBuffers | PASSIVE_LEVEL | Nonarbitrary |
FsControl (except paging I/O) | PASSIVE_LEVEL | Nonarbitrary |
FsControl (paging I/O path) | APC_LEVEL | Arbitrary |
LockControl | PASSIVE_LEVEL | Nonarbitrary |
PnP | PASSIVE_LEVEL | Arbitrary |
QueryEa | PASSIVE_LEVEL | Nonarbitrary |
QueryInformation | PASSIVE_LEVEL | Nonarbitrary |
QueryQuota | PASSIVE_LEVEL | Nonarbitrary |
QuerySecurity | PASSIVE_LEVEL | Nonarbitrary |
QueryVolumeInfo | PASSIVE_LEVEL | Nonarbitrary |
Read (except paging I/O) | PASSIVE_LEVEL | Nonarbitrary |
Read (paging I/O path) | APC_LEVEL | Arbitrary |
SetEa | PASSIVE_LEVEL | Nonarbitrary |
SetInformation | PASSIVE_LEVEL | Nonarbitrary |
SetQuota | PASSIVE_LEVEL | Nonarbitrary |
SetSecurity | PASSIVE_LEVEL | Nonarbitrary |
SetVolumeInfo | PASSIVE_LEVEL | Nonarbitrary |
Shutdown | PASSIVE_LEVEL | Arbitrary |
Write (except paging I/O) | PASSIVE_LEVEL | Nonarbitrary |
Write (paging I/O path) | APC_LEVEL | Arbitrary |