109 lines
2.1 KiB
C
109 lines
2.1 KiB
C
#ifndef _PH_WORKQUEUE_H
|
|
#define _PH_WORKQUEUE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if defined(DEBUG)
|
|
extern PPH_LIST PhDbgWorkQueueList;
|
|
extern PH_QUEUED_LOCK PhDbgWorkQueueListLock;
|
|
#endif
|
|
|
|
typedef struct _PH_WORK_QUEUE
|
|
{
|
|
PH_RUNDOWN_PROTECT RundownProtect;
|
|
BOOLEAN Terminating;
|
|
|
|
LIST_ENTRY QueueListHead;
|
|
PH_QUEUED_LOCK QueueLock;
|
|
PH_CONDITION QueueEmptyCondition;
|
|
|
|
ULONG MaximumThreads;
|
|
ULONG MinimumThreads;
|
|
ULONG NoWorkTimeout;
|
|
|
|
PH_QUEUED_LOCK StateLock;
|
|
HANDLE SemaphoreHandle;
|
|
ULONG CurrentThreads;
|
|
ULONG BusyCount;
|
|
} PH_WORK_QUEUE, *PPH_WORK_QUEUE;
|
|
|
|
typedef VOID (NTAPI *PPH_WORK_QUEUE_ITEM_DELETE_FUNCTION)(
|
|
_In_ PUSER_THREAD_START_ROUTINE Function,
|
|
_In_ PVOID Context
|
|
);
|
|
|
|
typedef struct _PH_WORK_QUEUE_ENVIRONMENT
|
|
{
|
|
LONG BasePriority : 6; // Base priority increment
|
|
ULONG IoPriority : 3; // I/O priority hint
|
|
ULONG PagePriority : 3; // Page/memory priority
|
|
ULONG ForceUpdate : 1; // Always set priorities regardless of cached values
|
|
ULONG SpareBits : 19;
|
|
} PH_WORK_QUEUE_ENVIRONMENT, *PPH_WORK_QUEUE_ENVIRONMENT;
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhInitializeWorkQueue(
|
|
_Out_ PPH_WORK_QUEUE WorkQueue,
|
|
_In_ ULONG MinimumThreads,
|
|
_In_ ULONG MaximumThreads,
|
|
_In_ ULONG NoWorkTimeout
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhDeleteWorkQueue(
|
|
_Inout_ PPH_WORK_QUEUE WorkQueue
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhWaitForWorkQueue(
|
|
_Inout_ PPH_WORK_QUEUE WorkQueue
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhQueueItemWorkQueue(
|
|
_Inout_ PPH_WORK_QUEUE WorkQueue,
|
|
_In_ PUSER_THREAD_START_ROUTINE Function,
|
|
_In_opt_ PVOID Context
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhQueueItemWorkQueueEx(
|
|
_Inout_ PPH_WORK_QUEUE WorkQueue,
|
|
_In_ PUSER_THREAD_START_ROUTINE Function,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ PPH_WORK_QUEUE_ITEM_DELETE_FUNCTION DeleteFunction,
|
|
_In_opt_ PPH_WORK_QUEUE_ENVIRONMENT Environment
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhInitializeWorkQueueEnvironment(
|
|
_Out_ PPH_WORK_QUEUE_ENVIRONMENT Environment
|
|
);
|
|
|
|
PHLIBAPI
|
|
PPH_WORK_QUEUE
|
|
NTAPI
|
|
PhGetGlobalWorkQueue(
|
|
VOID
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|