613 lines
15 KiB
C
613 lines
15 KiB
C
/** windows api function pointer define,
|
|
* functions or macros for dynamic bindings
|
|
* v0.1.5, developed by devseed
|
|
*
|
|
* macros:
|
|
* WINDYN_IMPLEMENT, include defines of each function
|
|
* WINDYN_SHARED, make function export
|
|
* WINDYN_STATIC, make function static
|
|
* WINDYN_NOINLINE, don't use inline function
|
|
*/
|
|
|
|
#ifndef _WINDYN_H
|
|
#define _WINDYN_H
|
|
#define WINDYN_VERSION 150
|
|
|
|
#ifdef USECOMPAT
|
|
#include "commdef_v100.h"
|
|
#else
|
|
#include "commdef.h"
|
|
#endif // USECOMPAT
|
|
|
|
// define specific macro
|
|
#ifdef WINDYN_API
|
|
#undef WINDYN_API
|
|
#endif
|
|
#ifdef WINDYN_API_DEF
|
|
#undef WINDYN_API_DEF
|
|
#endif
|
|
#ifdef WINDYN_API_EXPORT
|
|
#undef WINDYN_API_EXPORT
|
|
#endif
|
|
#ifdef WINDYN_API_INLINE
|
|
#undef WINDYN_API_INLINE
|
|
#endif
|
|
#ifdef WINDYN_STATIC
|
|
#define WINDYN_API_DEF static
|
|
#else
|
|
#define WINDYN_API_DEF extern
|
|
#endif // WINDYN_STATIC
|
|
#ifdef WINDYN_SHARED
|
|
#define WINDYN_API_EXPORT EXPORT
|
|
#else
|
|
#define WINDYN_API_EXPORT
|
|
#endif // WINDYN_SHARED
|
|
#ifdef WINDYN_NOINLINE
|
|
#define WINDYN_API_INLINE
|
|
#else
|
|
#define WINDYN_API_INLINE INLINE
|
|
#endif // WINDYN_NOINLINE
|
|
#define WINDYN_API WINDYN_API_DEF WINDYN_API_EXPORT WINDYN_API_INLINE
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#include <winternl.h>
|
|
#include <tlhelp32.h>
|
|
|
|
// function pointer declear
|
|
typedef HMODULE (WINAPI* PFN_LoadLibraryA)(
|
|
LPCSTR lpLibFileName
|
|
);
|
|
|
|
typedef FARPROC (WINAPI* PFN_GetProcAddress)(
|
|
HMODULE hModule,
|
|
LPCSTR lpProcName
|
|
);
|
|
|
|
typedef HMODULE (WINAPI *PFN_GetModuleHandleA)(
|
|
LPCSTR lpModuleName
|
|
);
|
|
|
|
typedef LPVOID (WINAPI *PFN_VirtualAllocEx)(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flAllocationType,
|
|
DWORD flProtect
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_VirtualFreeEx)(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD dwFreeType
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_VirtualProtectEx)(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flNewProtect,
|
|
PDWORD lpflOldProtect
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_CreateProcessA)(
|
|
LPCSTR lpApplicationName,
|
|
LPSTR lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
BOOL bInheritHandles,
|
|
DWORD dwCreationFlags,
|
|
LPVOID lpEnvironment,
|
|
LPCSTR lpCurrentDirectory,
|
|
LPSTARTUPINFOA lpStartupInfo,
|
|
LPPROCESS_INFORMATION lpProcessInformation
|
|
);
|
|
|
|
typedef HANDLE (WINAPI *PFN_OpenProcess)(
|
|
DWORD dwDesiredAccess,
|
|
BOOL bInheritHandle,
|
|
DWORD dwProcessId
|
|
);
|
|
|
|
typedef HANDLE (WINAPI *PFN_GetCurrentProcess)(
|
|
VOID
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_ReadProcessMemory)(
|
|
HANDLE hProcess,
|
|
LPCVOID lpBaseAddress,
|
|
LPVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesRead
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_WriteProcessMemory)(
|
|
HANDLE hProcess,
|
|
LPVOID lpBaseAddress,
|
|
LPCVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesWritten
|
|
);
|
|
|
|
typedef HANDLE (WINAPI *PFN_CreateRemoteThread)(
|
|
HANDLE hProcess,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
SIZE_T dwStackSize,
|
|
LPTHREAD_START_ROUTINE lpStartAddress,
|
|
LPVOID lpParameter,
|
|
DWORD dwCreationFlags,
|
|
LPDWORD lpThreadId
|
|
);
|
|
|
|
typedef HANDLE (WINAPI *PFN_GetCurrentThread)(
|
|
VOID
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_SuspendThread)(
|
|
HANDLE hThread
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_ResumeThread)(
|
|
HANDLE hThread
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_GetThreadContext)(
|
|
HANDLE hThread,
|
|
LPCONTEXT lpContext
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_SetThreadContext)(
|
|
HANDLE hThread,
|
|
CONST CONTEXT* lpContext
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_WaitForSingleObject)(
|
|
HANDLE hHandle,
|
|
DWORD dwMilliseconds
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_CloseHandle)(
|
|
HANDLE hObject
|
|
);
|
|
|
|
typedef HANDLE (WINAPI *PFN_CreateToolhelp32Snapshot)(
|
|
DWORD dwFlags,
|
|
DWORD th32ProcessID
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_Process32First)(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe
|
|
);
|
|
|
|
typedef BOOL (WINAPI *PFN_Process32Next)(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI * PFN_NtQueryInformationProcess)(
|
|
IN HANDLE ProcessHandle,
|
|
IN PROCESSINFOCLASS ProcessInformationClass,
|
|
OUT PVOID ProcessInformation,
|
|
IN ULONG ProcessInformationLength,
|
|
OUT PULONG ReturnLength
|
|
);
|
|
|
|
// util inline functions and macro declear
|
|
#define WINDYN_FINDEXP(mempe, funcname, exp)\
|
|
{\
|
|
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mempe;\
|
|
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)\
|
|
((uint8_t*)mempe + pDosHeader->e_lfanew);\
|
|
PIMAGE_FILE_HEADER pFileHeader = &pNtHeader->FileHeader;\
|
|
PIMAGE_OPTIONAL_HEADER pOptHeader = &pNtHeader->OptionalHeader;\
|
|
PIMAGE_DATA_DIRECTORY pDataDirectory = pOptHeader->DataDirectory;\
|
|
PIMAGE_DATA_DIRECTORY pExpEntry =\
|
|
&pDataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];\
|
|
PIMAGE_EXPORT_DIRECTORY pExpDescriptor =\
|
|
(PIMAGE_EXPORT_DIRECTORY)((uint8_t*)mempe + pExpEntry->VirtualAddress);\
|
|
WORD* ordrva = (WORD*)((uint8_t*)mempe\
|
|
+ pExpDescriptor->AddressOfNameOrdinals);\
|
|
DWORD* namerva = (DWORD*)((uint8_t*)mempe\
|
|
+ pExpDescriptor->AddressOfNames);\
|
|
DWORD* funcrva = (DWORD*)((uint8_t*)mempe\
|
|
+ pExpDescriptor->AddressOfFunctions);\
|
|
if ((size_t)funcname <= MAXWORD)\
|
|
{\
|
|
WORD ordbase = LOWORD(pExpDescriptor->Base) - 1;\
|
|
WORD funcord = LOWORD(funcname);\
|
|
exp = (void*)((uint8_t*)mempe + funcrva[ordrva[funcord - ordbase]]);\
|
|
}\
|
|
else\
|
|
{\
|
|
for (DWORD i = 0; i < pExpDescriptor->NumberOfNames; i++)\
|
|
{\
|
|
LPCSTR curname = (LPCSTR)((uint8_t*)mempe + namerva[i]);\
|
|
if (inl_stricmp(curname, funcname) == 0)\
|
|
{\
|
|
exp = (void*)((uint8_t*)mempe + funcrva[ordrva[i]]); \
|
|
break;\
|
|
}\
|
|
}\
|
|
}\
|
|
}
|
|
|
|
#define WINDYN_FINDMODULE(peb, modulename, hmod)\
|
|
{\
|
|
typedef struct _LDR_ENTRY \
|
|
{\
|
|
LIST_ENTRY InLoadOrderLinks; \
|
|
LIST_ENTRY InMemoryOrderLinks;\
|
|
LIST_ENTRY InInitializationOrderLinks;\
|
|
PVOID DllBase;\
|
|
PVOID EntryPoint;\
|
|
ULONG SizeOfImage;\
|
|
UNICODE_STRING FullDllName;\
|
|
UNICODE_STRING BaseDllName;\
|
|
ULONG Flags;\
|
|
USHORT LoadCount;\
|
|
USHORT TlsIndex;\
|
|
union\
|
|
{\
|
|
LIST_ENTRY HashLinks;\
|
|
struct\
|
|
{\
|
|
PVOID SectionPointer;\
|
|
ULONG CheckSum;\
|
|
};\
|
|
};\
|
|
ULONG TimeDateStamp;\
|
|
} LDR_ENTRY, * PLDR_ENTRY; \
|
|
PLDR_ENTRY ldrentry = NULL;\
|
|
PPEB_LDR_DATA ldr = NULL;\
|
|
if (!peb)\
|
|
{\
|
|
PTEB teb = NtCurrentTeb();\
|
|
if(sizeof(size_t)>4) peb = *(PPEB*)((uint8_t*)teb + 0x60);\
|
|
else peb = *(PPEB*)((uint8_t*)teb + 0x30);\
|
|
}\
|
|
if(sizeof(size_t)>4) ldr = *(PPEB_LDR_DATA*)((uint8_t*)peb + 0x18);\
|
|
else ldr = *(PPEB_LDR_DATA*)((uint8_t*)peb + 0xC);\
|
|
ldrentry = (PLDR_ENTRY)((size_t)\
|
|
ldr->InMemoryOrderModuleList.Flink - 2 * sizeof(size_t));\
|
|
if (!modulename)\
|
|
{\
|
|
hmod = ldrentry->DllBase;\
|
|
}\
|
|
else\
|
|
{\
|
|
while (ldrentry->InMemoryOrderLinks.Flink != \
|
|
ldr->InMemoryOrderModuleList.Flink)\
|
|
{\
|
|
PUNICODE_STRING ustr = &ldrentry->FullDllName; \
|
|
int i; \
|
|
for (i = ustr->Length / 2 - 1; i > 0 && ustr->Buffer[i] != '\\'; i--); \
|
|
if (ustr->Buffer[i] == '\\') i++; \
|
|
if (inl_stricmp2(modulename, ustr->Buffer + i) == 0)\
|
|
{\
|
|
hmod = ldrentry->DllBase; \
|
|
break; \
|
|
}\
|
|
ldrentry = (PLDR_ENTRY)((size_t)\
|
|
ldrentry->InMemoryOrderLinks.Flink - 2 * sizeof(size_t)); \
|
|
}\
|
|
}\
|
|
}
|
|
|
|
#define WINDYN_FINDKERNEL32(kernel32)\
|
|
{\
|
|
PPEB peb = NULL;\
|
|
char name_kernel32[] = { 'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l', '\0' }; \
|
|
WINDYN_FINDMODULE(peb, name_kernel32, kernel32);\
|
|
}
|
|
|
|
#define WINDYN_FINDLOADLIBRARYA(kernel32, pfnLoadLibraryA)\
|
|
{\
|
|
char name_LoadLibraryA[] = { 'L', 'o', 'a', 'd', 'L', 'i', 'b', 'r', 'a', 'r', 'y', 'A', '\0' };\
|
|
WINDYN_FINDEXP((void*)kernel32, name_LoadLibraryA, pfnLoadLibraryA);\
|
|
}\
|
|
|
|
#define WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress)\
|
|
{\
|
|
char name_GetProcAddress[] = { 'G', 'e', 't', 'P', 'r', 'o', 'c', 'A', 'd', 'd', 'r', 'e', 's', 's', '\0' }; \
|
|
WINDYN_FINDEXP((void*)kernel32, name_GetProcAddress, pfnGetProcAddress);\
|
|
}
|
|
|
|
// winapi inline functions declear
|
|
WINDYN_API
|
|
HMODULE WINAPI windyn_GetModuleHandleA(
|
|
LPCSTR lpModuleName);
|
|
|
|
WINDYN_API
|
|
HMODULE WINAPI windyn_LoadLibraryA(
|
|
LPCSTR lpLibFileName);
|
|
|
|
WINDYN_API
|
|
FARPROC WINAPI windyn_GetProcAddress(
|
|
HMODULE hModule,
|
|
LPCSTR lpProcName);
|
|
|
|
WINDYN_API
|
|
LPVOID WINAPI windyn_VirtualAllocEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flAllocationType,
|
|
DWORD flProtect);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_VirtualFreeEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD dwFreeType);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_VirtualProtectEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flNewProtect,
|
|
PDWORD lpflOldProtect);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_CreateProcessA(
|
|
LPCSTR lpApplicationName,
|
|
LPSTR lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
BOOL bInheritHandles,
|
|
DWORD dwCreationFlags,
|
|
LPVOID lpEnvironment,
|
|
LPCSTR lpCurrentDirectory,
|
|
LPSTARTUPINFOA lpStartupInfo,
|
|
LPPROCESS_INFORMATION lpProcessInformation);
|
|
|
|
WINDYN_API
|
|
HANDLE WINAPI windyn_OpenProcess(
|
|
DWORD dwDesiredAccess,
|
|
BOOL bInheritHandle,
|
|
DWORD dwProcessId);
|
|
|
|
WINDYN_API
|
|
HANDLE WINAPI windyn_GetCurrentProcess(
|
|
VOID);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_ReadProcessMemory(
|
|
HANDLE hProcess,
|
|
LPCVOID lpBaseAddress,
|
|
LPVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesRead);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_WriteProcessMemory(
|
|
HANDLE hProcess,
|
|
LPVOID lpBaseAddress,
|
|
LPCVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesWritten);
|
|
|
|
WINDYN_API
|
|
HANDLE WINAPI windyn_CreateRemoteThread(
|
|
HANDLE hProcess,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
SIZE_T dwStackSize,
|
|
LPTHREAD_START_ROUTINE lpStartAddress,
|
|
LPVOID lpParameter,
|
|
DWORD dwCreationFlags,
|
|
LPDWORD lpThreadId);
|
|
|
|
WINDYN_API
|
|
HANDLE WINAPI windyn_GetCurrentThread(
|
|
VOID);
|
|
|
|
WINDYN_API
|
|
DWORD WINAPI windyn_SuspendThread(
|
|
HANDLE hThread);
|
|
|
|
WINDYN_API
|
|
DWORD WINAPI windyn_ResumeThread(
|
|
HANDLE hThread);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_GetThreadContext(
|
|
HANDLE hThread,
|
|
LPCONTEXT lpContext);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_SetThreadContext(
|
|
HANDLE hThread,
|
|
CONST CONTEXT* lpContext);
|
|
|
|
WINDYN_API
|
|
DWORD WINAPI windyn_WaitForSingleObject(
|
|
HANDLE hHandle,
|
|
DWORD dwMilliseconds);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_CloseHandle(
|
|
HANDLE hObject);
|
|
|
|
WINDYN_API
|
|
HANDLE WINAPI windyn_CreateToolhelp32Snapshot(
|
|
DWORD dwFlags,
|
|
DWORD th32ProcessID);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_Process32First(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe);
|
|
|
|
WINDYN_API
|
|
BOOL WINAPI windyn_Process32Next(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe);
|
|
|
|
#ifdef WINDYN_IMPLEMENTATION
|
|
#include <windows.h>
|
|
#include <winternl.h>
|
|
// util functions
|
|
|
|
// winapi inline functions define
|
|
HMODULE WINAPI windyn_GetModuleHandleA(
|
|
LPCSTR lpModuleName)
|
|
{
|
|
PPEB peb = NULL;
|
|
HMODULE hmod = NULL;
|
|
WINDYN_FINDMODULE(peb, lpModuleName, hmod);
|
|
return hmod;
|
|
}
|
|
|
|
HMODULE WINAPI windyn_LoadLibraryA(
|
|
LPCSTR lpLibFileName)
|
|
{
|
|
HMODULE kernel32 = NULL;
|
|
WINDYN_FINDKERNEL32(kernel32);
|
|
PFN_LoadLibraryA pfnLoadLibraryA = NULL;
|
|
WINDYN_FINDLOADLIBRARYA(kernel32, pfnLoadLibraryA);
|
|
return pfnLoadLibraryA(lpLibFileName);
|
|
}
|
|
|
|
FARPROC WINAPI windyn_GetProcAddress(
|
|
HMODULE hModule,
|
|
LPCSTR lpProcName)
|
|
{
|
|
HMODULE kernel32 = NULL;
|
|
WINDYN_FINDKERNEL32(kernel32);
|
|
PFN_GetProcAddress pfnGetProcAddress = NULL;
|
|
WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress);
|
|
return pfnGetProcAddress(hModule, lpProcName);
|
|
}
|
|
|
|
LPVOID WINAPI windyn_VirtualAllocEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flAllocationType,
|
|
DWORD flProtect)
|
|
{
|
|
HMODULE kernel32 = NULL;
|
|
WINDYN_FINDKERNEL32(kernel32);
|
|
PFN_GetProcAddress pfnGetProcAddress = NULL;
|
|
WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress);
|
|
char name_VirtualAllocEx[] = { 'V', 'i', 'r', 't', 'u', 'a', 'l', 'A', 'l', 'l', 'o', 'c', 'E', 'x', '\0'};
|
|
PFN_VirtualAllocEx pfnVirtualAllocEx = (PFN_VirtualAllocEx)pfnGetProcAddress(kernel32, name_VirtualAllocEx);
|
|
return pfnVirtualAllocEx(hProcess, lpAddress, dwSize, flAllocationType, flProtect);
|
|
}
|
|
|
|
// todo
|
|
BOOL WINAPI windyn_VirtualFreeEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD dwFreeType);
|
|
|
|
BOOL WINAPI windyn_VirtualProtectEx(
|
|
HANDLE hProcess,
|
|
LPVOID lpAddress,
|
|
SIZE_T dwSize,
|
|
DWORD flNewProtect,
|
|
PDWORD lpflOldProtect);
|
|
|
|
BOOL WINAPI windyn_CreateProcessA(
|
|
LPCSTR lpApplicationName,
|
|
LPSTR lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
BOOL bInheritHandles,
|
|
DWORD dwCreationFlags,
|
|
LPVOID lpEnvironment,
|
|
LPCSTR lpCurrentDirectory,
|
|
LPSTARTUPINFOA lpStartupInfo,
|
|
LPPROCESS_INFORMATION lpProcessInformation);
|
|
|
|
HANDLE WINAPI windyn_OpenProcess(
|
|
DWORD dwDesiredAccess,
|
|
BOOL bInheritHandle,
|
|
DWORD dwProcessId);
|
|
|
|
HANDLE WINAPI windyn_GetCurrentProcess(
|
|
VOID);
|
|
|
|
BOOL WINAPI windyn_ReadProcessMemory(
|
|
HANDLE hProcess,
|
|
LPCVOID lpBaseAddress,
|
|
LPVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesRead);
|
|
|
|
BOOL WINAPI windyn_WriteProcessMemory(
|
|
HANDLE hProcess,
|
|
LPVOID lpBaseAddress,
|
|
LPCVOID lpBuffer,
|
|
SIZE_T nSize,
|
|
SIZE_T* lpNumberOfBytesWritten);
|
|
|
|
HANDLE WINAPI windyn_CreateRemoteThread(
|
|
HANDLE hProcess,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
SIZE_T dwStackSize,
|
|
LPTHREAD_START_ROUTINE lpStartAddress,
|
|
LPVOID lpParameter,
|
|
DWORD dwCreationFlags,
|
|
LPDWORD lpThreadId);
|
|
|
|
HANDLE WINAPI windyn_GetCurrentThread(
|
|
VOID);
|
|
|
|
DWORD WINAPI windyn_SuspendThread(
|
|
HANDLE hThread);
|
|
|
|
DWORD WINAPI windyn_ResumeThread(
|
|
HANDLE hThread);
|
|
|
|
BOOL WINAPI windyn_GetThreadContext(
|
|
HANDLE hThread,
|
|
LPCONTEXT lpContext);
|
|
|
|
BOOL WINAPI windyn_SetThreadContext(
|
|
HANDLE hThread,
|
|
CONST CONTEXT* lpContext);
|
|
|
|
DWORD WINAPI windyn_WaitForSingleObject(
|
|
HANDLE hHandle,
|
|
DWORD dwMilliseconds);
|
|
|
|
BOOL WINAPI windyn_CloseHandle(
|
|
HANDLE hObject);
|
|
|
|
HANDLE WINAPI windyn_CreateToolhelp32Snapshot(
|
|
DWORD dwFlags,
|
|
DWORD th32ProcessID);
|
|
|
|
BOOL WINAPI windyn_Process32First(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe);
|
|
|
|
BOOL WINAPI windyn_Process32Next(
|
|
HANDLE hSnapshot,
|
|
LPPROCESSENTRY32 lppe);
|
|
|
|
#endif // WINDYN_IMPLEMENTATION
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // _WINDYN_H
|
|
|
|
/**
|
|
* history
|
|
* v0.1, initial version
|
|
* v0.1.1, add some function pointer
|
|
* v0.1.2, add some inline stdc function
|
|
* v0.1.3, add some inline windows api
|
|
* v0.1.4, improve macro style
|
|
* v0.1.5, seperate some macro to commdef
|
|
*/ |