Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En drivrutins DispatchCleanup-rutin hanterar IRP:er för IRP_MJ_CLEANUP I/O-funktionskod.
Drivrutiner kan använda en DispatchCleanup-rutin för att utföra de rensningsåtgärder som behövs när alla handtag till ett filobjekt har stängts. Observera att DispatchCleanup anropas i processkontexten för den process som stängde det slutliga handtaget. Den här processen kan skilja sig från den process som ursprungligen öppnade handtaget. (Vanligtvis sker den här skillnaden eftersom en annan process använder duplicerahandle-användarlägesrutinen för att duplicera processhandtagen.) Drivrutiner som måste utföra rensning i den ursprungliga processkontexten kan använda rutinen PsSetCreateProcessNotifyRoutine för att registrera en återanropsrutin för det ändamålet, men tänk på att sådana återanrop är en begränsad systemresurs.
I allmänhet måste en DispatchCleanup-rutin bearbeta en IRP_MJ_CLEANUP begäran genom att göra följande för varje IRP som för närvarande finns i enhetskön (eller i drivrutinens interna kö med IP-adresser), för målenhetsobjektet och är associerad med filobjektet:
Anropa IoSetCancelRoutine för att ange avbryt rutinpekaren till NULL.
Avbryt varje IRP som för närvarande finns i kön för målenhetsobjektet om filobjektet som anges i drivrutinens I/O-stackplats för den köade IRP:n matchar filobjektet som togs emot på I/O-stackplatsen för IRP_MJ_CLEANUP begäran.
Anropa IoCompleteRequest för att slutföra IRP och returnera STATUS_SUCCESS.
När du bearbetar en IRP_MJ_CLEANUP begäran kan en drivrutin ta emot ytterligare begäranden, till exempel IRP_MJ_READ eller IRP_MJ_WRITE. Därför måste en drivrutin som måste frigöra resurser också synkronisera körningen av sin DispatchCleanup-rutin med andra sändningsrutiner, till exempel DispatchRead och DispatchWrite.