#pragma once #include "minwinbase.h" #include "types.h" struct PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; }; using PPROCESS_INFORMATION = PROCESS_INFORMATION *; using LPPROCESS_INFORMATION = PROCESS_INFORMATION *; struct STARTUPINFOA { DWORD cb; GUEST_PTR lpReserved; GUEST_PTR lpDesktop; GUEST_PTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow; WORD cbReserved2; GUEST_PTR lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; }; using LPSTARTUPINFOA = STARTUPINFOA *; struct STARTUPINFOW { DWORD cb; GUEST_PTR lpReserved; GUEST_PTR lpDesktop; GUEST_PTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow; WORD cbReserved2; GUEST_PTR lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; }; using LPSTARTUPINFOW = STARTUPINFOW *; constexpr DWORD TLS_OUT_OF_INDEXES = 0xFFFFFFFFu; constexpr DWORD NORMAL_PRIORITY_CLASS = 0x00000020; typedef DWORD(_CC_STDCALL *LPTHREAD_START_ROUTINE)(LPVOID); namespace kernel32 { HANDLE WINAPI GetCurrentProcess(); DWORD WINAPI GetCurrentProcessId(); DWORD WINAPI GetCurrentThreadId(); HANDLE WINAPI GetCurrentThread(); BOOL WINAPI IsProcessorFeaturePresent(DWORD ProcessorFeature); BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask); BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask); DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask); DWORD WINAPI ResumeThread(HANDLE hThread); HRESULT WINAPI SetThreadDescription(HANDLE hThread, LPCWSTR lpThreadDescription); void WINAPI ExitProcess(UINT uExitCode); BOOL WINAPI TerminateProcess(HANDLE hProcess, UINT uExitCode); BOOL WINAPI GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode); DWORD WINAPI TlsAlloc(); BOOL WINAPI TlsFree(DWORD dwTlsIndex); LPVOID WINAPI TlsGetValue(DWORD dwTlsIndex); BOOL WINAPI TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue); HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); [[noreturn]] void WINAPI ExitThread(DWORD dwExitCode); BOOL WINAPI GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode); BOOL WINAPI SetThreadPriority(HANDLE hThread, int nPriority); int WINAPI GetThreadPriority(HANDLE hThread); DWORD WINAPI GetPriorityClass(HANDLE hProcess); BOOL WINAPI GetThreadTimes(HANDLE hThread, FILETIME *lpCreationTime, FILETIME *lpExitTime, FILETIME *lpKernelTime, FILETIME *lpUserTime); BOOL WINAPI CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); BOOL WINAPI CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); void WINAPI GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo); void WINAPI GetStartupInfoW(LPSTARTUPINFOW lpStartupInfo); BOOL WINAPI SetThreadStackGuarantee(PULONG StackSizeInBytes); } // namespace kernel32