zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

processthreadsapi.h (16830B) - Raw


      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
     14 extern "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__
    132 DEFINE_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