processthreadsapi.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  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. #include <apiset.h>
  8. #include <apisetcconv.h>
  9. #include <minwindef.h>
  10. #include <minwinbase.h>
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #ifndef FLS_OUT_OF_INDEXES
  15. #define FLS_OUT_OF_INDEXES ((DWORD)0xffffffff)
  16. #endif
  17. #define TLS_OUT_OF_INDEXES ((DWORD)0xffffffff)
  18. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10
  19. WINBASEAPI HANDLE WINAPI OpenProcess (DWORD dwDesiredAccess, WINBOOL bInheritHandle, DWORD dwProcessId);
  20. WINBASEAPI DWORD WINAPI QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
  21. WINBASEAPI WINBOOL WINAPI GetProcessTimes (HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
  22. WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitProcess (UINT uExitCode);
  23. WINBASEAPI WINBOOL WINAPI GetExitCodeProcess (HANDLE hProcess, LPDWORD lpExitCode);
  24. WINBASEAPI WINBOOL WINAPI SwitchToThread (VOID);
  25. WINBASEAPI HANDLE WINAPI OpenThread (DWORD dwDesiredAccess, WINBOOL bInheritHandle, DWORD dwThreadId);
  26. WINBASEAPI WINBOOL WINAPI SetThreadPriorityBoost (HANDLE hThread, WINBOOL bDisablePriorityBoost);
  27. WINBASEAPI WINBOOL WINAPI GetThreadPriorityBoost (HANDLE hThread, PBOOL pDisablePriorityBoost);
  28. WINADVAPI WINBOOL APIENTRY SetThreadToken (PHANDLE Thread, HANDLE Token);
  29. WINADVAPI WINBOOL WINAPI OpenProcessToken (HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle);
  30. WINADVAPI WINBOOL WINAPI OpenThreadToken (HANDLE ThreadHandle, DWORD DesiredAccess, WINBOOL OpenAsSelf, PHANDLE TokenHandle);
  31. WINBASEAPI WINBOOL WINAPI SetPriorityClass (HANDLE hProcess, DWORD dwPriorityClass);
  32. WINBASEAPI DWORD WINAPI GetPriorityClass (HANDLE hProcess);
  33. WINBASEAPI DWORD WINAPI GetProcessId (HANDLE Process);
  34. WINBASEAPI DWORD WINAPI GetThreadId (HANDLE Thread);
  35. WINBASEAPI WINBOOL WINAPI GetThreadContext (HANDLE hThread, LPCONTEXT lpContext);
  36. WINBASEAPI WINBOOL WINAPI FlushInstructionCache (HANDLE hProcess, LPCVOID lpBaseAddress, SIZE_T dwSize);
  37. WINBASEAPI WINBOOL WINAPI GetThreadTimes (HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
  38. WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber (VOID);
  39. #endif
  40. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  41. WINBASEAPI WINBOOL WINAPI TerminateProcess (HANDLE hProcess, UINT uExitCode);
  42. typedef struct _STARTUPINFOA {
  43. DWORD cb;
  44. LPSTR lpReserved;
  45. LPSTR lpDesktop;
  46. LPSTR lpTitle;
  47. DWORD dwX;
  48. DWORD dwY;
  49. DWORD dwXSize;
  50. DWORD dwYSize;
  51. DWORD dwXCountChars;
  52. DWORD dwYCountChars;
  53. DWORD dwFillAttribute;
  54. DWORD dwFlags;
  55. WORD wShowWindow;
  56. WORD cbReserved2;
  57. LPBYTE lpReserved2;
  58. HANDLE hStdInput;
  59. HANDLE hStdOutput;
  60. HANDLE hStdError;
  61. } STARTUPINFOA, *LPSTARTUPINFOA;
  62. typedef struct _STARTUPINFOW {
  63. DWORD cb;
  64. LPWSTR lpReserved;
  65. LPWSTR lpDesktop;
  66. LPWSTR lpTitle;
  67. DWORD dwX;
  68. DWORD dwY;
  69. DWORD dwXSize;
  70. DWORD dwYSize;
  71. DWORD dwXCountChars;
  72. DWORD dwYCountChars;
  73. DWORD dwFillAttribute;
  74. DWORD dwFlags;
  75. WORD wShowWindow;
  76. WORD cbReserved2;
  77. LPBYTE lpReserved2;
  78. HANDLE hStdInput;
  79. HANDLE hStdOutput;
  80. HANDLE hStdError;
  81. } STARTUPINFOW, *LPSTARTUPINFOW;
  82. __MINGW_TYPEDEF_AW(STARTUPINFO)
  83. __MINGW_TYPEDEF_AW(LPSTARTUPINFO)
  84. typedef struct _PROCESS_INFORMATION {
  85. HANDLE hProcess;
  86. HANDLE hThread;
  87. DWORD dwProcessId;
  88. DWORD dwThreadId;
  89. } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
  90. typedef enum _PROCESS_INFORMATION_CLASS {
  91. ProcessMemoryPriority,
  92. ProcessMemoryExhaustionInfo,
  93. ProcessAppMemoryInfo,
  94. ProcessInPrivateInfo,
  95. ProcessPowerThrottling,
  96. ProcessReservedValue1,
  97. ProcessTelemetryCoverageInfo,
  98. ProcessProtectionLevelInfo,
  99. ProcessLeapSecondInfo,
  100. ProcessMachineTypeInfo,
  101. ProcessInformationClassMax
  102. } PROCESS_INFORMATION_CLASS;
  103. typedef struct _APP_MEMORY_INFORMATION {
  104. ULONG64 AvailableCommit;
  105. ULONG64 PrivateCommitUsage;
  106. ULONG64 PeakPrivateCommitUsage;
  107. ULONG64 TotalCommitUsage;
  108. } APP_MEMORY_INFORMATION, *PAPP_MEMORY_INFORMATION;
  109. typedef enum _MACHINE_ATTRIBUTES {
  110. UserEnabled = 0x00000001,
  111. KernelEnabled = 0x00000002,
  112. Wow64Container = 0x00000004
  113. } MACHINE_ATTRIBUTES;
  114. #ifndef __WIDL__
  115. DEFINE_ENUM_FLAG_OPERATORS(MACHINE_ATTRIBUTES);
  116. #endif
  117. typedef struct _PROCESS_MACHINE_INFORMATION {
  118. USHORT ProcessMachine;
  119. USHORT Res0;
  120. MACHINE_ATTRIBUTES MachineAttributes;
  121. } PROCESS_MACHINE_INFORMATION;
  122. #define PME_CURRENT_VERSION 1
  123. typedef enum _PROCESS_MEMORY_EXHAUSTION_TYPE {
  124. PMETypeFailFastOnCommitFailure,
  125. PMETypeMax
  126. } PROCESS_MEMORY_EXHAUSTION_TYPE, *PPROCESS_MEMORY_EXHAUSTION_TYPE;
  127. #define PME_FAILFAST_ON_COMMIT_FAIL_DISABLE 0x0
  128. #define PME_FAILFAST_ON_COMMIT_FAIL_ENABLE 0x1
  129. typedef struct _PROCESS_MEMORY_EXHAUSTION_INFO {
  130. USHORT Version;
  131. USHORT Reserved;
  132. PROCESS_MEMORY_EXHAUSTION_TYPE Type;
  133. ULONG_PTR Value;
  134. } PROCESS_MEMORY_EXHAUSTION_INFO, *PPROCESS_MEMORY_EXHAUSTION_INFO;
  135. #define PROCESS_POWER_THROTTLING_CURRENT_VERSION 1
  136. #define PROCESS_POWER_THROTTLING_EXECUTION_SPEED 0x1
  137. #define PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION 0x4
  138. #define PROCESS_POWER_THROTTLING_VALID_FLAGS (PROCESS_POWER_THROTTLING_EXECUTION_SPEED | PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION)
  139. typedef struct _PROCESS_POWER_THROTTLING_STATE {
  140. ULONG Version;
  141. ULONG ControlMask;
  142. ULONG StateMask;
  143. } PROCESS_POWER_THROTTLING_STATE, *PPROCESS_POWER_THROTTLING_STATE;
  144. typedef struct PROCESS_PROTECTION_LEVEL_INFORMATION {
  145. DWORD ProtectionLevel;
  146. } PROCESS_PROTECTION_LEVEL_INFORMATION;
  147. #define PROCESS_LEAP_SECOND_INFO_FLAG_ENABLE_SIXTY_SECOND 0x1
  148. #define PROCESS_LEAP_SECOND_INFO_VALID_FLAGS PROCESS_LEAP_SECOND_INFO_FLAG_ENABLE_SIXTY_SECOND
  149. typedef struct _PROCESS_LEAP_SECOND_INFO {
  150. ULONG Flags;
  151. ULONG Reserved;
  152. } PROCESS_LEAP_SECOND_INFO, *PPROCESS_LEAP_SECOND_INFO;
  153. #if _WIN32_WINNT >= 0x0602
  154. WINBASEAPI WINBOOL WINAPI GetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcessInformationSize);
  155. WINBASEAPI WINBOOL WINAPI SetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcessInformationSize);
  156. #endif
  157. #endif /* WINAPI_PARTITION_APP */
  158. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  159. typedef struct _PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST;
  160. WINBASEAPI HANDLE WINAPI CreateRemoteThread (HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
  161. WINBASEAPI WINBOOL WINAPI TerminateThread (HANDLE hThread, DWORD dwExitCode);
  162. WINBASEAPI WINBOOL WINAPI SetProcessShutdownParameters (DWORD dwLevel, DWORD dwFlags);
  163. WINBASEAPI DWORD WINAPI GetProcessVersion (DWORD ProcessId);
  164. WINBASEAPI VOID WINAPI GetStartupInfoW (LPSTARTUPINFOW lpStartupInfo);
  165. WINBASEAPI WINBOOL WINAPI SetThreadStackGuarantee (PULONG StackSizeInBytes);
  166. WINBASEAPI WINBOOL WINAPI ProcessIdToSessionId (DWORD dwProcessId, DWORD *pSessionId);
  167. 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);
  168. WINBASEAPI WINBOOL WINAPI SetThreadContext (HANDLE hThread, CONST CONTEXT *lpContext);
  169. WINBASEAPI WINBOOL WINAPI GetProcessHandleCount (HANDLE hProcess, PDWORD pdwHandleCount);
  170. #ifdef UNICODE
  171. #define GetStartupInfo GetStartupInfoW
  172. #endif
  173. #ifndef _APISET_EXPORTS_FILTER
  174. 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);
  175. #ifdef UNICODE
  176. #define CreateProcessAsUser CreateProcessAsUserW
  177. #endif
  178. #endif
  179. #if _WIN32_WINNT >= 0x0600
  180. #define PROCESS_AFFINITY_ENABLE_AUTO_UPDATE __MSABI_LONG(0x1U)
  181. #define PROC_THREAD_ATTRIBUTE_REPLACE_VALUE 0x00000001
  182. WINBASEAPI DWORD WINAPI GetProcessIdOfThread (HANDLE Thread);
  183. WINBASEAPI WINBOOL WINAPI InitializeProcThreadAttributeList (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, DWORD dwAttributeCount, DWORD dwFlags, PSIZE_T lpSize);
  184. WINBASEAPI VOID WINAPI DeleteProcThreadAttributeList (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList);
  185. WINBASEAPI WINBOOL WINAPI SetProcessAffinityUpdateMode (HANDLE hProcess, DWORD dwFlags);
  186. WINBASEAPI WINBOOL WINAPI QueryProcessAffinityUpdateMode (HANDLE hProcess, LPDWORD lpdwFlags);
  187. WINBASEAPI WINBOOL WINAPI UpdateProcThreadAttribute (LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, DWORD dwFlags, DWORD_PTR Attribute, PVOID lpValue, SIZE_T cbSize, PVOID lpPreviousValue, PSIZE_T lpReturnSize);
  188. #endif
  189. #if _WIN32_WINNT >= 0x0602
  190. WINBASEAPI WINBOOL WINAPI SetProcessMitigationPolicy (PROCESS_MITIGATION_POLICY MitigationPolicy, PVOID lpBuffer, SIZE_T dwLength);
  191. FORCEINLINE HANDLE GetCurrentProcessToken (VOID)
  192. {
  193. return (HANDLE)(LONG_PTR) (-4);
  194. }
  195. FORCEINLINE HANDLE GetCurrentThreadToken (VOID)
  196. {
  197. return (HANDLE)(LONG_PTR) (-5);
  198. }
  199. FORCEINLINE HANDLE GetCurrentThreadEffectiveToken (VOID)
  200. {
  201. return (HANDLE)(LONG_PTR) (-6);
  202. }
  203. typedef struct _MEMORY_PRIORITY_INFORMATION {
  204. ULONG MemoryPriority;
  205. } MEMORY_PRIORITY_INFORMATION, *PMEMORY_PRIORITY_INFORMATION;
  206. #endif
  207. #define MEMORY_PRIORITY_VERY_LOW 1
  208. #define MEMORY_PRIORITY_LOW 2
  209. #define MEMORY_PRIORITY_MEDIUM 3
  210. #define MEMORY_PRIORITY_BELOW_NORMAL 4
  211. #define MEMORY_PRIORITY_NORMAL 5
  212. #endif
  213. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  214. #ifndef _APISET_EXPORTS_FILTER
  215. 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);
  216. 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);
  217. #define CreateProcess __MINGW_NAME_AW(CreateProcess)
  218. #if _WIN32_WINNT >= 0x0601
  219. WINBASEAPI WINBOOL WINAPI GetThreadIdealProcessorEx (HANDLE hThread, PPROCESSOR_NUMBER lpIdealProcessor);
  220. WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx (PPROCESSOR_NUMBER ProcNumber);
  221. #endif
  222. #if _WIN32_WINNT >= 0x0602
  223. WINBASEAPI VOID WINAPI GetCurrentThreadStackLimits (PULONG_PTR LowLimit, PULONG_PTR HighLimit);
  224. WINBASEAPI WINBOOL WINAPI GetProcessMitigationPolicy (HANDLE hProcess, PROCESS_MITIGATION_POLICY MitigationPolicy, PVOID lpBuffer, SIZE_T dwLength);
  225. #endif
  226. #endif
  227. WINBASEAPI HANDLE WINAPI GetCurrentProcess (VOID);
  228. WINBASEAPI DWORD WINAPI GetCurrentProcessId (VOID);
  229. WINBASEAPI HANDLE WINAPI GetCurrentThread (VOID);
  230. WINBASEAPI DWORD WINAPI GetCurrentThreadId (VOID);
  231. WINBOOL WINAPI IsProcessorFeaturePresent (DWORD ProcessorFeature);
  232. #if _WIN32_WINNT >= 0x0600
  233. WINBASEAPI VOID WINAPI FlushProcessWriteBuffers (VOID);
  234. #endif
  235. WINBASEAPI HANDLE WINAPI CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
  236. WINBASEAPI WINBOOL WINAPI SetThreadPriority (HANDLE hThread, int nPriority);
  237. WINBASEAPI int WINAPI GetThreadPriority (HANDLE hThread);
  238. WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitThread (DWORD dwExitCode);
  239. WINBASEAPI WINBOOL WINAPI GetExitCodeThread (HANDLE hThread, LPDWORD lpExitCode);
  240. #if _WIN32_WINNT >= 0x0A00
  241. WINBASEAPI DWORD WINAPI QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
  242. WINBASEAPI WINBOOL WINAPI SwitchToThread (VOID);
  243. #endif
  244. WINBASEAPI DWORD WINAPI SuspendThread (HANDLE hThread);
  245. WINBASEAPI DWORD WINAPI ResumeThread (HANDLE hThread);
  246. WINBASEAPI DWORD WINAPI TlsAlloc (VOID);
  247. WINBASEAPI LPVOID WINAPI TlsGetValue (DWORD dwTlsIndex);
  248. WINBASEAPI WINBOOL WINAPI TlsSetValue (DWORD dwTlsIndex, LPVOID lpTlsValue);
  249. WINBASEAPI WINBOOL WINAPI TlsFree (DWORD dwTlsIndex);
  250. #if _WIN32_WINNT >= 0x0601
  251. WINBASEAPI WINBOOL WINAPI SetThreadIdealProcessorEx (HANDLE hThread, PPROCESSOR_NUMBER lpIdealProcessor, PPROCESSOR_NUMBER lpPreviousIdealProcessor);
  252. #endif
  253. #if NTDDI_VERSION >= NTDDI_WIN10_VB
  254. WINBASEAPI WINBOOL WINAPI SetProcessDynamicEHContinuationTargets (HANDLE Process, USHORT NumberOfTargets, PPROCESS_DYNAMIC_EH_CONTINUATION_TARGET Targets);
  255. #endif
  256. #if NTDDI_VERSION >= NTDDI_WIN10_MN
  257. typedef enum _QUEUE_USER_APC_FLAGS {
  258. QUEUE_USER_APC_FLAGS_NONE = 0x0,
  259. QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC = 0x1
  260. } QUEUE_USER_APC_FLAGS;
  261. WINBASEAPI WINBOOL WINAPI QueueUserAPC2 (PAPCFUNC ApcRoutine, HANDLE Thread, ULONG_PTR Data, QUEUE_USER_APC_FLAGS Flags);
  262. #endif
  263. #if NTDDI_VERSION >= NTDDI_WIN10_FE
  264. WINBASEAPI WINBOOL WINAPI SetProcessDynamicEnforcedCetCompatibleRanges (HANDLE Process, USHORT NumberOfRanges, PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE Ranges);
  265. #endif
  266. #endif
  267. #ifdef __cplusplus
  268. }
  269. #endif
  270. #endif