1783 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			1783 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			C++
		
	
	
	
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Detours Test Program (trcssl.cpp of trcssl.dll)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Microsoft Research Detours Package
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Copyright (c) Microsoft Corporation.  All rights reserved.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								#define _WIN32_WINNT        0x0400
							 | 
						||
| 
								 | 
							
								#define WIN32
							 | 
						||
| 
								 | 
							
								#define NT
							 | 
						||
| 
								 | 
							
								#define SECURITY_WIN32
							 | 
						||
| 
								 | 
							
								#define _WINSOCK_DEPRECATED_NO_WARNINGS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define DBG_TRACE   0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if _MSC_VER >= 1300
							 | 
						||
| 
								 | 
							
								#include <winsock2.h>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#include <windows.h>
							 | 
						||
| 
								 | 
							
								#include <security.h>
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include "detours.h"
							 | 
						||
| 
								 | 
							
								#include "syelog.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define PULONG_PTR          PVOID
							 | 
						||
| 
								 | 
							
								#define PLONG_PTR           PVOID
							 | 
						||
| 
								 | 
							
								#define ULONG_PTR           PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESNAMEPROCA    PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESNAMEPROCW    PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESLANGPROCA    PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESLANGPROCW    PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESTYPEPROCA    PVOID
							 | 
						||
| 
								 | 
							
								#define ENUMRESTYPEPROCW    PVOID
							 | 
						||
| 
								 | 
							
								#define STGOPTIONS          PVOID
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								#pragma warning(disable:4127)   // Many of our asserts are constants.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ASSERT_ALWAYS(x)   \
							 | 
						||
| 
								 | 
							
								    do {                                                        \
							 | 
						||
| 
								 | 
							
								    if (!(x)) {                                                 \
							 | 
						||
| 
								 | 
							
								            AssertMessage(#x, __FILE__, __LINE__);              \
							 | 
						||
| 
								 | 
							
								            DebugBreak();                                       \
							 | 
						||
| 
								 | 
							
								    }                                                           \
							 | 
						||
| 
								 | 
							
								    } while (0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef NDEBUG
							 | 
						||
| 
								 | 
							
								#define ASSERT(x)           ASSERT_ALWAYS(x)
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define ASSERT(x)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define UNUSED(c)       (c) = (c)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								static HMODULE s_hInst = NULL;
							 | 
						||
| 
								 | 
							
								static WCHAR s_wzDllPath[MAX_PATH];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID _PrintDump(SOCKET socket, PCHAR pszData, INT cbData);
							 | 
						||
| 
								 | 
							
								VOID _PrintEnter(PCSTR psz, ...);
							 | 
						||
| 
								 | 
							
								VOID _PrintExit(PCSTR psz, ...);
							 | 
						||
| 
								 | 
							
								VOID _Print(PCSTR psz, ...);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID AssertMessage(CONST PCHAR pszMsg, CONST PCHAR pszFile, ULONG nLine);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								    HANDLE (WINAPI * Real_CreateFileW)(LPCWSTR a0,
							 | 
						||
| 
								 | 
							
								                                       DWORD a1,
							 | 
						||
| 
								 | 
							
								                                       DWORD a2,
							 | 
						||
| 
								 | 
							
								                                       LPSECURITY_ATTRIBUTES a3,
							 | 
						||
| 
								 | 
							
								                                       DWORD a4,
							 | 
						||
| 
								 | 
							
								                                       DWORD a5,
							 | 
						||
| 
								 | 
							
								                                       HANDLE a6)
							 | 
						||
| 
								 | 
							
								        = CreateFileW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL (WINAPI * Real_WriteFile)(HANDLE hFile,
							 | 
						||
| 
								 | 
							
								                                   LPCVOID lpBuffer,
							 | 
						||
| 
								 | 
							
								                                   DWORD nNumberOfBytesToWrite,
							 | 
						||
| 
								 | 
							
								                                   LPDWORD lpNumberOfBytesWritten,
							 | 
						||
| 
								 | 
							
								                                   LPOVERLAPPED lpOverlapped)
							 | 
						||
| 
								 | 
							
								        = WriteFile;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL (WINAPI * Real_FlushFileBuffers)(HANDLE hFile)
							 | 
						||
| 
								 | 
							
								        = FlushFileBuffers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL (WINAPI * Real_CloseHandle)(HANDLE hObject)
							 | 
						||
| 
								 | 
							
								        = CloseHandle;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL (WINAPI * Real_WaitNamedPipeW)(LPCWSTR lpNamedPipeName, DWORD nTimeOut)
							 | 
						||
| 
								 | 
							
								        = WaitNamedPipeW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL (WINAPI * Real_SetNamedPipeHandleState)(HANDLE hNamedPipe,
							 | 
						||
| 
								 | 
							
								                                                 LPDWORD lpMode,
							 | 
						||
| 
								 | 
							
								                                                 LPDWORD lpMaxCollectionCount,
							 | 
						||
| 
								 | 
							
								                                                 LPDWORD lpCollectDataTimeout)
							 | 
						||
| 
								 | 
							
								        = SetNamedPipeHandleState;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DWORD (WINAPI * Real_GetCurrentProcessId)(VOID)
							 | 
						||
| 
								 | 
							
								        = GetCurrentProcessId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    VOID (WINAPI * Real_GetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime)
							 | 
						||
| 
								 | 
							
								        = GetSystemTimeAsFileTime;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    VOID (WINAPI * Real_InitializeCriticalSection)(LPCRITICAL_SECTION lpSection)
							 | 
						||
| 
								 | 
							
								        = InitializeCriticalSection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    VOID (WINAPI * Real_EnterCriticalSection)(LPCRITICAL_SECTION lpSection)
							 | 
						||
| 
								 | 
							
								        = EnterCriticalSection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    VOID (WINAPI * Real_LeaveCriticalSection)(LPCRITICAL_SECTION lpSection)
							 | 
						||
| 
								 | 
							
								        = LeaveCriticalSection;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DWORD (WINAPI * Real_GetModuleFileNameW)(HMODULE a0,
							 | 
						||
| 
								 | 
							
								                                         LPWSTR a1,
							 | 
						||
| 
								 | 
							
								                                         DWORD a2)
							 | 
						||
| 
								 | 
							
								    = GetModuleFileNameW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL (WINAPI * Real_CreateProcessW)(LPCWSTR a0,
							 | 
						||
| 
								 | 
							
								                                    LPWSTR a1,
							 | 
						||
| 
								 | 
							
								                                    LPSECURITY_ATTRIBUTES a2,
							 | 
						||
| 
								 | 
							
								                                    LPSECURITY_ATTRIBUTES a3,
							 | 
						||
| 
								 | 
							
								                                    BOOL a4,
							 | 
						||
| 
								 | 
							
								                                    DWORD a5,
							 | 
						||
| 
								 | 
							
								                                    LPVOID a6,
							 | 
						||
| 
								 | 
							
								                                    LPCWSTR a7,
							 | 
						||
| 
								 | 
							
								                                    LPSTARTUPINFOW a8,
							 | 
						||
| 
								 | 
							
								                                    LPPROCESS_INFORMATION a9)
							 | 
						||
| 
								 | 
							
								    = CreateProcessW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if _MSC_VER < 1300
							 | 
						||
| 
								 | 
							
								SOCKET (WINAPI * Real_WSAAccept)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                 sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                                 LPINT a2,
							 | 
						||
| 
								 | 
							
								                                 LPCONDITIONPROC a3,
							 | 
						||
| 
								 | 
							
								                                 DWORD a4)
							 | 
						||
| 
								 | 
							
								    = WSAAccept;
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								SOCKET (WINAPI * Real_WSAAccept)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                 sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                                 LPINT a2,
							 | 
						||
| 
								 | 
							
								                                 LPCONDITIONPROC a3,
							 | 
						||
| 
								 | 
							
								                                 DWORD_PTR a4)
							 | 
						||
| 
								 | 
							
								    = WSAAccept;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAAddressToStringA)(LPSOCKADDR a0,
							 | 
						||
| 
								 | 
							
								                                        DWORD a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOA a2,
							 | 
						||
| 
								 | 
							
								                                        LPSTR a3,
							 | 
						||
| 
								 | 
							
								                                        LPDWORD a4)
							 | 
						||
| 
								 | 
							
								    = WSAAddressToStringA;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAAddressToStringW)(LPSOCKADDR a0,
							 | 
						||
| 
								 | 
							
								                                        DWORD a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOW a2,
							 | 
						||
| 
								 | 
							
								                                        LPWSTR a3,
							 | 
						||
| 
								 | 
							
								                                        LPDWORD a4)
							 | 
						||
| 
								 | 
							
								    = WSAAddressToStringW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetHostByAddr)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                             u_int a1,
							 | 
						||
| 
								 | 
							
								                                             CONST char* a2,
							 | 
						||
| 
								 | 
							
								                                             int a3,
							 | 
						||
| 
								 | 
							
								                                             int a4,
							 | 
						||
| 
								 | 
							
								                                             char* a5,
							 | 
						||
| 
								 | 
							
								                                             int a6)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetHostByAddr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetHostByName)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                             u_int a1,
							 | 
						||
| 
								 | 
							
								                                             CONST char* a2,
							 | 
						||
| 
								 | 
							
								                                             char* a3,
							 | 
						||
| 
								 | 
							
								                                             int a4)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetHostByName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetProtoByName)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                              u_int a1,
							 | 
						||
| 
								 | 
							
								                                              CONST char* a2,
							 | 
						||
| 
								 | 
							
								                                              char* a3,
							 | 
						||
| 
								 | 
							
								                                              int a4)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetProtoByName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetProtoByNumber)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                                u_int a1,
							 | 
						||
| 
								 | 
							
								                                                int a2,
							 | 
						||
| 
								 | 
							
								                                                char* a3,
							 | 
						||
| 
								 | 
							
								                                                int a4)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetProtoByNumber;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetServByName)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                             u_int a1,
							 | 
						||
| 
								 | 
							
								                                             CONST char* a2,
							 | 
						||
| 
								 | 
							
								                                             CONST char* a3,
							 | 
						||
| 
								 | 
							
								                                             char* a4,
							 | 
						||
| 
								 | 
							
								                                             int a5)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetServByName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSAAsyncGetServByPort)(HWND a0,
							 | 
						||
| 
								 | 
							
								                                             u_int a1,
							 | 
						||
| 
								 | 
							
								                                             int a2,
							 | 
						||
| 
								 | 
							
								                                             CONST char* a3,
							 | 
						||
| 
								 | 
							
								                                             char* a4,
							 | 
						||
| 
								 | 
							
								                                             int a5)
							 | 
						||
| 
								 | 
							
								    = WSAAsyncGetServByPort;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSACancelAsyncRequest)(HANDLE a0)
							 | 
						||
| 
								 | 
							
								    = WSACancelAsyncRequest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSACancelBlockingCall)(void)
							 | 
						||
| 
								 | 
							
								    = WSACancelBlockingCall;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSACleanup)(void)
							 | 
						||
| 
								 | 
							
								    = WSACleanup;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL (WINAPI * Real_WSACloseEvent)(HANDLE a0)
							 | 
						||
| 
								 | 
							
								    = WSACloseEvent;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSAConnect)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                               CONST sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                               int a2,
							 | 
						||
| 
								 | 
							
								                               LPWSABUF a3,
							 | 
						||
| 
								 | 
							
								                               LPWSABUF a4,
							 | 
						||
| 
								 | 
							
								                               LPQOS a5,
							 | 
						||
| 
								 | 
							
								                               LPQOS a6)
							 | 
						||
| 
								 | 
							
								    = WSAConnect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE (WINAPI * Real_WSACreateEvent)(void)
							 | 
						||
| 
								 | 
							
								    = WSACreateEvent;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSADuplicateSocketA)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                        DWORD a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOA a2)
							 | 
						||
| 
								 | 
							
								    = WSADuplicateSocketA;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSADuplicateSocketW)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                        DWORD a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOW a2)
							 | 
						||
| 
								 | 
							
								    = WSADuplicateSocketW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAEnumNameSpaceProvidersA)(LPDWORD a0,
							 | 
						||
| 
								 | 
							
								                                               LPWSANAMESPACE_INFOA a1)
							 | 
						||
| 
								 | 
							
								    = WSAEnumNameSpaceProvidersA;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAEnumNameSpaceProvidersW)(LPDWORD a0,
							 | 
						||
| 
								 | 
							
								                                               LPWSANAMESPACE_INFOW a1)
							 | 
						||
| 
								 | 
							
								    = WSAEnumNameSpaceProvidersW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSAEnumNetworkEvents)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                         HANDLE a1,
							 | 
						||
| 
								 | 
							
								                                         LPWSANETWORKEVENTS a2)
							 | 
						||
| 
								 | 
							
								    = WSAEnumNetworkEvents;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSAEnumProtocolsA)(LPINT a0,
							 | 
						||
| 
								 | 
							
								                                      LPWSAPROTOCOL_INFOA a1,
							 | 
						||
| 
								 | 
							
								                                      LPDWORD a2)
							 | 
						||
| 
								 | 
							
								    = WSAEnumProtocolsA;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSAEnumProtocolsW)(LPINT a0,
							 | 
						||
| 
								 | 
							
								                                      LPWSAPROTOCOL_INFOW a1,
							 | 
						||
| 
								 | 
							
								                                      LPDWORD a2)
							 | 
						||
| 
								 | 
							
								    = WSAEnumProtocolsW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL (WINAPI * Real_WSAGetOverlappedResult)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                            LPWSAOVERLAPPED a1,
							 | 
						||
| 
								 | 
							
								                                            LPDWORD a2,
							 | 
						||
| 
								 | 
							
								                                            BOOL a3,
							 | 
						||
| 
								 | 
							
								                                            LPDWORD a4)
							 | 
						||
| 
								 | 
							
								    = WSAGetOverlappedResult;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL (WINAPI * Real_WSAIsBlocking)(void)
							 | 
						||
| 
								 | 
							
								    = WSAIsBlocking;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SOCKET (WINAPI * Real_WSAJoinLeaf)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                   CONST sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                                   int a2,
							 | 
						||
| 
								 | 
							
								                                   LPWSABUF a3,
							 | 
						||
| 
								 | 
							
								                                   LPWSABUF a4,
							 | 
						||
| 
								 | 
							
								                                   LPQOS a5,
							 | 
						||
| 
								 | 
							
								                                   LPQOS a6,
							 | 
						||
| 
								 | 
							
								                                   DWORD a7)
							 | 
						||
| 
								 | 
							
								    = WSAJoinLeaf;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAProviderConfigChange)(LPHANDLE a0,
							 | 
						||
| 
								 | 
							
								                                            LPWSAOVERLAPPED a1,
							 | 
						||
| 
								 | 
							
								                                            LPWSAOVERLAPPED_COMPLETION_ROUTINE a2)
							 | 
						||
| 
								 | 
							
								    = WSAProviderConfigChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSARecv)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                            LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                            DWORD a2,
							 | 
						||
| 
								 | 
							
								                            LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                            LPDWORD a4,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED a5,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
							 | 
						||
| 
								 | 
							
								    = WSARecv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSARecvDisconnect)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                      LPWSABUF a1)
							 | 
						||
| 
								 | 
							
								    = WSARecvDisconnect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSARecvFrom)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                                DWORD a2,
							 | 
						||
| 
								 | 
							
								                                LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                                LPDWORD a4,
							 | 
						||
| 
								 | 
							
								                                sockaddr* a5,
							 | 
						||
| 
								 | 
							
								                                LPINT a6,
							 | 
						||
| 
								 | 
							
								                                LPWSAOVERLAPPED a7,
							 | 
						||
| 
								 | 
							
								                                LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
							 | 
						||
| 
								 | 
							
								    = WSARecvFrom;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL (WINAPI * Real_WSAResetEvent)(HANDLE a0)
							 | 
						||
| 
								 | 
							
								    = WSAResetEvent;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSASend)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                            LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                            DWORD a2,
							 | 
						||
| 
								 | 
							
								                            LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                            DWORD a4,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED a5,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
							 | 
						||
| 
								 | 
							
								    = WSASend;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSASendDisconnect)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                      LPWSABUF a1)
							 | 
						||
| 
								 | 
							
								    = WSASendDisconnect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_WSASendTo)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                              LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                              DWORD a2,
							 | 
						||
| 
								 | 
							
								                              LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                              DWORD a4,
							 | 
						||
| 
								 | 
							
								                              CONST sockaddr* a5,
							 | 
						||
| 
								 | 
							
								                              int a6,
							 | 
						||
| 
								 | 
							
								                              LPWSAOVERLAPPED a7,
							 | 
						||
| 
								 | 
							
								                              LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
							 | 
						||
| 
								 | 
							
								    = WSASendTo;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAStringToAddressA)(LPSTR a0,
							 | 
						||
| 
								 | 
							
								                                        INT a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOA a2,
							 | 
						||
| 
								 | 
							
								                                        LPSOCKADDR a3,
							 | 
						||
| 
								 | 
							
								                                        LPINT a4)
							 | 
						||
| 
								 | 
							
								    = WSAStringToAddressA;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT (WINAPI * Real_WSAStringToAddressW)(LPWSTR a0,
							 | 
						||
| 
								 | 
							
								                                        INT a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAPROTOCOL_INFOW a2,
							 | 
						||
| 
								 | 
							
								                                        LPSOCKADDR a3,
							 | 
						||
| 
								 | 
							
								                                        LPINT a4)
							 | 
						||
| 
								 | 
							
								    = WSAStringToAddressW;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DWORD (WINAPI * Real_WSAWaitForMultipleEvents)(DWORD a0,
							 | 
						||
| 
								 | 
							
								                                               CONST HANDLE * a1,
							 | 
						||
| 
								 | 
							
								                                               BOOL a2,
							 | 
						||
| 
								 | 
							
								                                               DWORD a3,
							 | 
						||
| 
								 | 
							
								                                               BOOL a4)
							 | 
						||
| 
								 | 
							
								    = WSAWaitForMultipleEvents;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SOCKET (WINAPI * Real_accept)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                              sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                              int* a2)
							 | 
						||
| 
								 | 
							
								    = accept;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_closesocket)(SOCKET a0)
							 | 
						||
| 
								 | 
							
								    = closesocket;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_connect)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                            CONST sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                            int a2)
							 | 
						||
| 
								 | 
							
								    = connect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_listen)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                           int a1)
							 | 
						||
| 
								 | 
							
								    = listen;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_recv)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                         char* a1,
							 | 
						||
| 
								 | 
							
								                         int a2,
							 | 
						||
| 
								 | 
							
								                         int a3)
							 | 
						||
| 
								 | 
							
								    = recv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_recvfrom)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                             char* a1,
							 | 
						||
| 
								 | 
							
								                             int a2,
							 | 
						||
| 
								 | 
							
								                             int a3,
							 | 
						||
| 
								 | 
							
								                             sockaddr* a4,
							 | 
						||
| 
								 | 
							
								                             int* a5)
							 | 
						||
| 
								 | 
							
								    = recvfrom;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_send)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                         CONST char* a1,
							 | 
						||
| 
								 | 
							
								                         int a2,
							 | 
						||
| 
								 | 
							
								                         int a3)
							 | 
						||
| 
								 | 
							
								    = send;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_sendto)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                           CONST char* a1,
							 | 
						||
| 
								 | 
							
								                           int a2,
							 | 
						||
| 
								 | 
							
								                           int a3,
							 | 
						||
| 
								 | 
							
								                           CONST sockaddr* a4,
							 | 
						||
| 
								 | 
							
								                           int a5)
							 | 
						||
| 
								 | 
							
								    = sendto;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int (WINAPI * Real_shutdown)(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                             int a1)
							 | 
						||
| 
								 | 
							
								    = shutdown;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SECURITY_STATUS (SEC_ENTRY * Real_EncryptMessage)( PCtxtHandle         phContext,
							 | 
						||
| 
								 | 
							
								                                                   unsigned long       fQOP,
							 | 
						||
| 
								 | 
							
								                                                   PSecBufferDesc      pMessage,
							 | 
						||
| 
								 | 
							
								                                                   unsigned long       MessageSeqNo)
							 | 
						||
| 
								 | 
							
								    = EncryptMessage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SECURITY_STATUS (SEC_ENTRY * Real_DecryptMessage)( PCtxtHandle         phContext,
							 | 
						||
| 
								 | 
							
								                                                   PSecBufferDesc      pMessage,
							 | 
						||
| 
								 | 
							
								                                                   unsigned long       MessageSeqNo,
							 | 
						||
| 
								 | 
							
								                                                   unsigned long *     pfQOP)
							 | 
						||
| 
								 | 
							
								    = DecryptMessage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// Detours
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								BOOL WINAPI Mine_CreateProcessW(LPCWSTR lpApplicationName,
							 | 
						||
| 
								 | 
							
								                                LPWSTR lpCommandLine,
							 | 
						||
| 
								 | 
							
								                                LPSECURITY_ATTRIBUTES lpProcessAttributes,
							 | 
						||
| 
								 | 
							
								                                LPSECURITY_ATTRIBUTES lpThreadAttributes,
							 | 
						||
| 
								 | 
							
								                                BOOL bInheritHandles,
							 | 
						||
| 
								 | 
							
								                                DWORD dwCreationFlags,
							 | 
						||
| 
								 | 
							
								                                LPVOID lpEnvironment,
							 | 
						||
| 
								 | 
							
								                                LPCWSTR lpCurrentDirectory,
							 | 
						||
| 
								 | 
							
								                                LPSTARTUPINFOW lpStartupInfo,
							 | 
						||
| 
								 | 
							
								                                LPPROCESS_INFORMATION lpProcessInformation)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("CreateProcessW(%ls,%ls,%p,%p,%x,%x,%p,%ls,%p,%p)\n",
							 | 
						||
| 
								 | 
							
								                lpApplicationName,
							 | 
						||
| 
								 | 
							
								                lpCommandLine,
							 | 
						||
| 
								 | 
							
								                lpProcessAttributes,
							 | 
						||
| 
								 | 
							
								                lpThreadAttributes,
							 | 
						||
| 
								 | 
							
								                bInheritHandles,
							 | 
						||
| 
								 | 
							
								                dwCreationFlags,
							 | 
						||
| 
								 | 
							
								                lpEnvironment,
							 | 
						||
| 
								 | 
							
								                lpCurrentDirectory,
							 | 
						||
| 
								 | 
							
								                lpStartupInfo,
							 | 
						||
| 
								 | 
							
								                lpProcessInformation);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_CreateProcessW(lpApplicationName,
							 | 
						||
| 
								 | 
							
								                                 lpCommandLine,
							 | 
						||
| 
								 | 
							
								                                 lpProcessAttributes,
							 | 
						||
| 
								 | 
							
								                                 lpThreadAttributes,
							 | 
						||
| 
								 | 
							
								                                 bInheritHandles,
							 | 
						||
| 
								 | 
							
								                                 dwCreationFlags,
							 | 
						||
| 
								 | 
							
								                                 lpEnvironment,
							 | 
						||
| 
								 | 
							
								                                 lpCurrentDirectory,
							 | 
						||
| 
								 | 
							
								                                 lpStartupInfo,
							 | 
						||
| 
								 | 
							
								                                 lpProcessInformation);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("CreateProcessW(,,,,,,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if _MSC_VER < 1300
							 | 
						||
| 
								 | 
							
								SOCKET WINAPI Mine_WSAAccept(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                             sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                             LPINT a2,
							 | 
						||
| 
								 | 
							
								                             LPCONDITIONPROC a3,
							 | 
						||
| 
								 | 
							
								                             DWORD a4)
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								SOCKET WINAPI Mine_WSAAccept(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                             sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                             LPINT a2,
							 | 
						||
| 
								 | 
							
								                             LPCONDITIONPROC a3,
							 | 
						||
| 
								 | 
							
								                             DWORD_PTR a4)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SOCKET rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAccept(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintEnter("%p: WSAAccept(,%p,%p,%p,%p) -> %p\n", a0, a1, a2, a3, a4, rv);
							 | 
						||
| 
								 | 
							
								        _PrintExit(NULL);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAAddressToStringA(LPSOCKADDR a0,
							 | 
						||
| 
								 | 
							
								                                    DWORD a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOA a2,
							 | 
						||
| 
								 | 
							
								                                    LPSTR a3,
							 | 
						||
| 
								 | 
							
								                                    LPDWORD a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAddressToStringA(%p,%x,%p,%p,%p)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAddressToStringA(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAddressToStringA(,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAAddressToStringW(LPSOCKADDR a0,
							 | 
						||
| 
								 | 
							
								                                    DWORD a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOW a2,
							 | 
						||
| 
								 | 
							
								                                    LPWSTR a3,
							 | 
						||
| 
								 | 
							
								                                    LPDWORD a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAddressToStringW(%p,%x,%p,%p,%p)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAddressToStringW(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAddressToStringW(,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetHostByAddr(HWND a0,
							 | 
						||
| 
								 | 
							
								                                         u_int a1,
							 | 
						||
| 
								 | 
							
								                                         char* a2,
							 | 
						||
| 
								 | 
							
								                                         int a3,
							 | 
						||
| 
								 | 
							
								                                         int a4,
							 | 
						||
| 
								 | 
							
								                                         char* a5,
							 | 
						||
| 
								 | 
							
								                                         int a6)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetHostByAddr(%p,%x,%p,%x,%x,%p,%x)\n", a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetHostByAddr(a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetHostByAddr(,,,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetHostByName(HWND a0,
							 | 
						||
| 
								 | 
							
								                                         u_int a1,
							 | 
						||
| 
								 | 
							
								                                         char* a2,
							 | 
						||
| 
								 | 
							
								                                         char* a3,
							 | 
						||
| 
								 | 
							
								                                         int a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetHostByName(%p,%x,%p,%p,%x)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetHostByName(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetHostByName(,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetProtoByName(HWND a0,
							 | 
						||
| 
								 | 
							
								                                          u_int a1,
							 | 
						||
| 
								 | 
							
								                                          char* a2,
							 | 
						||
| 
								 | 
							
								                                          char* a3,
							 | 
						||
| 
								 | 
							
								                                          int a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetProtoByName(%p,%x,%p,%p,%x)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetProtoByName(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetProtoByName(,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetProtoByNumber(HWND a0,
							 | 
						||
| 
								 | 
							
								                                            u_int a1,
							 | 
						||
| 
								 | 
							
								                                            int a2,
							 | 
						||
| 
								 | 
							
								                                            char* a3,
							 | 
						||
| 
								 | 
							
								                                            int a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetProtoByNumber(%p,%x,%p,%p,%x)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetProtoByNumber(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetProtoByNumber(,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetServByName(HWND a0,
							 | 
						||
| 
								 | 
							
								                                         u_int a1,
							 | 
						||
| 
								 | 
							
								                                         char* a2,
							 | 
						||
| 
								 | 
							
								                                         char* a3,
							 | 
						||
| 
								 | 
							
								                                         char* a4,
							 | 
						||
| 
								 | 
							
								                                         int a5)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetServByName(%p,%x,%p,%p,%p,%x)\n", a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetServByName(a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetServByName(,,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSAAsyncGetServByPort(HWND a0,
							 | 
						||
| 
								 | 
							
								                                         u_int a1,
							 | 
						||
| 
								 | 
							
								                                         int a2,
							 | 
						||
| 
								 | 
							
								                                         char* a3,
							 | 
						||
| 
								 | 
							
								                                         char* a4,
							 | 
						||
| 
								 | 
							
								                                         int a5)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAAsyncGetServByPort(%p,%x,%x,%p,%p,%x)\n", a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAAsyncGetServByPort(a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAAsyncGetServByPort(,,,,,) -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSACancelAsyncRequest(HANDLE a0)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSACancelAsyncRequest(%p)\n", a0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSACancelAsyncRequest(a0);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSACancelAsyncRequest() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSACancelBlockingCall(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSACancelBlockingCall()\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSACancelBlockingCall();
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSACancelBlockingCall() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSACleanup(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSACleanup()\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSACleanup();
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSACleanup() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL WINAPI Mine_WSACloseEvent(HANDLE a0)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSACloseEvent(%p)\n", a0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSACloseEvent(a0);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSACloseEvent() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSAConnect(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                           sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                           int a2,
							 | 
						||
| 
								 | 
							
								                           LPWSABUF a3,
							 | 
						||
| 
								 | 
							
								                           LPWSABUF a4,
							 | 
						||
| 
								 | 
							
								                           LPQOS a5,
							 | 
						||
| 
								 | 
							
								                           LPQOS a6)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAConnect(a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintEnter("%p: WSAConnect(,%p,%x,%p,%p,%p,%p) -> %x\n",
							 | 
						||
| 
								 | 
							
								                    a0, a1, a2, a3, a4, a5, a6, rv);
							 | 
						||
| 
								 | 
							
								        _PrintExit(NULL);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HANDLE WINAPI Mine_WSACreateEvent(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSACreateEvent()\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HANDLE rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSACreateEvent();
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSACreateEvent() -> %p\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSADuplicateSocketA(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                    DWORD a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOA a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSADuplicateSocketA(,%x,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSADuplicateSocketA(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSADuplicateSocketA(,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSADuplicateSocketW(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                    DWORD a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOW a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSADuplicateSocketW(,%x,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSADuplicateSocketW(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSADuplicateSocketW(,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAEnumNameSpaceProvidersA(LPDWORD a0,
							 | 
						||
| 
								 | 
							
								                                           LPWSANAMESPACE_INFOA a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAEnumNameSpaceProvidersA(%p,%p)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAEnumNameSpaceProvidersA(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAEnumNameSpaceProvidersA(,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAEnumNameSpaceProvidersW(LPDWORD a0,
							 | 
						||
| 
								 | 
							
								                                           LPWSANAMESPACE_INFOW a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAEnumNameSpaceProvidersW(%p,%p)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAEnumNameSpaceProvidersW(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAEnumNameSpaceProvidersW(,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSAEnumNetworkEvents(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                     HANDLE a1,
							 | 
						||
| 
								 | 
							
								                                     LPWSANETWORKEVENTS a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSAEnumNetworkEvents(,%p,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAEnumNetworkEvents(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSAEnumNetworkEvents(,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSAEnumProtocolsA(LPINT a0,
							 | 
						||
| 
								 | 
							
								                                  LPWSAPROTOCOL_INFOA a1,
							 | 
						||
| 
								 | 
							
								                                  LPDWORD a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAEnumProtocolsA(%p,%p,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAEnumProtocolsA(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAEnumProtocolsA(,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSAEnumProtocolsW(LPINT a0,
							 | 
						||
| 
								 | 
							
								                                  LPWSAPROTOCOL_INFOW a1,
							 | 
						||
| 
								 | 
							
								                                  LPDWORD a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAEnumProtocolsW(%p,%p,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAEnumProtocolsW(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAEnumProtocolsW(,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL WINAPI Mine_WSAGetOverlappedResult(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                        LPWSAOVERLAPPED a1,
							 | 
						||
| 
								 | 
							
								                                        LPDWORD a2,
							 | 
						||
| 
								 | 
							
								                                        BOOL a3,
							 | 
						||
| 
								 | 
							
								                                        LPDWORD a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSAGetOverlappedResult(,%p,%p,%x,%p)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAGetOverlappedResult(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSAGetOverlappedResult(,,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL WINAPI Mine_WSAIsBlocking(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAIsBlocking()\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAIsBlocking();
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAIsBlocking() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SOCKET WINAPI Mine_WSAJoinLeaf(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                               sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                               int a2,
							 | 
						||
| 
								 | 
							
								                               LPWSABUF a3,
							 | 
						||
| 
								 | 
							
								                               LPWSABUF a4,
							 | 
						||
| 
								 | 
							
								                               LPQOS a5,
							 | 
						||
| 
								 | 
							
								                               LPQOS a6,
							 | 
						||
| 
								 | 
							
								                               DWORD a7)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSAJoinLeaf(,%p,%x,%p,%p,%p,%p,%x)\n", a0, a1, a2, a3, a4, a5, a6, a7);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SOCKET rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAJoinLeaf(a0, a1, a2, a3, a4, a5, a6, a7);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSAJoinLeaf(,,,,,,,) -> %p\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAProviderConfigChange(LPHANDLE a0,
							 | 
						||
| 
								 | 
							
								                                        LPWSAOVERLAPPED a1,
							 | 
						||
| 
								 | 
							
								                                        LPWSAOVERLAPPED_COMPLETION_ROUTINE a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAProviderConfigChange(%p,%p,%p)\n", a0, a1, a2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAProviderConfigChange(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAProviderConfigChange(,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSARecv(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                        LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                        DWORD a2,
							 | 
						||
| 
								 | 
							
								                        LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                        LPDWORD a4,
							 | 
						||
| 
								 | 
							
								                        LPWSAOVERLAPPED a5,
							 | 
						||
| 
								 | 
							
								                        LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int rv = -1;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSARecv(a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        if (rv == 0) {
							 | 
						||
| 
								 | 
							
								            _PrintEnter("%p: WSARecv(,%p,%x,%p,%p,%p,%p)\n",
							 | 
						||
| 
								 | 
							
								                        a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								#if 0
							 | 
						||
| 
								 | 
							
								            _PrintDump(a0, a1[0].buf, a1[0].len < *a3 ? a1[0].len : *a3);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            _PrintExit("%p: WSARecv(,,,,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSARecvDisconnect(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                  LPWSABUF a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSARecvDisconnect(,%p)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSARecvDisconnect(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSARecvDisconnect(,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSARecvFrom(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                            LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                            DWORD a2,
							 | 
						||
| 
								 | 
							
								                            LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                            LPDWORD a4,
							 | 
						||
| 
								 | 
							
								                            sockaddr* a5,
							 | 
						||
| 
								 | 
							
								                            LPINT a6,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED a7,
							 | 
						||
| 
								 | 
							
								                            LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSARecvFrom(,%p,%x,%p,%p,%p,%p,%p,%p)\n", a0, a1, a2, a3, a4, a5, a6, a7, a8);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSARecvFrom(a0, a1, a2, a3, a4, a5, a6, a7, a8);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSARecvFrom(,,,,,,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL WINAPI Mine_WSAResetEvent(HANDLE a0)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAResetEvent(%p)\n", a0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    BOOL rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAResetEvent(a0);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAResetEvent() -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSASend(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                        LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                        DWORD a2,
							 | 
						||
| 
								 | 
							
								                        LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                        DWORD a4,
							 | 
						||
| 
								 | 
							
								                        LPWSAOVERLAPPED a5,
							 | 
						||
| 
								 | 
							
								                        LPWSAOVERLAPPED_COMPLETION_ROUTINE a6)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSASend(,%p,%x,%p,%x,%p,%p)\n", a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSASend(a0, a1, a2, a3, a4, a5, a6);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSASend(,,,,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSASendDisconnect(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                                  LPWSABUF a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSASendDisconnect(,%p)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSASendDisconnect(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSASendDisconnect(,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_WSASendTo(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                          LPWSABUF a1,
							 | 
						||
| 
								 | 
							
								                          DWORD a2,
							 | 
						||
| 
								 | 
							
								                          LPDWORD a3,
							 | 
						||
| 
								 | 
							
								                          DWORD a4,
							 | 
						||
| 
								 | 
							
								                          sockaddr* a5,
							 | 
						||
| 
								 | 
							
								                          int a6,
							 | 
						||
| 
								 | 
							
								                          LPWSAOVERLAPPED a7,
							 | 
						||
| 
								 | 
							
								                          LPWSAOVERLAPPED_COMPLETION_ROUTINE a8)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: WSASendTo(,%p,%x,%p,%x,%p,%x,%p,%p)\n", a0, a1, a2, a3, a4, a5, a6, a7, a8);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSASendTo(a0, a1, a2, a3, a4, a5, a6, a7, a8);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: WSASendTo(,,,,,,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAStringToAddressA(LPSTR a0,
							 | 
						||
| 
								 | 
							
								                                    INT a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOA a2,
							 | 
						||
| 
								 | 
							
								                                    LPSOCKADDR a3,
							 | 
						||
| 
								 | 
							
								                                    LPINT a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAStringToAddressA(%p,%x,%p,%p,%p)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAStringToAddressA(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAStringToAddressA(,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INT WINAPI Mine_WSAStringToAddressW(LPWSTR a0,
							 | 
						||
| 
								 | 
							
								                                    INT a1,
							 | 
						||
| 
								 | 
							
								                                    LPWSAPROTOCOL_INFOW a2,
							 | 
						||
| 
								 | 
							
								                                    LPSOCKADDR a3,
							 | 
						||
| 
								 | 
							
								                                    LPINT a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAStringToAddressW(%p,%x,%p,%p,%p)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    INT rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAStringToAddressW(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAStringToAddressW(,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DWORD WINAPI Mine_WSAWaitForMultipleEvents(DWORD a0,
							 | 
						||
| 
								 | 
							
								                                           void** a1,
							 | 
						||
| 
								 | 
							
								                                           BOOL a2,
							 | 
						||
| 
								 | 
							
								                                           DWORD a3,
							 | 
						||
| 
								 | 
							
								                                           BOOL a4)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("WSAWaitForMultipleEvents(%x,%p,%x,%x,%x)\n", a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DWORD rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_WSAWaitForMultipleEvents(a0, a1, a2, a3, a4);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("WSAWaitForMultipleEvents(,,,,) -> %x\n", rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SOCKET WINAPI Mine_accept(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                          sockaddr* a1,
							 | 
						||
| 
								 | 
							
								                          int* a2)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    SOCKET rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_accept(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        WCHAR wzAddress[512] = L"";
							 | 
						||
| 
								 | 
							
								        int err = WSAGetLastError();
							 | 
						||
| 
								 | 
							
								        if (rv != INVALID_SOCKET) {
							 | 
						||
| 
								 | 
							
								            DWORD nAddress = ARRAYSIZE(wzAddress);
							 | 
						||
| 
								 | 
							
								            if (Real_WSAAddressToStringW(a1, *a2, NULL, wzAddress, &nAddress) != 0) {
							 | 
						||
| 
								 | 
							
								                wzAddress[0] = 0;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        WSASetLastError(err);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (wzAddress[0]) {
							 | 
						||
| 
								 | 
							
								            _PrintEnter("%p: accept(,%ls,%p) -> %p\n", a0, wzAddress, a2, rv);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            _PrintEnter("%p: accept(,%p,%p) -> %p\n", a0, a1, a2, rv);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        _PrintExit(NULL);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_closesocket(SOCKET a0)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_closesocket(a0);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintEnter("%p: closesocket() -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								        _PrintExit(NULL);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_connect(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                        sockaddr* name,
							 | 
						||
| 
								 | 
							
								                        int namelen)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_connect(a0, name, namelen);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        WCHAR wzAddress[512];
							 | 
						||
| 
								 | 
							
								        DWORD nAddress = ARRAYSIZE(wzAddress);
							 | 
						||
| 
								 | 
							
								        int err = WSAGetLastError();
							 | 
						||
| 
								 | 
							
								        if (Real_WSAAddressToStringW(name, namelen, NULL, wzAddress, &nAddress) == 0) {
							 | 
						||
| 
								 | 
							
								            if (rv == SOCKET_ERROR) {
							 | 
						||
| 
								 | 
							
								                _PrintEnter("%p: connect(,%p:%ls,%x) -> %x [%d]\n",
							 | 
						||
| 
								 | 
							
								                            a0, name, wzAddress, namelen, rv, err);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                _PrintEnter("%p: connect(,%p:%ls,%x) -> %x\n",
							 | 
						||
| 
								 | 
							
								                            a0, name, wzAddress, namelen, rv);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            if (rv == SOCKET_ERROR) {
							 | 
						||
| 
								 | 
							
								                _PrintEnter("%p: connect(,%p,%x) -> %x [%d]\n",
							 | 
						||
| 
								 | 
							
								                            a0, name, namelen, rv, err);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                _PrintEnter("%p: connect(,%p,%x) -> %x\n",
							 | 
						||
| 
								 | 
							
								                            a0, name, namelen, rv);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        WSASetLastError(err);
							 | 
						||
| 
								 | 
							
								        _PrintExit(NULL);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_listen(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                       int a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: listen(,%x)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_listen(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: listen(,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_recv(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                     char* a1,
							 | 
						||
| 
								 | 
							
								                     int a2,
							 | 
						||
| 
								 | 
							
								                     int a3)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: recv(,%p,%x,%x)\n", a0, a1, a2, a3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_recv(a0, a1, a2, a3);
							 | 
						||
| 
								 | 
							
								#if 0
							 | 
						||
| 
								 | 
							
								        _PrintDump(a0, a1, rv);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: recv(,%p,,) -> %x\n", a0, a1, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_recvfrom(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                         char* a1,
							 | 
						||
| 
								 | 
							
								                         int a2,
							 | 
						||
| 
								 | 
							
								                         int a3,
							 | 
						||
| 
								 | 
							
								                         sockaddr* a4,
							 | 
						||
| 
								 | 
							
								                         int* a5)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: recvfrom(,%p,%x,%x,%p,%p)\n", a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_recvfrom(a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								#if 0
							 | 
						||
| 
								 | 
							
								        _PrintDump(a0, a1, rv);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: recvfrom(,%p,,,,) -> %x\n", a0, a1, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID _PrintDump(SOCKET socket, PCHAR pszData, INT cbData)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (pszData && cbData > 0) {
							 | 
						||
| 
								 | 
							
								        CHAR szBuffer[256];
							 | 
						||
| 
								 | 
							
								        PCHAR pszBuffer = szBuffer;
							 | 
						||
| 
								 | 
							
								        INT cbBuffer = 0;
							 | 
						||
| 
								 | 
							
								        INT nLines = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while (cbData > 0) {
							 | 
						||
| 
								 | 
							
								#if ABBREVIATE
							 | 
						||
| 
								 | 
							
								            if (nLines > 20) {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '.';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '.';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '.';
							 | 
						||
| 
								 | 
							
								                cbBuffer += 3;
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (*pszData == '\t') {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\\';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = 't';
							 | 
						||
| 
								 | 
							
								                cbBuffer += 2;
							 | 
						||
| 
								 | 
							
								                pszData++;
							 | 
						||
| 
								 | 
							
								                cbData--;
							 | 
						||
| 
								 | 
							
								                continue;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (*pszData == '\r') {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\\';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = 'r';
							 | 
						||
| 
								 | 
							
								                cbBuffer += 2;
							 | 
						||
| 
								 | 
							
								                pszData++;
							 | 
						||
| 
								 | 
							
								                cbData--;
							 | 
						||
| 
								 | 
							
								                continue;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (*pszData == '\n') {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\\';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = 'n';
							 | 
						||
| 
								 | 
							
								                cbBuffer += 2;
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\0';
							 | 
						||
| 
								 | 
							
								                _Print("%p:   %hs\n", socket, szBuffer);
							 | 
						||
| 
								 | 
							
								                nLines++;
							 | 
						||
| 
								 | 
							
								                pszBuffer = szBuffer;
							 | 
						||
| 
								 | 
							
								                cbBuffer = 0;
							 | 
						||
| 
								 | 
							
								                pszData++;
							 | 
						||
| 
								 | 
							
								                cbData--;
							 | 
						||
| 
								 | 
							
								                continue;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (cbBuffer >= 80) {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\0';
							 | 
						||
| 
								 | 
							
								                _Print("%p:   %hs\n", socket, szBuffer);
							 | 
						||
| 
								 | 
							
								                nLines++;
							 | 
						||
| 
								 | 
							
								                pszBuffer = szBuffer;
							 | 
						||
| 
								 | 
							
								                cbBuffer = 0;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (*pszData < ' ' || *pszData >= 127) {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = '\\';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = 'x';
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = "0123456789ABCDEF"[(*pszData & 0xf0) >> 4];
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = "0123456789ABCDEF"[(*pszData & 0x0f)];
							 | 
						||
| 
								 | 
							
								                cbBuffer += 4;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                *pszBuffer++ = *pszData;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            cbBuffer++;
							 | 
						||
| 
								 | 
							
								            pszData++;
							 | 
						||
| 
								 | 
							
								            cbData--;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (cbBuffer > 0) {
							 | 
						||
| 
								 | 
							
								            *pszBuffer++ = '\0';
							 | 
						||
| 
								 | 
							
								            _Print("%p:   %hs\n", socket, szBuffer);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_send(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                     char* a1,
							 | 
						||
| 
								 | 
							
								                     int a2,
							 | 
						||
| 
								 | 
							
								                     int a3)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: send(,%p,%x,%x)\n", a0, a1, a2, a3);
							 | 
						||
| 
								 | 
							
								#if 0
							 | 
						||
| 
								 | 
							
								    _PrintDump(a0, a1, a2);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_send(a0, a1, a2, a3);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        if (rv == SOCKET_ERROR) {
							 | 
						||
| 
								 | 
							
								            int err = WSAGetLastError();
							 | 
						||
| 
								 | 
							
								            _PrintExit("%p: send(,,,) -> %x (%d)\n", a0, rv, err);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            _PrintExit("%p: send(,,,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_sendto(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                       char* a1,
							 | 
						||
| 
								 | 
							
								                       int a2,
							 | 
						||
| 
								 | 
							
								                       int a3,
							 | 
						||
| 
								 | 
							
								                       sockaddr* a4,
							 | 
						||
| 
								 | 
							
								                       int a5)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: sendto(,%s,%x,%x,%p,%x)\n", a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_sendto(a0, a1, a2, a3, a4, a5);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: sendto(%ls,,,,,) -> %x\n", a0, a1, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int WINAPI Mine_shutdown(SOCKET a0,
							 | 
						||
| 
								 | 
							
								                         int a1)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: shutdown(,%x)\n", a0, a1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_shutdown(a0, a1);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: shutdown(,) -> %x\n", a0, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SECURITY_STATUS SEC_ENTRY Mine_EncryptMessage( PCtxtHandle         phContext,
							 | 
						||
| 
								 | 
							
								                                               unsigned long       fQOP,
							 | 
						||
| 
								 | 
							
								                                               PSecBufferDesc      pMessage,
							 | 
						||
| 
								 | 
							
								                                               unsigned long       MessageSeqNo)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: EncryptMessage(%x,%x,%x)\n", phContext, fQOP, pMessage, MessageSeqNo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SECURITY_STATUS rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        if (pMessage != NULL) {
							 | 
						||
| 
								 | 
							
								            for (unsigned b = 0; b < pMessage->cBuffers; b++) {
							 | 
						||
| 
								 | 
							
								                PSecBuffer pBuffer = &pMessage->pBuffers[b];
							 | 
						||
| 
								 | 
							
								                if ((pBuffer->BufferType & 0xfff) == 1) {
							 | 
						||
| 
								 | 
							
								                    _Print("%p:  Type=%08x Size=%d\n", phContext,
							 | 
						||
| 
								 | 
							
								                           pBuffer->BufferType,
							 | 
						||
| 
								 | 
							
								                           pBuffer->cbBuffer);
							 | 
						||
| 
								 | 
							
								                    _PrintDump((SOCKET)phContext, (PCHAR)pBuffer->pvBuffer, pBuffer->cbBuffer);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        rv = Real_EncryptMessage(phContext, fQOP, pMessage, MessageSeqNo);
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: EncryptMessage(,) -> %x\n", phContext, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SECURITY_STATUS SEC_ENTRY Mine_DecryptMessage( PCtxtHandle         phContext,
							 | 
						||
| 
								 | 
							
								                                               PSecBufferDesc      pMessage,
							 | 
						||
| 
								 | 
							
								                                               unsigned long       MessageSeqNo,
							 | 
						||
| 
								 | 
							
								                                               unsigned long *     pfQOP)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    _PrintEnter("%p: DecryptMessage(%x,%x,%x)\n", phContext, pMessage, MessageSeqNo, pfQOP);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SECURITY_STATUS rv = 0;
							 | 
						||
| 
								 | 
							
								    __try {
							 | 
						||
| 
								 | 
							
								        rv = Real_DecryptMessage(phContext, pMessage, MessageSeqNo, pfQOP);
							 | 
						||
| 
								 | 
							
								        for (unsigned b = 0; b < pMessage->cBuffers; b++) {
							 | 
						||
| 
								 | 
							
								            PSecBuffer pBuffer = &pMessage->pBuffers[b];
							 | 
						||
| 
								 | 
							
								            if ((pBuffer->BufferType & 0xfff) == 1) {
							 | 
						||
| 
								 | 
							
								                _Print("%p:  Type=%08x Size=%d\n", phContext,
							 | 
						||
| 
								 | 
							
								                       pBuffer->BufferType,
							 | 
						||
| 
								 | 
							
								                       pBuffer->cbBuffer);
							 | 
						||
| 
								 | 
							
								                _PrintDump((SOCKET)phContext, (PCHAR)pBuffer->pvBuffer, pBuffer->cbBuffer);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    } __finally {
							 | 
						||
| 
								 | 
							
								        _PrintExit("%p: DecryptMessage(,) -> %x\n", phContext, rv);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return rv;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// AttachDetours
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								PCHAR DetRealName(PCHAR psz)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    PCHAR pszBeg = psz;
							 | 
						||
| 
								 | 
							
								    // Move to end of name.
							 | 
						||
| 
								 | 
							
								    while (*psz) {
							 | 
						||
| 
								 | 
							
								        psz++;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // Move back through A-Za-z0-9 names.
							 | 
						||
| 
								 | 
							
								    while (psz > pszBeg &&
							 | 
						||
| 
								 | 
							
								           ((psz[-1] >= 'A' && psz[-1] <= 'Z') ||
							 | 
						||
| 
								 | 
							
								            (psz[-1] >= 'a' && psz[-1] <= 'z') ||
							 | 
						||
| 
								 | 
							
								            (psz[-1] >= '0' && psz[-1] <= '9'))) {
							 | 
						||
| 
								 | 
							
								        psz--;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return psz;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID DetAttach(PVOID *ppbReal, PVOID pbMine, PCHAR psz)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    LONG l = DetourAttach(ppbReal, pbMine);
							 | 
						||
| 
								 | 
							
								    if (l != 0) {
							 | 
						||
| 
								 | 
							
								        Syelog(SYELOG_SEVERITY_NOTICE,
							 | 
						||
| 
								 | 
							
								               "Attach failed: `%s': error %d\n", DetRealName(psz), l);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID DetDetach(PVOID *ppbReal, PVOID pbMine, PCHAR psz)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    LONG l = DetourDetach(ppbReal, pbMine);
							 | 
						||
| 
								 | 
							
								    if (l != 0) {
							 | 
						||
| 
								 | 
							
								        Syelog(SYELOG_SEVERITY_NOTICE,
							 | 
						||
| 
								 | 
							
								               "Detach failed: `%s': error %d\n", DetRealName(psz), l);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ATTACH(x)       DetAttach(&(PVOID&)Real_##x,Mine_##x,#x)
							 | 
						||
| 
								 | 
							
								#define DETACH(x)       DetDetach(&(PVOID&)Real_##x,Mine_##x,#x)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								LONG AttachDetours(VOID)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    DetourTransactionBegin();
							 | 
						||
| 
								 | 
							
								    DetourUpdateThread(GetCurrentThread());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ATTACH(CreateProcessW);
							 | 
						||
| 
								 | 
							
								    ATTACH(DecryptMessage);
							 | 
						||
| 
								 | 
							
								    ATTACH(EncryptMessage);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAccept);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAddressToStringA);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAddressToStringW);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetHostByAddr);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetHostByName);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetProtoByName);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetProtoByNumber);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetServByName);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAAsyncGetServByPort);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSACancelAsyncRequest);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSACancelBlockingCall);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSACleanup);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSACloseEvent);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAConnect);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSACreateEvent);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSADuplicateSocketA);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSADuplicateSocketW);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAEnumNameSpaceProvidersA);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAEnumNameSpaceProvidersW);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAEnumNetworkEvents);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAEnumProtocolsA);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAEnumProtocolsW);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAIsBlocking);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAJoinLeaf);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAProviderConfigChange);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSARecv);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSARecvDisconnect);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSARecvFrom);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAResetEvent);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSASend);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSASendDisconnect);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSASendTo);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAStringToAddressA);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAStringToAddressW);
							 | 
						||
| 
								 | 
							
								    ATTACH(WSAWaitForMultipleEvents);
							 | 
						||
| 
								 | 
							
								    ATTACH(accept);
							 | 
						||
| 
								 | 
							
								    ATTACH(closesocket);
							 | 
						||
| 
								 | 
							
								    ATTACH(connect);
							 | 
						||
| 
								 | 
							
								    ATTACH(listen);
							 | 
						||
| 
								 | 
							
								    ATTACH(recv);
							 | 
						||
| 
								 | 
							
								    ATTACH(recvfrom);
							 | 
						||
| 
								 | 
							
								    ATTACH(send);
							 | 
						||
| 
								 | 
							
								    ATTACH(sendto);
							 | 
						||
| 
								 | 
							
								    ATTACH(shutdown);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return DetourTransactionCommit();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								LONG DetachDetours(VOID)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    DetourTransactionBegin();
							 | 
						||
| 
								 | 
							
								    DetourUpdateThread(GetCurrentThread());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DETACH(CreateProcessW);
							 | 
						||
| 
								 | 
							
								    DETACH(DecryptMessage);
							 | 
						||
| 
								 | 
							
								    DETACH(EncryptMessage);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAccept);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAddressToStringA);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAddressToStringW);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetHostByAddr);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetHostByName);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetProtoByName);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetProtoByNumber);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetServByName);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAAsyncGetServByPort);
							 | 
						||
| 
								 | 
							
								    DETACH(WSACancelAsyncRequest);
							 | 
						||
| 
								 | 
							
								    DETACH(WSACancelBlockingCall);
							 | 
						||
| 
								 | 
							
								    DETACH(WSACleanup);
							 | 
						||
| 
								 | 
							
								    DETACH(WSACloseEvent);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAConnect);
							 | 
						||
| 
								 | 
							
								    DETACH(WSACreateEvent);
							 | 
						||
| 
								 | 
							
								    DETACH(WSADuplicateSocketA);
							 | 
						||
| 
								 | 
							
								    DETACH(WSADuplicateSocketW);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAEnumNameSpaceProvidersA);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAEnumNameSpaceProvidersW);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAEnumNetworkEvents);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAEnumProtocolsA);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAEnumProtocolsW);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAIsBlocking);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAJoinLeaf);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAProviderConfigChange);
							 | 
						||
| 
								 | 
							
								    DETACH(WSARecv);
							 | 
						||
| 
								 | 
							
								    DETACH(WSARecvDisconnect);
							 | 
						||
| 
								 | 
							
								    DETACH(WSARecvFrom);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAResetEvent);
							 | 
						||
| 
								 | 
							
								    DETACH(WSASend);
							 | 
						||
| 
								 | 
							
								    DETACH(WSASendDisconnect);
							 | 
						||
| 
								 | 
							
								    DETACH(WSASendTo);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAStringToAddressA);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAStringToAddressW);
							 | 
						||
| 
								 | 
							
								    DETACH(WSAWaitForMultipleEvents);
							 | 
						||
| 
								 | 
							
								    DETACH(accept);
							 | 
						||
| 
								 | 
							
								    DETACH(closesocket);
							 | 
						||
| 
								 | 
							
								    DETACH(connect);
							 | 
						||
| 
								 | 
							
								    DETACH(listen);
							 | 
						||
| 
								 | 
							
								    DETACH(recv);
							 | 
						||
| 
								 | 
							
								    DETACH(recvfrom);
							 | 
						||
| 
								 | 
							
								    DETACH(send);
							 | 
						||
| 
								 | 
							
								    DETACH(sendto);
							 | 
						||
| 
								 | 
							
								    DETACH(shutdown);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return DetourTransactionCommit();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////// Logging System.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								static BOOL s_bLog = 1;
							 | 
						||
| 
								 | 
							
								static LONG s_nTlsIndent = -1;
							 | 
						||
| 
								 | 
							
								static LONG s_nTlsThread = -1;
							 | 
						||
| 
								 | 
							
								static LONG s_nThreadCnt = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID _PrintEnter(const CHAR *psz, ...)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    DWORD dwErr = GetLastError();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    LONG nIndent = 0;
							 | 
						||
| 
								 | 
							
								    LONG nThread = 0;
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        nIndent = (LONG)(LONG_PTR)TlsGetValue(s_nTlsIndent);
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsIndent, (PVOID)(LONG_PTR)(nIndent + 1));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        nThread = (LONG)(LONG_PTR)TlsGetValue(s_nTlsThread);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_bLog && psz) {
							 | 
						||
| 
								 | 
							
								        CHAR szBuf[1024];
							 | 
						||
| 
								 | 
							
								        PCHAR pszBuf = szBuf;
							 | 
						||
| 
								 | 
							
								        PCHAR pszEnd = szBuf + ARRAYSIZE(szBuf) - 1;
							 | 
						||
| 
								 | 
							
								        LONG nLen = (nIndent > 0) ? (nIndent < 35 ? nIndent * 2 : 70) : 0;
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 100) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 10) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 1) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        while (nLen-- > 0) {
							 | 
						||
| 
								 | 
							
								            *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_list  args;
							 | 
						||
| 
								 | 
							
								        va_start(args, psz);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while ((*pszBuf++ = *psz++) != 0 && pszBuf < pszEnd) {
							 | 
						||
| 
								 | 
							
								            // Copy characters.
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        *pszEnd = '\0';
							 | 
						||
| 
								 | 
							
								        SyelogV(SYELOG_SEVERITY_INFORMATION,
							 | 
						||
| 
								 | 
							
								                szBuf, args);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_end(args);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    SetLastError(dwErr);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID _PrintExit(const CHAR *psz, ...)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    DWORD dwErr = GetLastError();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    LONG nIndent = 0;
							 | 
						||
| 
								 | 
							
								    LONG nThread = 0;
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        nIndent = (LONG)(LONG_PTR)TlsGetValue(s_nTlsIndent) - 1;
							 | 
						||
| 
								 | 
							
								        ASSERT(nIndent >= 0);
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsIndent, (PVOID)(LONG_PTR)nIndent);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        nThread = (LONG)(LONG_PTR)TlsGetValue(s_nTlsThread);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_bLog && psz) {
							 | 
						||
| 
								 | 
							
								        CHAR szBuf[1024];
							 | 
						||
| 
								 | 
							
								        PCHAR pszBuf = szBuf;
							 | 
						||
| 
								 | 
							
								        PCHAR pszEnd = szBuf + ARRAYSIZE(szBuf) - 1;
							 | 
						||
| 
								 | 
							
								        LONG nLen = (nIndent > 0) ? (nIndent < 35 ? nIndent * 2 : 70) : 0;
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 100) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 10) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 1) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        while (nLen-- > 0) {
							 | 
						||
| 
								 | 
							
								            *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_list  args;
							 | 
						||
| 
								 | 
							
								        va_start(args, psz);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while ((*pszBuf++ = *psz++) != 0 && pszBuf < pszEnd) {
							 | 
						||
| 
								 | 
							
								            // Copy characters.
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        *pszEnd = '\0';
							 | 
						||
| 
								 | 
							
								        SyelogV(SYELOG_SEVERITY_INFORMATION,
							 | 
						||
| 
								 | 
							
								                szBuf, args);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_end(args);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    SetLastError(dwErr);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID _Print(const CHAR *psz, ...)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    DWORD dwErr = GetLastError();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    LONG nIndent = 0;
							 | 
						||
| 
								 | 
							
								    LONG nThread = 0;
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        nIndent = (LONG)(LONG_PTR)TlsGetValue(s_nTlsIndent);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        nThread = (LONG)(LONG_PTR)TlsGetValue(s_nTlsThread);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_bLog && psz) {
							 | 
						||
| 
								 | 
							
								        CHAR szBuf[1024];
							 | 
						||
| 
								 | 
							
								        PCHAR pszBuf = szBuf;
							 | 
						||
| 
								 | 
							
								        PCHAR pszEnd = szBuf + ARRAYSIZE(szBuf) - 1;
							 | 
						||
| 
								 | 
							
								        LONG nLen = (nIndent > 0) ? (nIndent < 35 ? nIndent * 2 : 70) : 0;
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 100) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 10) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = (CHAR)('0' + ((nThread / 1) % 10));
							 | 
						||
| 
								 | 
							
								        *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        while (nLen-- > 0) {
							 | 
						||
| 
								 | 
							
								            *pszBuf++ = ' ';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_list  args;
							 | 
						||
| 
								 | 
							
								        va_start(args, psz);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        while ((*pszBuf++ = *psz++) != 0 && pszBuf < pszEnd) {
							 | 
						||
| 
								 | 
							
								            // Copy characters.
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        *pszEnd = '\0';
							 | 
						||
| 
								 | 
							
								        SyelogV(SYELOG_SEVERITY_INFORMATION,
							 | 
						||
| 
								 | 
							
								                szBuf, args);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        va_end(args);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SetLastError(dwErr);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID AssertMessage(CONST PCHAR pszMsg, CONST PCHAR pszFile, ULONG nLine)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    Syelog(SYELOG_SEVERITY_FATAL,
							 | 
						||
| 
								 | 
							
								           "ASSERT(%s) failed in %s, line %d.\n", pszMsg, pszFile, nLine);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// DLL module information
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								BOOL ThreadAttach(HMODULE hDll)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)hDll;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsIndent, (PVOID)0);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        LONG nThread = InterlockedIncrement(&s_nThreadCnt);
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsThread, (PVOID)(LONG_PTR)nThread);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return TRUE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL ThreadDetach(HMODULE hDll)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)hDll;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsIndent, (PVOID)0);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        TlsSetValue(s_nTlsThread, (PVOID)0);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return TRUE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL ProcessAttach(HMODULE hDll)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    s_bLog = FALSE;
							 | 
						||
| 
								 | 
							
								    s_nTlsIndent = TlsAlloc();
							 | 
						||
| 
								 | 
							
								    s_nTlsThread = TlsAlloc();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    WCHAR wzExeName[MAX_PATH];
							 | 
						||
| 
								 | 
							
								    s_hInst = hDll;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Real_GetModuleFileNameW(hDll, s_wzDllPath, ARRAYSIZE(s_wzDllPath));
							 | 
						||
| 
								 | 
							
								    Real_GetModuleFileNameW(NULL, wzExeName, ARRAYSIZE(wzExeName));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SyelogOpen("trcssl" DETOURS_STRINGIFY(DETOURS_BITS), SYELOG_FACILITY_APPLICATION);
							 | 
						||
| 
								 | 
							
								    Syelog(SYELOG_SEVERITY_INFORMATION,
							 | 
						||
| 
								 | 
							
								           "##################################################################\n");
							 | 
						||
| 
								 | 
							
								    Syelog(SYELOG_SEVERITY_INFORMATION,
							 | 
						||
| 
								 | 
							
								           "### %ls\n", wzExeName);
							 | 
						||
| 
								 | 
							
								    LONG error = AttachDetours();
							 | 
						||
| 
								 | 
							
								    if (error != NO_ERROR) {
							 | 
						||
| 
								 | 
							
								        Syelog(SYELOG_SEVERITY_FATAL, "### Error attaching detours: %d\n", error);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ThreadAttach(hDll);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    s_bLog = TRUE;
							 | 
						||
| 
								 | 
							
								    return TRUE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL ProcessDetach(HMODULE hDll)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    ThreadDetach(hDll);
							 | 
						||
| 
								 | 
							
								    s_bLog = FALSE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    LONG error = DetachDetours();
							 | 
						||
| 
								 | 
							
								    if (error != NO_ERROR) {
							 | 
						||
| 
								 | 
							
								        Syelog(SYELOG_SEVERITY_FATAL, "### Error detaching detours: %d\n", error);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Syelog(SYELOG_SEVERITY_NOTICE, "### Closing.\n");
							 | 
						||
| 
								 | 
							
								    SyelogClose(FALSE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (s_nTlsIndent >= 0) {
							 | 
						||
| 
								 | 
							
								        TlsFree(s_nTlsIndent);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (s_nTlsThread >= 0) {
							 | 
						||
| 
								 | 
							
								        TlsFree(s_nTlsThread);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return TRUE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD dwReason, PVOID lpReserved)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)hModule;
							 | 
						||
| 
								 | 
							
								    (void)lpReserved;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (DetourIsHelperProcess()) {
							 | 
						||
| 
								 | 
							
								        return TRUE;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    switch (dwReason) {
							 | 
						||
| 
								 | 
							
								      case DLL_PROCESS_ATTACH:
							 | 
						||
| 
								 | 
							
								        DetourRestoreAfterWith();
							 | 
						||
| 
								 | 
							
								        return ProcessAttach(hModule);
							 | 
						||
| 
								 | 
							
								      case DLL_PROCESS_DETACH:
							 | 
						||
| 
								 | 
							
								        return ProcessDetach(hModule);
							 | 
						||
| 
								 | 
							
								      case DLL_THREAD_ATTACH:
							 | 
						||
| 
								 | 
							
								        return ThreadAttach(hModule);
							 | 
						||
| 
								 | 
							
								      case DLL_THREAD_DETACH:
							 | 
						||
| 
								 | 
							
								        return ThreadDetach(hModule);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return TRUE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								///////////////////////////////////////////////////////////////// End of File.
							 |