Blame winpr/include/winpr/thread.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * WinPR: Windows Portable Runtime
Packit 1fb8d4
 * Process Thread Functions
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef WINPR_THREAD_H
Packit 1fb8d4
#define WINPR_THREAD_H
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/winpr.h>
Packit 1fb8d4
#include <winpr/wtypes.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/spec.h>
Packit 1fb8d4
#include <winpr/handle.h>
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit Service 5a9772
extern "C"
Packit Service 5a9772
{
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit Service 5a9772
	typedef struct _STARTUPINFOA
Packit Service 5a9772
	{
Packit Service 5a9772
		DWORD cb;
Packit Service 5a9772
		LPSTR lpReserved;
Packit Service 5a9772
		LPSTR lpDesktop;
Packit Service 5a9772
		LPSTR lpTitle;
Packit Service 5a9772
		DWORD dwX;
Packit Service 5a9772
		DWORD dwY;
Packit Service 5a9772
		DWORD dwXSize;
Packit Service 5a9772
		DWORD dwYSize;
Packit Service 5a9772
		DWORD dwXCountChars;
Packit Service 5a9772
		DWORD dwYCountChars;
Packit Service 5a9772
		DWORD dwFillAttribute;
Packit Service 5a9772
		DWORD dwFlags;
Packit Service 5a9772
		WORD wShowWindow;
Packit Service 5a9772
		WORD cbReserved2;
Packit Service 5a9772
		LPBYTE lpReserved2;
Packit Service 5a9772
		HANDLE hStdInput;
Packit Service 5a9772
		HANDLE hStdOutput;
Packit Service 5a9772
		HANDLE hStdError;
Packit Service 5a9772
	} STARTUPINFOA, *LPSTARTUPINFOA;
Packit Service 5a9772
Packit Service 5a9772
	typedef struct _STARTUPINFOW
Packit Service 5a9772
	{
Packit Service 5a9772
		DWORD cb;
Packit Service 5a9772
		LPWSTR lpReserved;
Packit Service 5a9772
		LPWSTR lpDesktop;
Packit Service 5a9772
		LPWSTR lpTitle;
Packit Service 5a9772
		DWORD dwX;
Packit Service 5a9772
		DWORD dwY;
Packit Service 5a9772
		DWORD dwXSize;
Packit Service 5a9772
		DWORD dwYSize;
Packit Service 5a9772
		DWORD dwXCountChars;
Packit Service 5a9772
		DWORD dwYCountChars;
Packit Service 5a9772
		DWORD dwFillAttribute;
Packit Service 5a9772
		DWORD dwFlags;
Packit Service 5a9772
		WORD wShowWindow;
Packit Service 5a9772
		WORD cbReserved2;
Packit Service 5a9772
		LPBYTE lpReserved2;
Packit Service 5a9772
		HANDLE hStdInput;
Packit Service 5a9772
		HANDLE hStdOutput;
Packit Service 5a9772
		HANDLE hStdError;
Packit Service 5a9772
	} STARTUPINFOW, *LPSTARTUPINFOW;
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit Service 5a9772
	typedef STARTUPINFOW STARTUPINFO;
Packit Service 5a9772
	typedef LPSTARTUPINFOW LPSTARTUPINFO;
Packit 1fb8d4
#else
Packit Service 5a9772
	typedef STARTUPINFOA STARTUPINFO;
Packit Service 5a9772
	typedef LPSTARTUPINFOA LPSTARTUPINFO;
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
#define STARTF_USESHOWWINDOW 0x00000001
Packit Service 5a9772
#define STARTF_USESIZE 0x00000002
Packit Service 5a9772
#define STARTF_USEPOSITION 0x00000004
Packit Service 5a9772
#define STARTF_USECOUNTCHARS 0x00000008
Packit Service 5a9772
#define STARTF_USEFILLATTRIBUTE 0x00000010
Packit Service 5a9772
#define STARTF_RUNFULLSCREEN 0x00000020
Packit Service 5a9772
#define STARTF_FORCEONFEEDBACK 0x00000040
Packit Service 5a9772
#define STARTF_FORCEOFFFEEDBACK 0x00000080
Packit Service 5a9772
#define STARTF_USESTDHANDLES 0x00000100
Packit Service 5a9772
#define STARTF_USEHOTKEY 0x00000200
Packit Service 5a9772
#define STARTF_TITLEISLINKNAME 0x00000800
Packit Service 5a9772
#define STARTF_TITLEISAPPID 0x00001000
Packit Service 5a9772
#define STARTF_PREVENTPINNING 0x00002000
Packit Service 5a9772
Packit Service 5a9772
	/* Process */
Packit Service 5a9772
Packit Service 5a9772
#define LOGON_WITH_PROFILE 0x00000001
Packit Service 5a9772
#define LOGON_NETCREDENTIALS_ONLY 0x00000002
Packit Service 5a9772
#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine,
Packit Service 5a9772
	                              LPSECURITY_ATTRIBUTES lpProcessAttributes,
Packit Service 5a9772
	                              LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
Packit Service 5a9772
	                              DWORD dwCreationFlags, LPVOID lpEnvironment,
Packit Service 5a9772
	                              LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo,
Packit Service 5a9772
	                              LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
Packit Service 5a9772
	                              LPSECURITY_ATTRIBUTES lpProcessAttributes,
Packit Service 5a9772
	                              LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
Packit Service 5a9772
	                              DWORD dwCreationFlags, LPVOID lpEnvironment,
Packit Service 5a9772
	                              LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo,
Packit Service 5a9772
	                              LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessAsUserA(HANDLE hToken, LPCSTR lpApplicationName,
Packit Service 5a9772
	                                    LPSTR lpCommandLine,
Packit Service 5a9772
	                                    LPSECURITY_ATTRIBUTES lpProcessAttributes,
Packit Service 5a9772
	                                    LPSECURITY_ATTRIBUTES lpThreadAttributes,
Packit Service 5a9772
	                                    BOOL bInheritHandles, DWORD dwCreationFlags,
Packit Service 5a9772
	                                    LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
Packit Service 5a9772
	                                    LPSTARTUPINFOA lpStartupInfo,
Packit Service 5a9772
	                                    LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessAsUserW(HANDLE hToken, LPCWSTR lpApplicationName,
Packit Service 5a9772
	                                    LPWSTR lpCommandLine,
Packit Service 5a9772
	                                    LPSECURITY_ATTRIBUTES lpProcessAttributes,
Packit Service 5a9772
	                                    LPSECURITY_ATTRIBUTES lpThreadAttributes,
Packit Service 5a9772
	                                    BOOL bInheritHandles, DWORD dwCreationFlags,
Packit Service 5a9772
	                                    LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
Packit Service 5a9772
	                                    LPSTARTUPINFOW lpStartupInfo,
Packit Service 5a9772
	                                    LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessWithLogonA(LPCSTR lpUsername, LPCSTR lpDomain, LPCSTR lpPassword,
Packit Service 5a9772
	                                       DWORD dwLogonFlags, LPCSTR lpApplicationName,
Packit Service 5a9772
	                                       LPSTR lpCommandLine, DWORD dwCreationFlags,
Packit Service 5a9772
	                                       LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
Packit Service 5a9772
	                                       LPSTARTUPINFOA lpStartupInfo,
Packit Service 5a9772
	                                       LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessWithLogonW(LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword,
Packit Service 5a9772
	                                       DWORD dwLogonFlags, LPCWSTR lpApplicationName,
Packit Service 5a9772
	                                       LPWSTR lpCommandLine, DWORD dwCreationFlags,
Packit Service 5a9772
	                                       LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
Packit Service 5a9772
	                                       LPSTARTUPINFOW lpStartupInfo,
Packit Service 5a9772
	                                       LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessWithTokenA(HANDLE hToken, DWORD dwLogonFlags,
Packit Service 5a9772
	                                       LPCSTR lpApplicationName, LPSTR lpCommandLine,
Packit Service 5a9772
	                                       DWORD dwCreationFlags, LPVOID lpEnvironment,
Packit Service 5a9772
	                                       LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo,
Packit Service 5a9772
	                                       LPPROCESS_INFORMATION lpProcessInformation);
Packit Service 5a9772
Packit Service 5a9772
	WINPR_API BOOL CreateProcessWithTokenW(HANDLE hToken, DWORD dwLogonFlags,
Packit Service 5a9772
	                                       LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
Packit Service 5a9772
	                                       DWORD dwCreationFlags, LPVOID lpEnvironment,
Packit Service 5a9772
	                                       LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo,
Packit Service 5a9772
	                                       LPPROCESS_INFORMATION lpProcessInformation);
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit Service 5a9772
#define CreateProcess CreateProcessW
Packit Service 5a9772
#define CreateProcessAsUser CreateProcessAsUserW
Packit Service 5a9772
#define CreateProcessWithLogon CreateProcessWithLogonW
Packit Service 5a9772
#define CreateProcessWithToken CreateProcessWithTokenW
Packit 1fb8d4
#else
Packit Service 5a9772
#define CreateProcess CreateProcessA
Packit Service 5a9772
#define CreateProcessAsUser CreateProcessAsUserA
Packit Service 5a9772
#define CreateProcessWithLogon CreateProcessWithLogonA
Packit Service 5a9772
#define CreateProcessWithToken CreateProcessWithTokenA
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
	DECLSPEC_NORETURN WINPR_API VOID ExitProcess(UINT uExitCode);
Packit Service 5a9772
	WINPR_API BOOL GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API HANDLE _GetCurrentProcess(void);
Packit Service 5a9772
	WINPR_API DWORD GetCurrentProcessId(void);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode);
Packit 1fb8d4
Packit Service 5a9772
	/* Process Argument Vector Parsing */
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API LPWSTR* CommandLineToArgvW(LPCWSTR lpCmdLine, int* pNumArgs);
Packit 1fb8d4
Packit 1fb8d4
#ifdef UNICODE
Packit Service 5a9772
#define CommandLineToArgv CommandLineToArgvW
Packit 1fb8d4
#else
Packit Service 5a9772
#define CommandLineToArgv CommandLineToArgvA
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
	/* Thread */
Packit 1fb8d4
Packit Service 5a9772
#define CREATE_SUSPENDED 0x00000004
Packit Service 5a9772
#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize,
Packit Service 5a9772
	                              LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter,
Packit Service 5a9772
	                              DWORD dwCreationFlags, LPDWORD lpThreadId);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API HANDLE CreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes,
Packit Service 5a9772
	                                    SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress,
Packit Service 5a9772
	                                    LPVOID lpParameter, DWORD dwCreationFlags,
Packit Service 5a9772
	                                    LPDWORD lpThreadId);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API DECLSPEC_NORETURN VOID ExitThread(DWORD dwExitCode);
Packit Service 5a9772
	WINPR_API BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API HANDLE _GetCurrentThread(void);
Packit Service 5a9772
	WINPR_API DWORD GetCurrentThreadId(void);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API DWORD ResumeThread(HANDLE hThread);
Packit Service 5a9772
	WINPR_API DWORD SuspendThread(HANDLE hThread);
Packit Service 5a9772
	WINPR_API BOOL SwitchToThread(void);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode);
Packit 1fb8d4
Packit Service 5a9772
	/* Processor */
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API DWORD GetCurrentProcessorNumber(void);
Packit 1fb8d4
Packit Service 5a9772
	/* Thread-Local Storage */
Packit 1fb8d4
Packit Service 5a9772
#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API DWORD TlsAlloc(void);
Packit Service 5a9772
	WINPR_API LPVOID TlsGetValue(DWORD dwTlsIndex);
Packit Service 5a9772
	WINPR_API BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue);
Packit Service 5a9772
	WINPR_API BOOL TlsFree(DWORD dwTlsIndex);
Packit 1fb8d4
Packit 1fb8d4
#else
Packit 1fb8d4
Packit 1fb8d4
/*
Packit 1fb8d4
 * GetCurrentProcess / GetCurrentThread cause a conflict on Mac OS X
Packit 1fb8d4
 */
Packit Service 5a9772
#define _GetCurrentProcess GetCurrentProcess
Packit Service 5a9772
#define _GetCurrentThread GetCurrentThread
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
	/* CommandLineToArgvA is not present in the original Windows API, WinPR always exports it */
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API LPSTR* CommandLineToArgvA(LPCSTR lpCmdLine, int* pNumArgs);
Packit 1fb8d4
Packit 1fb8d4
#if defined(WITH_DEBUG_THREADS)
Packit Service 5a9772
	WINPR_API VOID DumpThreadHandles(void);
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif /* WINPR_THREAD_H */