Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az illesztőprogram DispatchCleanup rutinja kezeli az IRP_MJ_CLEANUP I/O-függvény kódhoz tartozó IRP-ket.
Az illesztőprogramok a DispatchCleanup rutin használatával végezhetnek minden olyan tisztítási műveletet, amely a fájlobjektum összes leírójának bezárása után szükséges. Vegye figyelembe, hogy a DispatchCleanup meghívása a végső leírót lezáró folyamat folyamatkörnyezetében történik; ez a folyamat eltérhet attól a folyamattól, amely először megnyitotta a leírót. (Ez a különbség általában azért fordul elő, mert egy másik folyamat a DuplicateHandle felhasználói módú rutint használja a folyamatleírók duplikálásához.) Az eredeti folyamatkörnyezetben tisztítást végző illesztőprogramok a PsSetCreateProcessNotifyRoutine rutin használatával regisztrálhatnak egy visszahívási rutint erre a célra, de ne feledje, hogy az ilyen visszahívások korlátozott rendszererőforrások.
A DispatchCleanup rutinnak általában a következő módon kell feldolgoznia egy IRP_MJ_CLEANUP kérést az eszközsoron (vagy az illesztőprogram belső integrációs üzenetsorában) található minden olyan IRP esetében, amely a céleszköz-objektumhoz tartozik, és a fájlobjektumhoz van társítva:
Az IoSetCancelRoutine hívásával állítsa a Cancel rutin mutatót NULL-ra.
Törölje a céleszköz-objektum várólistáján jelenleg szereplő összes IRP-t, ha a várólistára helyezett IRP illesztőprogramjának I/O-veremhelyén megadott fájlobjektum megegyezik a IRP_MJ_CLEANUP kérés I/O-veremhelyén kapott fájlobjektummal.
Az IoCompleteRequest meghívásával fejezze be az IRP-t, és adja vissza STATUS_SUCCESS.
A IRP_MJ_CLEANUP kérés feldolgozása során az illesztőprogramok további kéréseket kaphatnak, például IRP_MJ_READ vagy IRP_MJ_WRITE. Ezért az erőforrásokat felszabadító illesztőprogramnak szinkronizálnia kell a DispatchCleanup rutin végrehajtását más diszpécserprogramokkal, például a DispatchRead és a DispatchWrite rutinokkal.