11#ifndef _METERPRETER_COMMON_WINAPI_H
22#define _METERPRETER_COMMON_WINAPI_H
33#include <winsock2.h> // For SOCKET, WSADATA, sockaddr, WSAPROTOCOL_INFOA
4+ #include <ws2tcpip.h> // For ADDRINFOA / PADDRINFOA
45#include <windows.h>
56#if !defined(__WINE_WINHTTP_H ) && !defined(_WINHTTPX_ )
67#include <wininet.h>
@@ -48,9 +49,22 @@ typedef struct _WinApiNtdll {
4849 NTSTATUS (* ZwProtectVirtualMemory )(HANDLE ProcessHandle , PVOID * BaseAddress , PSIZE_T RegionSize , ULONG NewProtect , PULONG OldProtect );
4950 NTSTATUS (* ZwQueryVirtualMemory )(HANDLE ProcessHandle , PVOID BaseAddress , MEMORY_INFORMATION_CLASS MemoryInformationClass , PVOID MemoryInformation , SIZE_T MemoryInformationLength , PSIZE_T ReturnLength );
5051 NTSTATUS (* ZwFreeVirtualMemory )(HANDLE ProcessHandle , PVOID * BaseAddress , PSIZE_T RegionSize , ULONG FreeType );
51- NTSTATUS (* NtQueueApcThread )(HANDLE ThreadHandle , PVOID ApcRoutine , PVOID ApcContext , PVOID Argument1 , PVOID Argument2 );
52- NTSTATUS (* NtOpenThread )(PHANDLE ThreadHandle , ACCESS_MASK DesiredAccess , OBJECT_ATTRIBUTES * ObjectAttributes , CLIENT_ID * ClientId );
52+ NTSTATUS (* ZwQueueApcThread )(HANDLE ThreadHandle , PVOID ApcRoutine , PVOID ApcContext , PVOID Argument1 , PVOID Argument2 );
53+ NTSTATUS (* ZwOpenThread )(PHANDLE ThreadHandle , ACCESS_MASK DesiredAccess , OBJECT_ATTRIBUTES * ObjectAttributes , CLIENT_ID * ClientId );
5354 NTSTATUS (* RtlGetVersion )(PRTL_OSVERSIONINFOEXW os );
55+ NTSTATUS (* ZwQueryInformationProcess )(HANDLE ProcessHandle , INT ProcessInformationClass , PVOID ProcessInformation , ULONG ProcessInformationLength , PULONG ReturnLength );
56+ NTSTATUS (* ZwQueryObject )(HANDLE Handle , INT ObjectInformationClass , PVOID ObjectInformation , ULONG ObjectInformationLength , PULONG ReturnLength );
57+ NTSTATUS (* ZwQueryInformationWorkerFactory )(HANDLE WorkerFactoryHandle , INT WorkerFactoryInformationClass , PVOID WorkerFactoryInformation , ULONG WorkerFactoryInformationLength , PULONG ReturnLength );
58+ NTSTATUS (* ZwSetInformationWorkerFactory )(HANDLE WorkerFactoryHandle , INT WorkerFactoryInformationClass , PVOID WorkerFactoryInformation , ULONG WorkerFactoryInformationLength );
59+ NTSTATUS (* ZwSetIoCompletion )(HANDLE IoCompletionHandle , PVOID KeyContext , PVOID ApcContext , NTSTATUS IoStatus , ULONG_PTR IoStatusInformation );
60+ NTSTATUS (* RtlCreateUserThread )(HANDLE ProcessHandle , PVOID SecurityDescriptor , BOOL CreateSuspended , ULONG StackZeroBits , SIZE_T StackReserve , SIZE_T StackCommit , PVOID StartAddress , PVOID StartParameter , PHANDLE ThreadHandle , PVOID ClientId );
61+ NTSTATUS (* ZwMapViewOfSection )(HANDLE SectionHandle , HANDLE ProcessHandle , PVOID * BaseAddress , ULONG ZeroBits , ULONG CommitSize , PLARGE_INTEGER SectionOffset , PULONG ViewSize , DWORD InheritDisposition , ULONG AllocationType , ULONG Win32Protect );
62+ NTSTATUS (* ZwCreateSection )(PHANDLE SectionHandle , ULONG DesiredAccess , OBJECT_ATTRIBUTES * ObjectAttributes , PLARGE_INTEGER MaximumSize , ULONG SectionPageProtection , ULONG AllocationAttributes , HANDLE FileHandle );
63+ NTSTATUS (* ZwOpenSection )(PHANDLE SectionHandle , ACCESS_MASK DesiredAccess , OBJECT_ATTRIBUTES * ObjectAttributes );
64+ NTSTATUS (* ZwOpenFile )(PHANDLE FileHandle , ACCESS_MASK DesiredAccess , OBJECT_ATTRIBUTES * ObjectAttributes , PVOID IoStatusBlock , ULONG ShareAccess , ULONG OpenOptions );
65+ NTSTATUS (* ZwQueryAttributesFile )(OBJECT_ATTRIBUTES * ObjectAttributes , PVOID FileInformation );
66+ NTSTATUS (* ZwClose )(HANDLE Handle );
67+ NTSTATUS (* ZwLockVirtualMemory )(HANDLE ProcessHandle , PVOID * BaseAddress , PULONG RegionSize , ULONG MapType );
5468} WinApiNtdll ;
5569
5670// kernel32.dll
@@ -90,6 +104,32 @@ typedef struct _WinApiKernel32 {
90104 HANDLE (* CreateThread )(LPSECURITY_ATTRIBUTES lpThreadAttributes , SIZE_T dwStackSize , LPTHREAD_START_ROUTINE lpStartAddress , LPVOID lpParameter , DWORD dwCreationFlags , LPDWORD lpThreadId );
91105 BOOL (* ResetEvent )(HANDLE hEvent );
92106 BOOL (* SetThreadErrorMode )(DWORD dwNewMode , LPDWORD lpOldMode );
107+ HMODULE (* GetModuleHandleA )(LPCSTR lpModuleName );
108+ HANDLE (* CreateFileW )(LPCWSTR lpFileName , DWORD dwDesiredAccess , DWORD dwShareMode , LPSECURITY_ATTRIBUTES lpSecurityAttributes , DWORD dwCreationDisposition , DWORD dwFlagsAndAttributes , HANDLE hTemplateFile );
109+ HANDLE (* CreateNamedPipeW )(LPCWSTR lpName , DWORD dwOpenMode , DWORD dwPipeMode , DWORD nMaxInstances , DWORD nOutBufferSize , DWORD nInBufferSize , DWORD nDefaultTimeOut , LPSECURITY_ATTRIBUTES lpSecurityAttributes );
110+ HANDLE (* CreateEventA )(LPSECURITY_ATTRIBUTES lpEventAttributes , BOOL bManualReset , BOOL bInitialState , LPCSTR lpName );
111+ HANDLE (* CreateEventW )(LPSECURITY_ATTRIBUTES lpEventAttributes , BOOL bManualReset , BOOL bInitialState , LPCWSTR lpName );
112+ BOOL (* SetEvent )(HANDLE hEvent );
113+ DWORD (* WaitForSingleObject )(HANDLE hHandle , DWORD dwMilliseconds );
114+ VOID (* Sleep )(DWORD dwMilliseconds );
115+ HANDLE (* GetProcessHeap )(VOID );
116+ LPVOID (* HeapAlloc )(HANDLE hHeap , DWORD dwFlags , SIZE_T dwBytes );
117+ BOOL (* HeapFree )(HANDLE hHeap , DWORD dwFlags , LPVOID lpMem );
118+ BOOL (* IsWow64Process )(HANDLE hProcess , PBOOL Wow64Process );
119+ BOOL (* ProcessIdToSessionId )(DWORD dwProcessId , DWORD * pSessionId );
120+ LPVOID (* HeapReAlloc )(HANDLE hHeap , DWORD dwFlags , LPVOID lpMem , SIZE_T dwBytes );
121+ HLOCAL (* LocalAlloc )(UINT uFlags , SIZE_T uBytes );
122+ VOID (* GetSystemTime )(LPSYSTEMTIME lpSystemTime );
123+ BOOL (* SystemTimeToFileTime )(const SYSTEMTIME * lpSystemTime , LPFILETIME lpFileTime );
124+ int (* MultiByteToWideChar )(UINT CodePage , DWORD dwFlags , LPCCH lpMultiByteStr , int cbMultiByte , LPWSTR lpWideCharStr , int cchWideChar );
125+ int (* WideCharToMultiByte )(UINT CodePage , DWORD dwFlags , LPCWCH lpWideCharStr , int cchWideChar , LPSTR lpMultiByteStr , int cbMultiByte , LPCCH lpDefaultChar , LPBOOL lpUsedDefaultChar );
126+ BOOL (* PeekNamedPipe )(HANDLE hNamedPipe , LPVOID lpBuffer , DWORD nBufferSize , LPDWORD lpBytesRead , LPDWORD lpTotalBytesAvail , LPDWORD lpBytesLeftThisMessage );
127+ BOOL (* SetNamedPipeHandleState )(HANDLE hNamedPipe , LPDWORD lpMode , LPDWORD lpMaxCollectionCount , LPDWORD lpCollectDataTimeout );
128+ BOOL (* ReleaseMutex )(HANDLE hMutex );
129+ HANDLE (* CreateMutexA )(LPSECURITY_ATTRIBUTES lpMutexAttributes , BOOL bInitialOwner , LPCSTR lpName );
130+ HANDLE (* CreateMutexW )(LPSECURITY_ATTRIBUTES lpMutexAttributes , BOOL bInitialOwner , LPCWSTR lpName );
131+ BOOL (* TerminateThread )(HANDLE hThread , DWORD dwExitCode );
132+ int (* lstrcmpW )(LPCWSTR lpString1 , LPCWSTR lpString2 );
93133} WinApiKernel32 ;
94134
95135// advapi32.dll
@@ -113,19 +153,25 @@ typedef struct _WinApiAdvApi32 {
113153 BOOL (* SetSecurityDescriptorDacl )(PSECURITY_DESCRIPTOR pSecurityDescriptor , BOOL bDaclPresent , PACL pDacl , BOOL bDaclDefaulted );
114154 BOOL (* SetSecurityDescriptorSacl )(PSECURITY_DESCRIPTOR pSecurityDescriptor , BOOL bSaclPresent , PACL pSacl , BOOL bSaclDefaulted );
115155 BOOL (* LookupPrivilegeValueW )(LPCWSTR lpSystemName , LPCWSTR lpName , PLUID lpLuid );
156+ BOOL (* CryptAcquireContextA )(HCRYPTPROV * phProv , LPCSTR szContainer , LPCSTR szProvider , DWORD dwProvType , DWORD dwFlags );
157+ BOOL (* CryptAcquireContextW )(HCRYPTPROV * phProv , LPCWSTR szContainer , LPCWSTR szProvider , DWORD dwProvType , DWORD dwFlags );
158+ BOOL (* AddMandatoryAce )(PACL pAcl , DWORD dwAceRevision , DWORD AceFlags , DWORD MandatoryPolicy , PSID pLabelSid );
116159} WinApiAdvApi32 ;
117160
118161// crypt32.dll
119162typedef struct _WinApiCrypt32 {
120163 BOOL (* CryptDecodeObjectEx )(DWORD dwCertEncodingType , LPCSTR lpszStructType , const BYTE * pbEncoded , DWORD cbEncoded , DWORD dwFlags , PCRYPT_DECODE_PARA pDecodePara , void * pvStructInfo , DWORD * pcbStructInfo );
121164 BOOL (* CryptImportPublicKeyInfo )(HCRYPTPROV hCryptProv , DWORD dwCertEncodingType , PCERT_PUBLIC_KEY_INFO pInfo , HCRYPTKEY * phKey );
122165 BOOL (* CertGetCertificateContextProperty )(PCCERT_CONTEXT pCertContext , DWORD dwPropId , void * pvData , DWORD * pcbData );
166+ BOOL (* CryptBinaryToStringA )(const BYTE * pbBinary , DWORD cbBinary , DWORD dwFlags , LPSTR pszString , DWORD * pcchString );
167+ BOOL (* CryptStringToBinaryA )(LPCSTR pszString , DWORD cchString , DWORD dwFlags , BYTE * pbBinary , DWORD * pcbBinary , DWORD * pdwSkip , DWORD * pdwFlags );
123168} WinApiCrypt32 ;
124169
125170// user32.dll
126171typedef struct _WinApiUser32 {
127172 BOOL (* GetUserObjectInformationA )(HANDLE hObj , int nIndex , PVOID pvInfo , DWORD nLength , LPDWORD lpnLengthNeeded );
128173 HDESK (* GetThreadDesktop )(DWORD dwThreadId );
174+ HWINSTA (* GetProcessWindowStation )(VOID );
129175} WinApiUser32 ;
130176
131177// ws2_32.dll
@@ -137,6 +183,20 @@ typedef struct _WinApiWs2_32 {
137183 int (* setsockopt )(SOCKET s , int level , int optname , const char * optval , int optlen );
138184 int (* recv )(SOCKET s , char * buf , int len , int flags );
139185 int (* WSADuplicateSocketA )(SOCKET s , DWORD dwProcessId , LPWSAPROTOCOL_INFOA lpProtocolInfo );
186+ int (* send )(SOCKET s , const char * buf , int len , int flags );
187+ int (* bind )(SOCKET s , const struct sockaddr * name , int namelen );
188+ int (* listen )(SOCKET s , int backlog );
189+ int (* closesocket )(SOCKET s );
190+ int (* select )(int nfds , fd_set * readfds , fd_set * writefds , fd_set * exceptfds , const struct timeval * timeout );
191+ struct hostent * (* gethostbyname )(const char * name );
192+ int (* getaddrinfo )(PCSTR pNodeName , PCSTR pServiceName , const ADDRINFOA * pHints , PADDRINFOA * ppResult );
193+ VOID (* freeaddrinfo )(PADDRINFOA pAddrInfo );
194+ u_short (* htons )(u_short hostshort );
195+ u_long (* htonl )(u_long hostlong );
196+ u_long (* ntohl )(u_long netlong );
197+ unsigned long (* inet_addr )(const char * cp );
198+ int (* WSAGetLastError )(VOID );
199+ char * (* inet_ntoa )(struct in_addr in );
140200} WinApiWs2_32 ;
141201
142202// wininet.dll
@@ -150,6 +210,7 @@ typedef struct _WinApiWinInet {
150210 BOOL (* InternetReadFile )(HINTERNET hFile , LPVOID lpBuffer , DWORD dwNumberOfBytesToRead , LPDWORD lpdwNumberOfBytesRead );
151211 BOOL (* InternetCloseHandle )(HINTERNET hInternet );
152212 BOOL (* InternetCrackUrlW )(LPCWSTR lpszUrl , DWORD dwUrlLength , DWORD dwFlags , LPURL_COMPONENTSW lpUrlComponents );
213+ BOOL (* HttpQueryInfoA )(HINTERNET hRequest , DWORD dwInfoLevel , LPVOID lpBuffer , LPDWORD lpdwBufferLength , LPDWORD lpdwIndex );
153214} WinApiWinInet ;
154215
155216// rpcrt4.dll
@@ -171,6 +232,8 @@ typedef struct _WinApiWinHttp {
171232 BOOL (* WinHttpReadData )(HINTERNET hRequest , LPVOID lpBuffer , DWORD dwNumberOfBytesToRead , LPDWORD lpdwNumberOfBytesRead );
172233 BOOL (* WinHttpQueryOption )(HINTERNET hInternet , DWORD dwOption , LPVOID lpBuffer , LPDWORD lpdwBufferLength );
173234 BOOL (* WinHttpCrackUrl )(LPCWSTR pwszUrl , DWORD dwUrlLength , DWORD dwFlags , LPURL_COMPONENTS lpUrlComponents );
235+ BOOL (* WinHttpCloseHandle )(HINTERNET hInternet );
236+ BOOL (* WinHttpWriteData )(HINTERNET hRequest , LPCVOID lpBuffer , DWORD dwNumberOfBytesToWrite , LPDWORD lpdwNumberOfBytesWritten );
174237} WinApiWinHttp ;
175238
176239// Top-level container for all dynamically resolved APIs.
0 commit comments