/* Copyright (c) 1992 Microsoft Corporation Module Name: scavengr.h Abstract: This file defines the scavenger thread interface. Author: Jameel Hyder (microsoft!jameelh) Revision History: 25 Jun 1992 Initial Version Notes: Tab stop: 4 --*/ #ifndef _SCAVENGER_ #define _SCAVENGER_ typedef AFPSTATUS (FASTCALL *SCAVENGER_ROUTINE)(IN PVOID Parameter); extern NTSTATUS AfpScavengerInit( VOID ); extern VOID AfpScavengerDeInit( VOID ); extern NTSTATUS AfpScavengerScheduleEvent( IN SCAVENGER_ROUTINE Worker, // Routine to invoke when time expires IN PVOID pContext, // Context to pass to the routine IN LONG DeltaTime, // Schedule after this much time IN BOOLEAN fQueue // If TRUE, then worker must be queued ); extern BOOLEAN AfpScavengerKillEvent( IN SCAVENGER_ROUTINE Worker, // Routine that was scheduled IN PVOID pContext // Context ); extern VOID AfpScavengerFlushAndStop( VOID ); #ifdef _SCAVENGER_LOCALS // Keep this at a ONE second level. Most clients should be using close to // 10 ticks or so. #define AFP_SCAVENGER_TIMER_TICK -1*NUM_100ns_PER_SECOND typedef struct _ScavengerList { struct _ScavengerList * scvgr_Next; // Link to next LONG scvgr_AbsTime; // Absolute time LONG scvgr_RelDelta; // Relative to the previous entry BOOLEAN scvgr_fQueue; // If TRUE, should always be queued SCAVENGER_ROUTINE scvgr_Worker; // Real Worker PVOID scvgr_Context; // Real context WORK_ITEM scvgr_WorkItem; // Used for queueing to worker thread } SCAVENGERLIST, *PSCAVENGERLIST; LOCAL KTIMER afpScavengerTimer = { 0 }; LOCAL KDPC afpScavengerDpc = { 0 }; LOCAL BOOLEAN afpScavengerStopped = False; LOCAL PSCAVENGERLIST afpScavengerList = NULL; LOCAL AFP_SPIN_LOCK afpScavengerLock = { 0 }; LOCAL VOID afpScavengerDpcRoutine( IN PKDPC pKDpc, IN PVOID pContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ); LOCAL VOID FASTCALL afpScavengerWorker( IN PSCAVENGERLIST pList ); #endif // _SCAVENGER_LOCALS #endif // _SCAVENGER_