windows-nt/Source/XPSP1/NT/net/sfm/afp/server/scavengr.h
2020-09-26 16:20:57 +08:00

103 lines
2 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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_