mirror of
https://github.com/SafeBreach-Labs/PoolParty
synced 2026-06-06 16:44:29 +00:00
125 lines
3.5 KiB
C++
125 lines
3.5 KiB
C++
#pragma once
|
|
|
|
#include <Windows.h>
|
|
|
|
#include "Native.hpp"
|
|
|
|
|
|
#define WORKER_FACTORY_RELEASE_WORKER 0x0001
|
|
#define WORKER_FACTORY_WAIT 0x0002
|
|
#define WORKER_FACTORY_SET_INFORMATION 0x0004
|
|
#define WORKER_FACTORY_QUERY_INFORMATION 0x0008
|
|
#define WORKER_FACTORY_READY_WORKER 0x0010
|
|
#define WORKER_FACTORY_SHUTDOWN 0x0020
|
|
|
|
#define WORKER_FACTORY_ALL_ACCESS ( \
|
|
STANDARD_RIGHTS_REQUIRED | \
|
|
WORKER_FACTORY_RELEASE_WORKER | \
|
|
WORKER_FACTORY_WAIT | \
|
|
WORKER_FACTORY_SET_INFORMATION | \
|
|
WORKER_FACTORY_QUERY_INFORMATION | \
|
|
WORKER_FACTORY_READY_WORKER | \
|
|
WORKER_FACTORY_SHUTDOWN \
|
|
)
|
|
|
|
// -----------//
|
|
// Structures //
|
|
// ----------//
|
|
|
|
typedef struct _WORKER_FACTORY_BASIC_INFORMATION
|
|
{
|
|
LARGE_INTEGER Timeout;
|
|
LARGE_INTEGER RetryTimeout;
|
|
LARGE_INTEGER IdleTimeout;
|
|
BOOLEAN Paused;
|
|
BOOLEAN TimerSet;
|
|
BOOLEAN QueuedToExWorker;
|
|
BOOLEAN MayCreate;
|
|
BOOLEAN CreateInProgress;
|
|
BOOLEAN InsertedIntoQueue;
|
|
BOOLEAN Shutdown;
|
|
ULONG BindingCount;
|
|
ULONG ThreadMinimum;
|
|
ULONG ThreadMaximum;
|
|
ULONG PendingWorkerCount;
|
|
ULONG WaitingWorkerCount;
|
|
ULONG TotalWorkerCount;
|
|
ULONG ReleaseCount;
|
|
LONGLONG InfiniteWaitGoal;
|
|
PVOID StartRoutine;
|
|
PVOID StartParameter;
|
|
HANDLE ProcessId;
|
|
SIZE_T StackReserve;
|
|
SIZE_T StackCommit;
|
|
NTSTATUS LastThreadCreationStatus;
|
|
} WORKER_FACTORY_BASIC_INFORMATION, * PWORKER_FACTORY_BASIC_INFORMATION;
|
|
|
|
|
|
// -------------//
|
|
// Enumerations //
|
|
// ------------//
|
|
|
|
typedef enum _SET_WORKERFACTORYINFOCLASS
|
|
{
|
|
WorkerFactoryTimeout = 0,
|
|
WorkerFactoryRetryTimeout = 1,
|
|
WorkerFactoryIdleTimeout = 2,
|
|
WorkerFactoryBindingCount = 3,
|
|
WorkerFactoryThreadMinimum = 4,
|
|
WorkerFactoryThreadMaximum = 5,
|
|
WorkerFactoryPaused = 6,
|
|
WorkerFactoryAdjustThreadGoal = 8,
|
|
WorkerFactoryCallbackType = 9,
|
|
WorkerFactoryStackInformation = 10,
|
|
WorkerFactoryThreadBasePriority = 11,
|
|
WorkerFactoryTimeoutWaiters = 12,
|
|
WorkerFactoryFlags = 13,
|
|
WorkerFactoryThreadSoftMaximum = 14,
|
|
WorkerFactoryMaxInfoClass = 15 /* Not implemented */
|
|
} SET_WORKERFACTORYINFOCLASS, * PSET_WORKERFACTORYINFOCLASS;
|
|
|
|
typedef enum _QUERY_WORKERFACTORYINFOCLASS
|
|
{
|
|
WorkerFactoryBasicInformation = 7,
|
|
} QUERY_WORKERFACTORYINFOCLASS, * PQUERY_WORKERFACTORYINFOCLASS;
|
|
|
|
// ------------------------//
|
|
// System call definitions //
|
|
// ------------------------//
|
|
|
|
EXTERN_C
|
|
NTSTATUS NTAPI NtQueryInformationWorkerFactory(
|
|
_In_ HANDLE WorkerFactoryHandle,
|
|
_In_ QUERY_WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
|
|
_In_reads_bytes_(WorkerFactoryInformationLength) PVOID WorkerFactoryInformation,
|
|
_In_ ULONG WorkerFactoryInformationLength,
|
|
_Out_opt_ PULONG ReturnLength
|
|
);
|
|
|
|
EXTERN_C
|
|
NTSTATUS NTAPI NtSetInformationWorkerFactory(
|
|
_In_ HANDLE WorkerFactoryHandle,
|
|
_In_ SET_WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
|
|
_In_reads_bytes_(WorkerFactoryInformationLength) PVOID WorkerFactoryInformation,
|
|
_In_ ULONG WorkerFactoryInformationLength
|
|
);
|
|
|
|
// ------------//
|
|
// Proto types //
|
|
// ------------//
|
|
|
|
void w_NtQueryInformationWorkerFactory(
|
|
HANDLE hWorkerFactory,
|
|
QUERY_WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
|
|
PVOID WorkerFactoryInformation,
|
|
ULONG WorkerFactoryInformationLength,
|
|
PULONG ReturnLength
|
|
);
|
|
|
|
void w_NtSetInformationWorkerFactory(
|
|
HANDLE hWorkerFactory,
|
|
SET_WORKERFACTORYINFOCLASS WorkerFactoryInformationClass,
|
|
PVOID WorkerFactoryInformation,
|
|
ULONG WorkerFactoryInformationLength
|
|
);
|