Se till att slutförandebearbetningen utförs på säker IRQL

Som anges i Writing Postoperation Callback Routineskan efteroperationsanropsrutin för en IRP-baserad I/O-åtgärd anropas på IRQL = DISPATCH_LEVEL, såvida inte minifilterdrivrutinens återanropsrutin för föroperation synkroniserade åtgärden genom att returnera FLT_PREOP_SYNCHRONIZE eller åtgärden är en skapandeåtgärd, vilket är synkront. (Mer information om det här returvärdet finns i Returning FLT_PREOP_SYNCHRONIZE.)

För IRP-baserade I/O-åtgärder som inte redan har synkroniserats kan dock minifilterdrivrutiner använda till två tekniker för att säkerställa att slutförandebearbetningen utförs på IRQL-<= APC_LEVEL.

Den första tekniken är att återanropsrutinen efter operationen ska hålla kvar I/O-åtgärden tills bearbetningen kan slutföras på IRQL <= APC_LEVEL. Den här tekniken beskrivs i Väntar på en I/O-åtgärd i en efteroperationsåteranropsrutin.

Den andra tekniken är att minifilterdrivrutinens återanropsrutin efter operationen anropar FltDoCompletionProcessingWhenSafe. FltDoCompletionProcessingWhenSafe fördröjer endast I/O-åtgärden om den aktuella IRQL:n är >= DISPATCH_LEVEL. Annars kör den här rutinen omedelbart minifilterdrivrutinens SafePostCallback rutin. Den här tekniken beskrivs i FltDoCompletionProcessingWhenSafe.