cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

thread.h (9624B)


      1/**
      2 * WinPR: Windows Portable Runtime
      3 * Process Thread Functions
      4 *
      5 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
      6 *
      7 * Licensed under the Apache License, Version 2.0 (the "License");
      8 * you may not use this file except in compliance with the License.
      9 * You may obtain a copy of the License at
     10 *
     11 *     http://www.apache.org/licenses/LICENSE-2.0
     12 *
     13 * Unless required by applicable law or agreed to in writing, software
     14 * distributed under the License is distributed on an "AS IS" BASIS,
     15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 * See the License for the specific language governing permissions and
     17 * limitations under the License.
     18 */
     19
     20#ifndef WINPR_THREAD_H
     21#define WINPR_THREAD_H
     22
     23#include <winpr/winpr.h>
     24#include <winpr/wtypes.h>
     25
     26#include <winpr/spec.h>
     27#include <winpr/handle.h>
     28
     29#ifdef __cplusplus
     30extern "C"
     31{
     32#endif
     33
     34#ifndef _WIN32
     35
     36	typedef struct _STARTUPINFOA
     37	{
     38		DWORD cb;
     39		LPSTR lpReserved;
     40		LPSTR lpDesktop;
     41		LPSTR lpTitle;
     42		DWORD dwX;
     43		DWORD dwY;
     44		DWORD dwXSize;
     45		DWORD dwYSize;
     46		DWORD dwXCountChars;
     47		DWORD dwYCountChars;
     48		DWORD dwFillAttribute;
     49		DWORD dwFlags;
     50		WORD wShowWindow;
     51		WORD cbReserved2;
     52		LPBYTE lpReserved2;
     53		HANDLE hStdInput;
     54		HANDLE hStdOutput;
     55		HANDLE hStdError;
     56	} STARTUPINFOA, *LPSTARTUPINFOA;
     57
     58	typedef struct _STARTUPINFOW
     59	{
     60		DWORD cb;
     61		LPWSTR lpReserved;
     62		LPWSTR lpDesktop;
     63		LPWSTR lpTitle;
     64		DWORD dwX;
     65		DWORD dwY;
     66		DWORD dwXSize;
     67		DWORD dwYSize;
     68		DWORD dwXCountChars;
     69		DWORD dwYCountChars;
     70		DWORD dwFillAttribute;
     71		DWORD dwFlags;
     72		WORD wShowWindow;
     73		WORD cbReserved2;
     74		LPBYTE lpReserved2;
     75		HANDLE hStdInput;
     76		HANDLE hStdOutput;
     77		HANDLE hStdError;
     78	} STARTUPINFOW, *LPSTARTUPINFOW;
     79
     80#ifdef UNICODE
     81	typedef STARTUPINFOW STARTUPINFO;
     82	typedef LPSTARTUPINFOW LPSTARTUPINFO;
     83#else
     84	typedef STARTUPINFOA STARTUPINFO;
     85	typedef LPSTARTUPINFOA LPSTARTUPINFO;
     86#endif
     87
     88#define STARTF_USESHOWWINDOW 0x00000001
     89#define STARTF_USESIZE 0x00000002
     90#define STARTF_USEPOSITION 0x00000004
     91#define STARTF_USECOUNTCHARS 0x00000008
     92#define STARTF_USEFILLATTRIBUTE 0x00000010
     93#define STARTF_RUNFULLSCREEN 0x00000020
     94#define STARTF_FORCEONFEEDBACK 0x00000040
     95#define STARTF_FORCEOFFFEEDBACK 0x00000080
     96#define STARTF_USESTDHANDLES 0x00000100
     97#define STARTF_USEHOTKEY 0x00000200
     98#define STARTF_TITLEISLINKNAME 0x00000800
     99#define STARTF_TITLEISAPPID 0x00001000
    100#define STARTF_PREVENTPINNING 0x00002000
    101
    102	/* Process */
    103
    104#define LOGON_WITH_PROFILE 0x00000001
    105#define LOGON_NETCREDENTIALS_ONLY 0x00000002
    106#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000
    107
    108	WINPR_API BOOL CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine,
    109	                              LPSECURITY_ATTRIBUTES lpProcessAttributes,
    110	                              LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
    111	                              DWORD dwCreationFlags, LPVOID lpEnvironment,
    112	                              LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo,
    113	                              LPPROCESS_INFORMATION lpProcessInformation);
    114
    115	WINPR_API BOOL CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
    116	                              LPSECURITY_ATTRIBUTES lpProcessAttributes,
    117	                              LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
    118	                              DWORD dwCreationFlags, LPVOID lpEnvironment,
    119	                              LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo,
    120	                              LPPROCESS_INFORMATION lpProcessInformation);
    121
    122	WINPR_API BOOL CreateProcessAsUserA(HANDLE hToken, LPCSTR lpApplicationName,
    123	                                    LPSTR lpCommandLine,
    124	                                    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    125	                                    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    126	                                    BOOL bInheritHandles, DWORD dwCreationFlags,
    127	                                    LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
    128	                                    LPSTARTUPINFOA lpStartupInfo,
    129	                                    LPPROCESS_INFORMATION lpProcessInformation);
    130
    131	WINPR_API BOOL CreateProcessAsUserW(HANDLE hToken, LPCWSTR lpApplicationName,
    132	                                    LPWSTR lpCommandLine,
    133	                                    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    134	                                    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    135	                                    BOOL bInheritHandles, DWORD dwCreationFlags,
    136	                                    LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
    137	                                    LPSTARTUPINFOW lpStartupInfo,
    138	                                    LPPROCESS_INFORMATION lpProcessInformation);
    139
    140	WINPR_API BOOL CreateProcessWithLogonA(LPCSTR lpUsername, LPCSTR lpDomain, LPCSTR lpPassword,
    141	                                       DWORD dwLogonFlags, LPCSTR lpApplicationName,
    142	                                       LPSTR lpCommandLine, DWORD dwCreationFlags,
    143	                                       LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
    144	                                       LPSTARTUPINFOA lpStartupInfo,
    145	                                       LPPROCESS_INFORMATION lpProcessInformation);
    146
    147	WINPR_API BOOL CreateProcessWithLogonW(LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword,
    148	                                       DWORD dwLogonFlags, LPCWSTR lpApplicationName,
    149	                                       LPWSTR lpCommandLine, DWORD dwCreationFlags,
    150	                                       LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
    151	                                       LPSTARTUPINFOW lpStartupInfo,
    152	                                       LPPROCESS_INFORMATION lpProcessInformation);
    153
    154	WINPR_API BOOL CreateProcessWithTokenA(HANDLE hToken, DWORD dwLogonFlags,
    155	                                       LPCSTR lpApplicationName, LPSTR lpCommandLine,
    156	                                       DWORD dwCreationFlags, LPVOID lpEnvironment,
    157	                                       LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo,
    158	                                       LPPROCESS_INFORMATION lpProcessInformation);
    159
    160	WINPR_API BOOL CreateProcessWithTokenW(HANDLE hToken, DWORD dwLogonFlags,
    161	                                       LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
    162	                                       DWORD dwCreationFlags, LPVOID lpEnvironment,
    163	                                       LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo,
    164	                                       LPPROCESS_INFORMATION lpProcessInformation);
    165
    166#ifdef UNICODE
    167#define CreateProcess CreateProcessW
    168#define CreateProcessAsUser CreateProcessAsUserW
    169#define CreateProcessWithLogon CreateProcessWithLogonW
    170#define CreateProcessWithToken CreateProcessWithTokenW
    171#else
    172#define CreateProcess CreateProcessA
    173#define CreateProcessAsUser CreateProcessAsUserA
    174#define CreateProcessWithLogon CreateProcessWithLogonA
    175#define CreateProcessWithToken CreateProcessWithTokenA
    176#endif
    177
    178	DECLSPEC_NORETURN WINPR_API VOID ExitProcess(UINT uExitCode);
    179	WINPR_API BOOL GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode);
    180
    181	WINPR_API HANDLE _GetCurrentProcess(void);
    182	WINPR_API DWORD GetCurrentProcessId(void);
    183
    184	WINPR_API BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode);
    185
    186	/* Process Argument Vector Parsing */
    187
    188	WINPR_API LPWSTR* CommandLineToArgvW(LPCWSTR lpCmdLine, int* pNumArgs);
    189
    190#ifdef UNICODE
    191#define CommandLineToArgv CommandLineToArgvW
    192#else
    193#define CommandLineToArgv CommandLineToArgvA
    194#endif
    195
    196	/* Thread */
    197
    198#define CREATE_SUSPENDED 0x00000004
    199#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
    200
    201	WINPR_API HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize,
    202	                              LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter,
    203	                              DWORD dwCreationFlags, LPDWORD lpThreadId);
    204
    205	WINPR_API HANDLE CreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes,
    206	                                    SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress,
    207	                                    LPVOID lpParameter, DWORD dwCreationFlags,
    208	                                    LPDWORD lpThreadId);
    209
    210	WINPR_API VOID ExitThread(DWORD dwExitCode);
    211	WINPR_API BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
    212
    213	WINPR_API HANDLE _GetCurrentThread(void);
    214	WINPR_API DWORD GetCurrentThreadId(void);
    215
    216	typedef void (*PAPCFUNC)(ULONG_PTR Parameter);
    217	WINPR_API DWORD QueueUserAPC(PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);
    218
    219	WINPR_API DWORD ResumeThread(HANDLE hThread);
    220	WINPR_API DWORD SuspendThread(HANDLE hThread);
    221	WINPR_API BOOL SwitchToThread(void);
    222
    223	WINPR_API BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);
    224
    225	/* Processor */
    226
    227	WINPR_API DWORD GetCurrentProcessorNumber(void);
    228
    229	/* Thread-Local Storage */
    230
    231#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
    232
    233	WINPR_API DWORD TlsAlloc(void);
    234	WINPR_API LPVOID TlsGetValue(DWORD dwTlsIndex);
    235	WINPR_API BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue);
    236	WINPR_API BOOL TlsFree(DWORD dwTlsIndex);
    237
    238#else
    239
    240/*
    241 * GetCurrentProcess / GetCurrentThread cause a conflict on Mac OS X
    242 */
    243#define _GetCurrentProcess GetCurrentProcess
    244#define _GetCurrentThread GetCurrentThread
    245
    246#endif
    247
    248	/* CommandLineToArgvA is not present in the original Windows API, WinPR always exports it */
    249
    250	WINPR_API LPSTR* CommandLineToArgvA(LPCSTR lpCmdLine, int* pNumArgs);
    251	WINPR_API VOID DumpThreadHandles(void);
    252
    253#ifdef __cplusplus
    254}
    255#endif
    256
    257#endif /* WINPR_THREAD_H */