23#include <winpr/winpr.h>
24#include <winpr/wtypes.h>
26#include <winpr/spec.h>
27#include <winpr/handle.h>
48 DWORD dwFillAttribute;
70 DWORD dwFillAttribute;
100#define PROC_THREAD_ATTRIBUTE_HANDLE_LIST 0x00020002
105 LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
111 LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
127 WINPR_API BOOL InitializeProcThreadAttributeList(LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
128 DWORD dwAttributeCount, DWORD dwFlags,
133 WINPR_API BOOL UpdateProcThreadAttribute(LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
134 DWORD dwFlags, DWORD_PTR Attribute, PVOID lpValue,
135 SIZE_T cbSize, PVOID lpPreviousValue,
136 PSIZE_T lpReturnSize);
139 WINPR_API VOID DeleteProcThreadAttributeList(LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList);
141#define STARTF_USESHOWWINDOW 0x00000001
142#define STARTF_USESIZE 0x00000002
143#define STARTF_USEPOSITION 0x00000004
144#define STARTF_USECOUNTCHARS 0x00000008
145#define STARTF_USEFILLATTRIBUTE 0x00000010
146#define STARTF_RUNFULLSCREEN 0x00000020
147#define STARTF_FORCEONFEEDBACK 0x00000040
148#define STARTF_FORCEOFFFEEDBACK 0x00000080
149#define STARTF_USESTDHANDLES 0x00000100
150#define STARTF_USEHOTKEY 0x00000200
151#define STARTF_TITLEISLINKNAME 0x00000800
152#define STARTF_TITLEISAPPID 0x00001000
153#define STARTF_PREVENTPINNING 0x00002000
157#define LOGON_WITH_PROFILE 0x00000001
158#define LOGON_NETCREDENTIALS_ONLY 0x00000002
159#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000
163#define EXTENDED_STARTUPINFO_PRESENT 0x00080000
166 WINPR_API BOOL CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine,
167 LPSECURITY_ATTRIBUTES lpProcessAttributes,
168 LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
169 DWORD dwCreationFlags, LPVOID lpEnvironment,
171 LPPROCESS_INFORMATION lpProcessInformation);
174 WINPR_API BOOL CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
175 LPSECURITY_ATTRIBUTES lpProcessAttributes,
176 LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
177 DWORD dwCreationFlags, LPVOID lpEnvironment,
179 LPPROCESS_INFORMATION lpProcessInformation);
182 WINPR_API BOOL CreateProcessAsUserA(HANDLE hToken, LPCSTR lpApplicationName,
184 LPSECURITY_ATTRIBUTES lpProcessAttributes,
185 LPSECURITY_ATTRIBUTES lpThreadAttributes,
186 BOOL bInheritHandles, DWORD dwCreationFlags,
187 LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
189 LPPROCESS_INFORMATION lpProcessInformation);
192 WINPR_API BOOL CreateProcessAsUserW(HANDLE hToken, LPCWSTR lpApplicationName,
193 LPWSTR lpCommandLine,
194 LPSECURITY_ATTRIBUTES lpProcessAttributes,
195 LPSECURITY_ATTRIBUTES lpThreadAttributes,
196 BOOL bInheritHandles, DWORD dwCreationFlags,
197 LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
199 LPPROCESS_INFORMATION lpProcessInformation);
202 WINPR_API BOOL CreateProcessWithLogonA(LPCSTR lpUsername, LPCSTR lpDomain, LPCSTR lpPassword,
203 DWORD dwLogonFlags, LPCSTR lpApplicationName,
204 LPSTR lpCommandLine, DWORD dwCreationFlags,
205 LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
207 LPPROCESS_INFORMATION lpProcessInformation);
210 WINPR_API BOOL CreateProcessWithLogonW(LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword,
211 DWORD dwLogonFlags, LPCWSTR lpApplicationName,
212 LPWSTR lpCommandLine, DWORD dwCreationFlags,
213 LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
215 LPPROCESS_INFORMATION lpProcessInformation);
218 WINPR_API BOOL CreateProcessWithTokenA(HANDLE hToken, DWORD dwLogonFlags,
219 LPCSTR lpApplicationName, LPSTR lpCommandLine,
220 DWORD dwCreationFlags, LPVOID lpEnvironment,
222 LPPROCESS_INFORMATION lpProcessInformation);
225 WINPR_API BOOL CreateProcessWithTokenW(HANDLE hToken, DWORD dwLogonFlags,
226 LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
227 DWORD dwCreationFlags, LPVOID lpEnvironment,
229 LPPROCESS_INFORMATION lpProcessInformation);
232#define CreateProcess CreateProcessW
233#define CreateProcessAsUser CreateProcessAsUserW
234#define CreateProcessWithLogon CreateProcessWithLogonW
235#define CreateProcessWithToken CreateProcessWithTokenW
237#define CreateProcess CreateProcessA
238#define CreateProcessAsUser CreateProcessAsUserA
239#define CreateProcessWithLogon CreateProcessWithLogonA
240#define CreateProcessWithToken CreateProcessWithTokenA
243 DECLSPEC_NORETURN WINPR_API VOID ExitProcess(UINT uExitCode);
245 WINPR_API BOOL GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode);
247 WINPR_PRAGMA_DIAG_PUSH
248 WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
252 WINPR_API HANDLE _GetCurrentProcess(
void);
254 WINPR_PRAGMA_DIAG_POP
257 WINPR_API DWORD GetCurrentProcessId(
void);
259 WINPR_API BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode);
264 WINPR_API LPWSTR* CommandLineToArgvW(LPCWSTR lpCmdLine,
int* pNumArgs);
267#define CommandLineToArgv CommandLineToArgvW
269#define CommandLineToArgv CommandLineToArgvA
273#define THREAD_MODE_BACKGROUND_BEGIN 0x00010000
274#define THREAD_MODE_BACKGROUND_END 0x00020000
281#define THREAD_PRIORITY_ABOVE_NORMAL 1
282#define THREAD_PRIORITY_BELOW_NORMAL -1
283#define THREAD_PRIORITY_HIGHEST 2
284#define THREAD_PRIORITY_IDLE -15
285#define THREAD_PRIORITY_LOWEST -2
286#define THREAD_PRIORITY_NORMAL 0
287#define THREAD_PRIORITY_TIME_CRITICAL 15
299 WINPR_API BOOL SetThreadPriority(HANDLE hThread,
int nPriority);
301#define CREATE_SUSPENDED 0x00000004
302#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
304 WINPR_ATTR_MALLOC(CloseHandle, 1)
306 WINPR_API HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
size_t dwStackSize,
307 LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter,
308 DWORD dwCreationFlags, LPDWORD lpThreadId);
310 WINPR_ATTR_MALLOC(CloseHandle, 1)
312 WINPR_API HANDLE CreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes,
313 size_t dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress,
314 LPVOID lpParameter, DWORD dwCreationFlags,
317 WINPR_API VOID ExitThread(DWORD dwExitCode);
319 WINPR_API BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
321 WINPR_PRAGMA_DIAG_PUSH
322 WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
325 WINPR_API HANDLE _GetCurrentThread(
void);
326 WINPR_PRAGMA_DIAG_POP
329 WINPR_API DWORD GetCurrentThreadId(
void);
331 typedef
void (*PAPCFUNC)(ULONG_PTR Parameter);
333 WINPR_API DWORD QueueUserAPC(PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
335 WINPR_API DWORD ResumeThread(HANDLE hThread);
338 WINPR_API DWORD SuspendThread(HANDLE hThread);
340 WINPR_API BOOL SwitchToThread(
void);
342 WINPR_API BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);
347 WINPR_API DWORD GetCurrentProcessorNumber(
void);
351#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
352#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
354 WINPR_DEPRECATED_VAR(
"[since 3.31.0]", WINPR_ATTR_NODISCARD WINPR_API DWORD TlsAlloc(
void));
356 WINPR_DEPRECATED_VAR(
"[since 3.31.0]",
357 WINPR_ATTR_NODISCARD WINPR_API LPVOID TlsGetValue(DWORD dwTlsIndex));
359 WINPR_DEPRECATED_VAR(
"[since 3.31.0]",
360 WINPR_ATTR_NODISCARD WINPR_API BOOL TlsSetValue(DWORD dwTlsIndex,
363 WINPR_DEPRECATED_VAR(
"[since 3.31.0]",
364 WINPR_ATTR_NODISCARD WINPR_API BOOL TlsFree(DWORD dwTlsIndex));
372WINPR_PRAGMA_DIAG_PUSH
373WINPR_PRAGMA_DIAG_IGNORED_RESERVED_IDENTIFIER
375#define _GetCurrentProcess GetCurrentProcess
376#define _GetCurrentThread GetCurrentThread
385 WINPR_API LPSTR* CommandLineToArgvA(LPCSTR lpCmdLine,
int* pNumArgs);
387 WINPR_API VOID DumpThreadHandles(
void);
opaque attribute list built by InitializeProcThreadAttributeList() / UpdateProcThreadAttribute(),...