| /* |
| * Copyright 2021 Brendan Shanks for CodeWeavers |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #ifndef _PROCESSTHREADSAPI_H |
| #define _PROCESSTHREADSAPI_H |
| |
| #include <apisetcconv.h> |
| #include <minwindef.h> |
| #include <minwinbase.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef struct _PROCESS_INFORMATION |
| { |
| HANDLE hProcess; |
| HANDLE hThread; |
| DWORD dwProcessId; |
| DWORD dwThreadId; |
| } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; |
| |
| typedef struct _PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST; |
| |
| typedef struct _STARTUPINFOA |
| { |
| DWORD cb; |
| LPSTR lpReserved; |
| LPSTR lpDesktop; |
| LPSTR lpTitle; |
| DWORD dwX; |
| DWORD dwY; |
| DWORD dwXSize; |
| DWORD dwYSize; |
| DWORD dwXCountChars; |
| DWORD dwYCountChars; |
| DWORD dwFillAttribute; |
| DWORD dwFlags; |
| WORD wShowWindow; |
| WORD cbReserved2; |
| BYTE *lpReserved2; |
| HANDLE hStdInput; |
| HANDLE hStdOutput; |
| HANDLE hStdError; |
| } STARTUPINFOA, *LPSTARTUPINFOA; |
| |
| typedef struct _STARTUPINFOW |
| { |
| DWORD cb; |
| LPWSTR lpReserved; |
| LPWSTR lpDesktop; |
| LPWSTR lpTitle; |
| DWORD dwX; |
| DWORD dwY; |
| DWORD dwXSize; |
| DWORD dwYSize; |
| DWORD dwXCountChars; |
| DWORD dwYCountChars; |
| DWORD dwFillAttribute; |
| DWORD dwFlags; |
| WORD wShowWindow; |
| WORD cbReserved2; |
| BYTE *lpReserved2; |
| HANDLE hStdInput; |
| HANDLE hStdOutput; |
| HANDLE hStdError; |
| } STARTUPINFOW, *LPSTARTUPINFOW; |
| |
| DECL_WINELIB_TYPE_AW(STARTUPINFO) |
| DECL_WINELIB_TYPE_AW(LPSTARTUPINFO) |
| |
| typedef enum _PROCESS_INFORMATION_CLASS |
| { |
| ProcessMemoryPriority, |
| ProcessMemoryExhaustionInfo, |
| ProcessAppMemoryInfo, |
| ProcessInPrivateInfo, |
| ProcessPowerThrottling, |
| ProcessReservedValue1, |
| ProcessTelemetryCoverageInfo, |
| ProcessProtectionLevelInfo, |
| ProcessLeapSecondInfo, |
| ProcessMachineTypeInfo, |
| ProcessInformationClassMax |
| } PROCESS_INFORMATION_CLASS; |
| |
| typedef enum _THREAD_INFORMATION_CLASS |
| { |
| ThreadMemoryPriority, |
| ThreadAbsoluteCpuPriority, |
| ThreadDynamicCodePolicy, |
| ThreadPowerThrottling, |
| ThreadInformationClassMax |
| } THREAD_INFORMATION_CLASS; |
| |
| typedef enum _MACHINE_ATTRIBUTES |
| { |
| UserEnabled = 0x00000001, |
| KernelEnabled = 0x00000002, |
| Wow64Container = 0x00000004, |
| } MACHINE_ATTRIBUTES; |
| |
| typedef struct _PROCESS_MACHINE_INFORMATION |
| { |
| USHORT ProcessMachine; |
| USHORT Res0; |
| MACHINE_ATTRIBUTES MachineAttributes; |
| } PROCESS_MACHINE_INFORMATION; |
| |
| typedef struct _MEMORY_PRIORITY_INFORMATION |
| { |
| ULONG MemoryPriority; |
| } MEMORY_PRIORITY_INFORMATION, *PMEMORY_PRIORITY_INFORMATION; |
| |
| typedef struct _THREAD_POWER_THROTTLING_STATE |
| { |
| ULONG Version; |
| ULONG ControlMask; |
| ULONG StateMask; |
| } THREAD_POWER_THROTTLING_STATE; |
| |
| typedef void (CALLBACK *PAPCFUNC)(ULONG_PTR); |
| |
| typedef enum _QUEUE_USER_APC_FLAGS |
| { |
| QUEUE_USER_APC_FLAGS_NONE, |
| QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC = 0x00000001, |
| QUEUE_USER_APC_CALLBACK_DATA_CONTEXT = 0x00010000, |
| } QUEUE_USER_APC_FLAGS; |
| |
| typedef struct _APC_CALLBACK_DATA |
| { |
| ULONG_PTR Parameter; |
| CONTEXT *ContextRecord; |
| ULONG_PTR Reserved0; |
| ULONG_PTR Reserved1; |
| } APC_CALLBACK_DATA, *PAPC_CALLBACK_DATA; |
| |
| WINBASEAPI BOOL WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION); |
| WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); |
| #define CreateProcess WINELIB_NAME_AW(CreateProcess) |
| WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION); |
| WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); |
| #define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser) |
| WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); |
| WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD); |
| WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); |
| WINBASEAPI void WINAPI DeleteProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*); |
| WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitProcess(DWORD); |
| WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitThread(DWORD); |
| WINBASEAPI BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T); |
| WINBASEAPI VOID WINAPI FlushProcessWriteBuffers(void); |
| WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber(void); |
| WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx(PPROCESSOR_NUMBER); |
| WINBASEAPI VOID WINAPI GetCurrentThreadStackLimits(ULONG_PTR *, ULONG_PTR *); |
| WINBASEAPI BOOL WINAPI GetExitCodeProcess(HANDLE,LPDWORD); |
| WINBASEAPI BOOL WINAPI GetExitCodeThread(HANDLE,LPDWORD); |
| WINBASEAPI HRESULT WINAPI GetMachineTypeAttributes(USHORT,MACHINE_ATTRIBUTES *); |
| WINBASEAPI DWORD WINAPI GetPriorityClass(HANDLE); |
| WINBASEAPI DWORD WINAPI GetProcessId(HANDLE); |
| WINBASEAPI DWORD WINAPI GetProcessIdOfThread(HANDLE); |
| WINBASEAPI BOOL WINAPI GetProcessInformation(HANDLE,PROCESS_INFORMATION_CLASS,void*,DWORD); |
| WINBASEAPI BOOL WINAPI GetProcessPriorityBoost(HANDLE,PBOOL); |
| WINBASEAPI BOOL WINAPI GetProcessShutdownParameters(LPDWORD,LPDWORD); |
| WINBASEAPI BOOL WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME); |
| WINBASEAPI DWORD WINAPI GetProcessVersion(DWORD); |
| WINBASEAPI VOID WINAPI GetStartupInfoW(LPSTARTUPINFOW); |
| WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *); |
| WINBASEAPI HRESULT WINAPI GetThreadDescription(HANDLE,PWSTR *); |
| WINBASEAPI BOOL WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL); |
| WINBASEAPI DWORD WINAPI GetThreadId(HANDLE); |
| WINBASEAPI INT WINAPI GetThreadPriority(HANDLE); |
| WINBASEAPI BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL); |
| WINBASEAPI BOOL WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME); |
| WINBASEAPI BOOL WINAPI InitializeProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD,SIZE_T*); |
| WINBASEAPI BOOL WINAPI IsProcessorFeaturePresent(DWORD); |
| WINBASEAPI HANDLE WINAPI OpenProcess(DWORD,BOOL,DWORD); |
| WINADVAPI BOOL WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE); |
| WINBASEAPI HANDLE WINAPI OpenThread(DWORD,BOOL,DWORD); |
| WINADVAPI BOOL WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE); |
| WINBASEAPI BOOL WINAPI ProcessIdToSessionId(DWORD,DWORD*); |
| WINBASEAPI DWORD WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR); |
| WINBASEAPI DWORD WINAPI QueueUserAPC2(PAPCFUNC,HANDLE,ULONG_PTR,QUEUE_USER_APC_FLAGS); |
| WINBASEAPI DWORD WINAPI ResumeThread(HANDLE); |
| WINBASEAPI BOOL WINAPI SetPriorityClass(HANDLE,DWORD); |
| WINBASEAPI BOOL WINAPI SetProcessInformation(HANDLE,PROCESS_INFORMATION_CLASS,LPVOID,DWORD); |
| WINBASEAPI BOOL WINAPI SetProcessPriorityBoost(HANDLE,BOOL); |
| WINBASEAPI BOOL WINAPI SetProcessShutdownParameters(DWORD,DWORD); |
| WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT *); |
| WINBASEAPI HRESULT WINAPI SetThreadDescription(HANDLE,PCWSTR); |
| WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD); |
| WINBASEAPI BOOL WINAPI SetThreadIdealProcessorEx(HANDLE, PROCESSOR_NUMBER *, PROCESSOR_NUMBER *); |
| WINBASEAPI BOOL WINAPI SetThreadInformation(HANDLE,THREAD_INFORMATION_CLASS,LPVOID,DWORD); |
| WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,INT); |
| WINBASEAPI BOOL WINAPI SetThreadPriorityBoost(HANDLE,BOOL); |
| WINADVAPI BOOL WINAPI SetThreadToken(PHANDLE,HANDLE); |
| WINBASEAPI DWORD WINAPI SuspendThread(HANDLE); |
| WINBASEAPI BOOL WINAPI SwitchToThread(void); |
| WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,UINT); |
| WINBASEAPI BOOL WINAPI TerminateThread(HANDLE,DWORD); |
| WINBASEAPI DWORD WINAPI TlsAlloc(void); |
| WINBASEAPI BOOL WINAPI TlsFree(DWORD); |
| WINBASEAPI LPVOID WINAPI TlsGetValue(DWORD); |
| WINBASEAPI BOOL WINAPI TlsSetValue(DWORD,LPVOID); |
| WINBASEAPI BOOL WINAPI UpdateProcThreadAttribute(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD_PTR,void*,SIZE_T,void*,SIZE_T*); |
| |
| #ifdef WINE_UNIX_LIB |
| |
| #define GetCurrentProcess() NtCurrentProcess() |
| #define GetCurrentThread() NtCurrentThread() |
| #define GetCurrentProcessId() HandleToULong(PsGetCurrentProcessId()) |
| #define GetCurrentThreadId() HandleToULong(PsGetCurrentThreadId()) |
| |
| #elif defined(__WINESRC__) |
| |
| static FORCEINLINE HANDLE WINAPI GetCurrentProcess(void) |
| { |
| return (HANDLE)~(ULONG_PTR)0; |
| } |
| |
| static FORCEINLINE DWORD WINAPI GetCurrentProcessId(void) |
| { |
| return HandleToULong( ((HANDLE *)NtCurrentTeb())[8] ); |
| } |
| |
| static FORCEINLINE HANDLE WINAPI GetCurrentThread(void) |
| { |
| return (HANDLE)~(ULONG_PTR)1; |
| } |
| |
| static FORCEINLINE DWORD WINAPI GetCurrentThreadId(void) |
| { |
| return HandleToULong( ((HANDLE *)NtCurrentTeb())[9] ); |
| } |
| |
| #else /* __WINESRC__ */ |
| |
| WINBASEAPI HANDLE WINAPI GetCurrentProcess(void); |
| WINBASEAPI DWORD WINAPI GetCurrentProcessId(void); |
| WINBASEAPI HANDLE WINAPI GetCurrentThread(void); |
| WINBASEAPI DWORD WINAPI GetCurrentThreadId(void); |
| |
| #endif /* __WINESRC__ */ |
| |
| static FORCEINLINE HANDLE WINAPI GetCurrentProcessToken(void) |
| { |
| return (HANDLE)~(ULONG_PTR)3; |
| } |
| |
| static FORCEINLINE HANDLE WINAPI GetCurrentThreadToken(void) |
| { |
| return (HANDLE)~(ULONG_PTR)4; |
| } |
| |
| static FORCEINLINE HANDLE WINAPI GetCurrentThreadEffectiveToken(void) |
| { |
| return (HANDLE)~(ULONG_PTR)5; |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _PROCESSTHREADSAPI_H */ |