mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
"/*\n\
|
|
** Wrapper.C\n\
|
|
**\n\
|
|
** Wrapper Internals\n\
|
|
**\n\
|
|
** This helps Wrapper work. DO NOT MODIFY!!!\n\
|
|
**\n\
|
|
** Copyright(C) 1994 Microsoft Corporation\n\
|
|
** All rights reserved.\n\
|
|
**\n\
|
|
*/\n\
|
|
#include <windows.h>\n\
|
|
#include \"wrapper.h\"\n\
|
|
#include \"wapi.h\"\n\
|
|
\n\
|
|
/* API Adresses */\n\
|
|
FARPROC adwAPIAddress[WRAPPER_MAX_ID] ;\n\
|
|
\n\
|
|
/* CALLSTACK */\n\
|
|
typedef struct _callstack {\n\
|
|
\tDWORD dwReturnAddress ;\n\
|
|
\tBYTE abArgs[1] ;\n\
|
|
} CALLSTACK, *PCALLSTACK ;\n\
|
|
\n\
|
|
/* API Data Stack */\n\
|
|
typedef struct _apidatastack {\n\
|
|
\tWORD\t\twTop ;\n\
|
|
\tAPICALLDATA aStackEntries[MAX_WRAPPER_LEVEL] ;\n\
|
|
} APIDATASTACK, *PAPIDATASTACK ;\n\
|
|
\n\
|
|
/* Prototypes */\n\
|
|
BOOL WINAPI _WrapperDLLInit( HINSTANCE hInst, DWORD dwReason, LPVOID lpRes ) ;\n\
|
|
FARPROC\t _prelude( DWORD dwId, PCALLSTACK pStack ) ;\n\
|
|
RETVAL\t\t_postlude( RETVAL Ret, PDWORD pdwReturnAddress ) ;\n\
|
|
BOOL WINAPI WrapperNothing(void) ;\n\
|
|
\n\
|
|
/* Stack routine prototypes */\n\
|
|
BOOL\t\tInitStack() ;\n\
|
|
void\t\tFreeStack() ;\n\
|
|
void\t\tPushStack( PAPICALLDATA pData ) ;\n\
|
|
void\t\tPopStack( PAPICALLDATA pData ) ;\n\
|
|
DWORD\t\tGetStackDepth() ;\n\
|
|
\n\
|
|
/* For profiled library */\n\
|
|
HMODULE hMod = NULL ;\n\
|
|
\n\
|
|
/* Process instance thread data */\n\
|
|
static DWORD dwTlsIndex;\n\
|
|
\n\
|
|
/*\n\
|
|
** _WrapperDLLInit\n\
|
|
**\tDLL Init routine.\n\
|
|
*/\n\
|
|
BOOL WINAPI _WrapperDLLInit( HINSTANCE hInst, DWORD dwReason, LPVOID lpRes ) {\n\
|
|
\tint\t i ;\n\
|
|
\tFARPROC fp ;\n\
|
|
\n\
|
|
\tswitch ( dwReason ) {\n\
|
|
\t case DLL_PROCESS_ATTACH:\n\
|
|
\t\t /* For each entry in the names table find it's address and\n\
|
|
\t\t ** enter it into dwAPIAddress.\n\
|
|
\t\t */\n\
|
|
\t\t if( !hMod )\n\
|
|
\t\t\thMod = LoadLibrary( pLibraryName ) ;\n\
|
|
\n\
|
|
\t\t if( NULL == hMod )\n\
|
|
\t\t\treturn FALSE ;\n\
|
|
\n\
|
|
\t\t for( i=0; i < API_COUNT; i++ )\n\
|
|
\t\t\tadwAPIAddress[i] = (FARPROC)GetProcAddress( hMod, apAPINames[i] ) ;\n\
|
|
\n\
|
|
\t\t adwAPIAddress[API_COUNT] = (FARPROC)&WrapperNothing ;\n\
|
|
\n\
|
|
\t\t if ((dwTlsIndex = TlsAlloc()) == 0xFFFFFFFF)\n\
|
|
\t\t\treturn FALSE;\n\
|
|
\t\t // Fall through to DLL_THREAD_ATTACH\n\
|
|
\n\
|
|
\t case DLL_THREAD_ATTACH:\n\
|
|
\t\t if( !InitStack() )\n\
|
|
\t\t\treturn FALSE ;\n\
|
|
\t\t break ;\n\
|
|
\n\
|
|
\t case DLL_THREAD_DETACH:\n\
|
|
\t\t FreeStack() ;\n\
|
|
\t\t break ;\n\
|
|
\n"
|
|
|