mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.0 KiB
103 lines
2.0 KiB
/*
|
|
|
|
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_
|
|
|
|
|