master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5#ifndef _PROCESSTHREADSAPI_H_
  6#define _PROCESSTHREADSAPI_H_
  7
  8#include <apiset.h>
  9#include <apisetcconv.h>
 10#include <minwindef.h>
 11#include <minwinbase.h>
 12
 13#ifdef __cplusplus
 14extern "C" {
 15#endif
 16
 17#ifndef FLS_OUT_OF_INDEXES
 18#define FLS_OUT_OF_INDEXES ((DWORD)0xffffffff)
 19#endif
 20
 21#define TLS_OUT_OF_INDEXES ((DWORD)0xffffffff)
 22
 23#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10
 24  WINBASEAPI HANDLE WINAPI OpenProcess (DWORD dwDesiredAccess, WINBOOL bInheritHandle, DWORD dwProcessId);
 25
 26  WINBASEAPI DWORD WINAPI QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
 27  WINBASEAPI WINBOOL WINAPI GetProcessTimes (HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
 28  WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitProcess (UINT uExitCode);
 29  WINBASEAPI WINBOOL WINAPI GetExitCodeProcess (HANDLE hProcess, LPDWORD lpExitCode);
 30  WINBASEAPI WINBOOL WINAPI SwitchToThread (VOID);
 31  WINBASEAPI HANDLE WINAPI OpenThread (DWORD dwDesiredAccess, WINBOOL bInheritHandle, DWORD dwThreadId);
 32  WINBASEAPI WINBOOL WINAPI SetThreadPriorityBoost (HANDLE hThread, WINBOOL bDisablePriorityBoost);
 33  WINBASEAPI WINBOOL WINAPI GetThreadPriorityBoost (HANDLE hThread, PBOOL pDisablePriorityBoost);
 34  WINADVAPI WINBOOL APIENTRY SetThreadToken (PHANDLE Thread, HANDLE Token);
 35  WINADVAPI WINBOOL WINAPI OpenProcessToken (HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle);
 36  WINADVAPI WINBOOL WINAPI OpenThreadToken (HANDLE ThreadHandle, DWORD DesiredAccess, WINBOOL OpenAsSelf, PHANDLE TokenHandle);
 37  WINBASEAPI WINBOOL WINAPI SetPriorityClass (HANDLE hProcess, DWORD dwPriorityClass);
 38  WINBASEAPI DWORD WINAPI GetPriorityClass (HANDLE hProcess);
 39  WINBASEAPI DWORD WINAPI GetProcessId (HANDLE Process);
 40  WINBASEAPI DWORD WINAPI GetThreadId (HANDLE Thread);
 41  WINBASEAPI WINBOOL WINAPI GetThreadContext (HANDLE hThread, LPCONTEXT lpContext);
 42  WINBASEAPI WINBOOL WINAPI FlushInstructionCache (HANDLE hProcess, LPCVOID lpBaseAddress, SIZE_T dwSize);
 43  WINBASEAPI WINBOOL WINAPI GetThreadTimes (HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
 44  WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber (VOID);
 45
 46#endif /* WINAPI_PARTITION_DESKTOP */
 47
 48#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
 49  WINBASEAPI WINBOOL WINAPI TerminateProcess (HANDLE hProcess, UINT uExitCode);
 50
 51  typedef struct _STARTUPINFOA {
 52    DWORD cb;
 53    LPSTR lpReserved;
 54    LPSTR lpDesktop;
 55    LPSTR lpTitle;
 56    DWORD dwX;
 57    DWORD dwY;
 58    DWORD dwXSize;
 59    DWORD dwYSize;
 60    DWORD dwXCountChars;
 61    DWORD dwYCountChars;
 62    DWORD dwFillAttribute;
 63    DWORD dwFlags;
 64    WORD wShowWindow;
 65    WORD cbReserved2;
 66    LPBYTE lpReserved2;
 67    HANDLE hStdInput;
 68    HANDLE hStdOutput;
 69    HANDLE hStdError;
 70  } STARTUPINFOA, *LPSTARTUPINFOA;
 71
 72  typedef struct _STARTUPINFOW {
 73    DWORD cb;
 74    LPWSTR lpReserved;
 75    LPWSTR lpDesktop;
 76    LPWSTR lpTitle;
 77    DWORD dwX;
 78    DWORD dwY;
 79    DWORD dwXSize;
 80    DWORD dwYSize;
 81    DWORD dwXCountChars;
 82    DWORD dwYCountChars;
 83    DWORD dwFillAttribute;
 84    DWORD dwFlags;
 85    WORD wShowWindow;
 86    WORD cbReserved2;
 87    LPBYTE lpReserved2;
 88    HANDLE hStdInput;
 89    HANDLE hStdOutput;
 90    HANDLE hStdError;
 91  } STARTUPINFOW, *LPSTARTUPINFOW;
 92
 93  __MINGW_TYPEDEF_AW(STARTUPINFO)
 94  __MINGW_TYPEDEF_AW(LPSTARTUPINFO)
 95
 96  typedef struct _PROCESS_INFORMATION {
 97    HANDLE hProcess;
 98    HANDLE hThread;
 99    DWORD dwProcessId;
100    DWORD dwThreadId;
101  } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
102
103  typedef enum _PROCESS_INFORMATION_CLASS {
104    ProcessMemoryPriority,
105    ProcessMemoryExhaustionInfo,
106    ProcessAppMemoryInfo,
107    ProcessInPrivateInfo,
108    ProcessPowerThrottling,
109    ProcessReservedValue1,
110    ProcessTelemetryCoverageInfo,
111    ProcessProtectionLevelInfo,
112    ProcessLeapSecondInfo,
113    ProcessMachineTypeInfo,
114    ProcessOverrideSubsequentPrefetchParameter,
115    ProcessMaxOverridePrefetchParameter,
116    ProcessInformationClassMax
117  } PROCESS_INFORMATION_CLASS;
118
119  typedef struct _APP_MEMORY_INFORMATION {
120    ULONG64 AvailableCommit;
121    ULONG64 PrivateCommitUsage;
122    ULONG64 PeakPrivateCommitUsage;
123    ULONG64 TotalCommitUsage;
124  } APP_MEMORY_INFORMATION, *PAPP_MEMORY_INFORMATION;
125
126  typedef enum _MACHINE_ATTRIBUTES {
127    UserEnabled = 0x00000001,
128    KernelEnabled = 0x00000002,
129    Wow64Container = 0x00000004
130  } MACHINE_ATTRIBUTES;
131#ifndef __WIDL__
132DEFINE_ENUM_FLAG_OPERATORS(MACHINE_ATTRIBUTES);
133#endif
134
135  typedef struct _PROCESS_MACHINE_INFORMATION {
136    USHORT ProcessMachine;
137    USHORT Res0;
138    MACHINE_ATTRIBUTES MachineAttributes;
139  } PROCESS_MACHINE_INFORMATION;
140
141  typedef struct OVERRIDE_PREFETCH_PARAMETER {
142    UINT32 Value;
143  } OVERRIDE_PREFETCH_PARAMETER;
144
145#define PME_CURRENT_VERSION 1
146
147  typedef enum _PROCESS_MEMORY_EXHAUSTION_TYPE {
148    PMETypeFailFastOnCommitFailure,
149    PMETypeMax
150  } PROCESS_MEMORY_EXHAUSTION_TYPE, *PPROCESS_MEMORY_EXHAUSTION_TYPE;
151
152#define PME_FAILFAST_ON_COMMIT_FAIL_DISABLE 0x0
153#define PME_FAILFAST_ON_COMMIT_FAIL_ENABLE 0x1
154
155  typedef struct _PROCESS_MEMORY_EXHAUSTION_INFO {
156    USHORT Version;
157    USHORT Reserved;
158    PROCESS_MEMORY_EXHAUSTION_TYPE Type;
159    ULONG_PTR Value;
160  } PROCESS_MEMORY_EXHAUSTION_INFO, *PPROCESS_MEMORY_EXHAUSTION_INFO;
161
162#define PROCESS_POWER_THROTTLING_CURRENT_VERSION 1
163
164#define PROCESS_POWER_THROTTLING_EXECUTION_SPEED 0x1
165#define PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION 0x4
166
167#define PROCESS_POWER_THROTTLING_VALID_FLAGS (PROCESS_POWER_THROTTLING_EXECUTION_SPEED | PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION)
168
169  typedef struct _PROCESS_POWER_THROTTLING_STATE {
170    ULONG Version;
171    ULONG ControlMask;
172    ULONG StateMask;
173  } PROCESS_POWER_THROTTLING_STATE, *PPROCESS_POWER_THROTTLING_STATE;
174
175  typedef struct PROCESS_PROTECTION_LEVEL_INFORMATION {
176    DWORD ProtectionLevel;
177  } PROCESS_PROTECTION_LEVEL_INFORMATION;
178
179#define PROCESS_LEAP_SECOND_INFO_FLAG_ENABLE_SIXTY_SECOND 0x1
180#define PROCESS_LEAP_SECOND_INFO_VALID_FLAGS PROCESS_LEAP_SECOND_INFO_FLAG_ENABLE_SIXTY_SECOND
181
182  typedef struct _PROCESS_LEAP_SECOND_INFO {
183    ULONG Flags;
184    ULONG Reserved;
185  } PROCESS_LEAP_SECOND_INFO, *PPROCESS_LEAP_SECOND_INFO;
186
187#if _WIN32_WINNT >= 0x0602
188  WINBASEAPI WINBOOL WINAPI GetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcessInformationSize);
189  WINBASEAPI WINBOOL WINAPI SetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcessInformationSize);
190#endif
191
192#if _WIN32_WINNT >= _WIN32_WINNT_WIN10
193  WINBASEAPI WINBOOL WINAPI GetSystemCpuSetInformation (PSYSTEM_CPU_SET_INFORMATION Information, ULONG BufferLength, PULONG ReturnedLength, HANDLE Process, ULONG Flags);
194  WINBASEAPI WINBOOL WINAPI GetProcessDefaultCpuSets (HANDLE Process, PULONG CpuSetIds, ULONG CpuSetIdCount, PULONG RequiredIdCount);
195  WINBASEAPI WINBOOL WINAPI SetProcessDefaultCpuSets (HANDLE Process, const ULONG *CpuSetIds, ULONG CpuSetIdCount);
196  WINBASEAPI WINBOOL WINAPI GetThreadSelectedCpuSets (HANDLE Thread, PULONG CpuSetIds, ULONG CpuSetIdCount, PULONG RequiredIdCount);
197  WINBASEAPI WINBOOL WINAPI SetThreadSelectedCpuSets (HANDLE Thread, const ULONG *CpuSetIds, ULONG CpuSetIdCount);
198  HRESULT WINAPI GetMachineTypeAttributes (USHORT Machine, MACHINE_ATTRIBUTES *MachineTypeAttributes);
199#endif
200
201#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_FE
202  WINBASEAPI WINBOOL WINAPI GetProcessDefaultCpuSetMasks (HANDLE Process, PGROUP_AFFINITY CpuSetMasks, USHORT CpuSetMaskCount, PUSHORT RequiredMaskCount);
203  WINBASEAPI WINBOOL WINAPI SetProcessDefaultCpuSetMasks (HANDLE Process, PGROUP_AFFINITY CpuSetMasks, USHORT CpuSetMaskCount);
204  WINBASEAPI WINBOOL WINAPI GetThreadSelectedCpuSetMasks (HANDLE Thread, PGROUP_AFFINITY CpuSetMasks, USHORT CpuSetMaskCount, PUSHORT RequiredMaskCount);
205  WINBASEAPI WINBOOL WINAPI SetThreadSelectedCpuSetMasks (HANDLE Thread, PGROUP_AFFINITY CpuSetMasks, USHORT CpuSetMaskCount);
206#endif
207
208  typedef struct _PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST;
209
210#endif /* WINAPI_PARTITION_APP */
211
212#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
213
214  WINBASEAPI HANDLE WINAPI CreateRemoteThread (HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
215  WINBASEAPI WINBOOL WINAPI TerminateThread (HANDLE hThread, DWORD dwExitCode);
216  WINBASEAPI WINBOOL WINAPI SetProcessShutdownParameters (DWORD dwLevel, DWORD dwFlags);
217  WINBASEAPI DWORD WINAPI GetProcessVersion (DWORD ProcessId);
218  WINBASEAPI VOID WINAPI GetStartupInfoW (LPSTARTUPINFOW lpStartupInfo);
219  WINBASEAPI WINBOOL WINAPI SetThreadStackGuarantee (PULONG StackSizeInBytes);
220  WINBASEAPI WINBOOL WINAPI ProcessIdToSessionId (DWORD dwProcessId, DWORD *pSessionId);
221  WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx (HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, LPDWORD lpThreadId);
222  WINBASEAPI WINBOOL WINAPI SetThreadContext (HANDLE hThread, CONST CONTEXT *lpContext);
223  WINBASEAPI WINBOOL WINAPI GetProcessHandleCount (HANDLE hProcess, PDWORD pdwHandleCount);
224
225#ifdef UNICODE
226#define GetStartupInfo GetStartupInfoW
227#endif
228
229#ifndef _APISET_EXPORTS_FILTER
230  WINADVAPI WINBOOL WINAPI CreateProcessAsUserW (HANDLE hToken, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, WINBOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
231
232#ifdef UNICODE
233#define CreateProcessAsUser CreateProcessAsUserW
234#endif
235#endif
236
237#if _WIN32_WINNT >= 0x0600
238#define PROCESS_AFFINITY_ENABLE_AUTO_UPDATE __MSABI_LONG(0x1U)
239#define PROC_THREAD_ATTRIBUTE_REPLACE_VALUE 0x00000001
240
241  WINBASEAPI DWORD WINAPI GetProcessIdOfThread (HANDLE Thread);
242  WINBASEAPI WINBOOL WINAPI InitializeProcThreadAttributeList (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, DWORD dwAttributeCount, DWORD dwFlags, PSIZE_T lpSize);
243  WINBASEAPI VOID WINAPI DeleteProcThreadAttributeList (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList);
244  WINBASEAPI WINBOOL WINAPI SetProcessAffinityUpdateMode (HANDLE hProcess, DWORD dwFlags);
245  WINBASEAPI WINBOOL WINAPI QueryProcessAffinityUpdateMode (HANDLE hProcess, LPDWORD lpdwFlags);
246  WINBASEAPI WINBOOL WINAPI UpdateProcThreadAttribute (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, DWORD dwFlags, DWORD_PTR Attribute, PVOID lpValue, SIZE_T cbSize, PVOID lpPreviousValue, PSIZE_T lpReturnSize);
247#endif
248#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
249  WINBASEAPI WINBOOL WINAPI SetProcessMitigationPolicy (PROCESS_MITIGATION_POLICY MitigationPolicy, PVOID lpBuffer, SIZE_T dwLength);
250
251  FORCEINLINE HANDLE GetCurrentProcessToken (VOID)
252  {
253    return (HANDLE)(LONG_PTR) (-4);
254  }
255  FORCEINLINE HANDLE GetCurrentThreadToken (VOID)
256  {
257    return (HANDLE)(LONG_PTR) (-5);
258  }
259  FORCEINLINE HANDLE GetCurrentThreadEffectiveToken (VOID)
260  {
261    return (HANDLE)(LONG_PTR) (-6);
262  }
263
264  typedef struct _MEMORY_PRIORITY_INFORMATION {
265    ULONG MemoryPriority;
266  } MEMORY_PRIORITY_INFORMATION, *PMEMORY_PRIORITY_INFORMATION;
267#endif
268
269#define MEMORY_PRIORITY_VERY_LOW      1
270#define MEMORY_PRIORITY_LOW           2
271#define MEMORY_PRIORITY_MEDIUM        3
272#define MEMORY_PRIORITY_BELOW_NORMAL  4
273#define MEMORY_PRIORITY_NORMAL        5
274
275#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
276  WINBASEAPI WINBOOL WINAPI IsProcessCritical (HANDLE hProcess, PBOOL Critical);
277#endif
278
279#if _WIN32_WINNT >= _WIN32_WINNT_WIN10
280  WINBASEAPI WINBOOL WINAPI SetProtectedPolicy (LPCGUID PolicyGuid, ULONG_PTR PolicyValue, PULONG_PTR OldPolicyValue);
281  WINBASEAPI WINBOOL WINAPI QueryProtectedPolicy (LPCGUID PolicyGuid, PULONG_PTR PolicyValue);
282#endif
283
284#endif /* WINAPI_PARTITION_DESKTOP */
285
286#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
287#ifndef _APISET_EXPORTS_FILTER
288  WINBASEAPI WINBOOL WINAPI CreateProcessA (LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, WINBOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
289  WINBASEAPI WINBOOL WINAPI CreateProcessW (LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, WINBOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
290#define CreateProcess __MINGW_NAME_AW(CreateProcess)
291
292#if _WIN32_WINNT >= 0x0601
293  WINBASEAPI WINBOOL WINAPI GetThreadIdealProcessorEx (HANDLE hThread, PPROCESSOR_NUMBER lpIdealProcessor);
294  WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx (PPROCESSOR_NUMBER ProcNumber);
295#endif
296#if _WIN32_WINNT >= 0x0602
297  WINBASEAPI VOID WINAPI GetCurrentThreadStackLimits (PULONG_PTR LowLimit, PULONG_PTR HighLimit);
298  WINBASEAPI WINBOOL WINAPI GetProcessMitigationPolicy (HANDLE hProcess, PROCESS_MITIGATION_POLICY MitigationPolicy, PVOID lpBuffer, SIZE_T dwLength);
299#endif
300#endif
301
302  WINBASEAPI HANDLE WINAPI GetCurrentProcess (VOID);
303  WINBASEAPI DWORD WINAPI GetCurrentProcessId (VOID);
304  WINBASEAPI HANDLE WINAPI GetCurrentThread (VOID);
305  WINBASEAPI DWORD WINAPI GetCurrentThreadId (VOID);
306  WINBOOL WINAPI IsProcessorFeaturePresent (DWORD ProcessorFeature);
307#if _WIN32_WINNT >= 0x0600
308  WINBASEAPI VOID WINAPI FlushProcessWriteBuffers (VOID);
309#endif
310  WINBASEAPI HANDLE WINAPI CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
311  WINBASEAPI WINBOOL WINAPI SetThreadPriority (HANDLE hThread, int nPriority);
312  WINBASEAPI int WINAPI GetThreadPriority (HANDLE hThread);
313  WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitThread (DWORD dwExitCode);
314  WINBASEAPI WINBOOL WINAPI GetExitCodeThread (HANDLE hThread, LPDWORD lpExitCode);
315#if _WIN32_WINNT >= 0x0A00
316  WINBASEAPI DWORD WINAPI QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
317  WINBASEAPI WINBOOL WINAPI SwitchToThread (VOID);
318  WINBASEAPI LPVOID WINAPI TlsGetValue2(DWORD dwTlsIndex);
319#endif
320  WINBASEAPI DWORD WINAPI SuspendThread (HANDLE hThread);
321  WINBASEAPI DWORD WINAPI ResumeThread (HANDLE hThread);
322  WINBASEAPI DWORD WINAPI TlsAlloc (VOID);
323  WINBASEAPI LPVOID WINAPI TlsGetValue (DWORD dwTlsIndex);
324  WINBASEAPI WINBOOL WINAPI TlsSetValue (DWORD dwTlsIndex, LPVOID lpTlsValue);
325  WINBASEAPI WINBOOL WINAPI TlsFree (DWORD dwTlsIndex);
326#if _WIN32_WINNT >= 0x0601
327  WINBASEAPI WINBOOL WINAPI SetThreadIdealProcessorEx (HANDLE hThread, PPROCESSOR_NUMBER lpIdealProcessor, PPROCESSOR_NUMBER lpPreviousIdealProcessor);
328#endif
329#if NTDDI_VERSION >= NTDDI_WIN10_VB
330  WINBASEAPI WINBOOL WINAPI SetProcessDynamicEHContinuationTargets (HANDLE Process, USHORT NumberOfTargets, PPROCESS_DYNAMIC_EH_CONTINUATION_TARGET Targets);
331#endif
332
333#if NTDDI_VERSION >= NTDDI_WIN10_MN
334  typedef enum _QUEUE_USER_APC_FLAGS {
335    QUEUE_USER_APC_FLAGS_NONE = 0x00000000,
336    QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC = 0x00000001,
337    QUEUE_USER_APC_CALLBACK_DATA_CONTEXT = 0x00010000
338  } QUEUE_USER_APC_FLAGS;
339
340  typedef struct _APC_CALLBACK_DATA {
341    ULONG_PTR Parameter;
342    PCONTEXT ContextRecord;
343    ULONG_PTR Reserved0;
344    ULONG_PTR Reserved1;
345  } APC_CALLBACK_DATA, *PAPC_CALLBACK_DATA;
346
347  WINBASEAPI WINBOOL WINAPI QueueUserAPC2 (PAPCFUNC ApcRoutine, HANDLE Thread, ULONG_PTR Data, QUEUE_USER_APC_FLAGS Flags);
348#endif
349
350#if NTDDI_VERSION >= NTDDI_WIN10_FE
351  WINBASEAPI WINBOOL WINAPI SetProcessDynamicEnforcedCetCompatibleRanges (HANDLE Process, USHORT NumberOfRanges, PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE Ranges);
352#endif
353
354#define THREAD_POWER_THROTTLING_CURRENT_VERSION 1
355#define THREAD_POWER_THROTTLING_EXECUTION_SPEED 0x1
356#define THREAD_POWER_THROTTLING_VALID_FLAGS (THREAD_POWER_THROTTLING_EXECUTION_SPEED)
357
358  typedef struct _THREAD_POWER_THROTTLING_STATE {
359    ULONG Version;
360    ULONG ControlMask;
361    ULONG StateMask;
362  } THREAD_POWER_THROTTLING_STATE;
363
364#endif /* WINAPI_PARTITION_APP */
365
366  WINBASEAPI HRESULT WINAPI SetThreadDescription (HANDLE hThread, PCWSTR lpThreadDescription);
367  WINBASEAPI HRESULT WINAPI GetThreadDescription (HANDLE hThread, PWSTR *ppszThreadDescription);
368
369#ifdef __cplusplus
370}
371#endif
372#endif