Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

91 lines
2.2 KiB

"\t case DLL_PROCESS_DETACH:\n\
\t\t FreeStack() ;\n\
\t\t TlsFree(dwTlsIndex) ;\n\
\t\t FreeLibrary( hMod ) ;\n\
\t\t hMod = NULL ;\n\
\t\t break;\n\
\t}\n\
\treturn WrapperInit( hInst, dwReason, lpRes ) ;\n\
}\n\
\n\
/*\n\
** _prelude\n\
**\tThis routine handles saving the API call state and calling APIPrelude\n\
**\tThe return value is the API to call.\n\
*/\n\
FARPROC _prelude( DWORD dwId, PCALLSTACK pStack ) {\n\
\tBOOL\t bRet ;\n\
\tAPICALLDATA apidata ;\n\
\tDWORD\tdwAPIAddr ;\n\
\tDWORD dwError = GetLastError() ;\n\
\n\
\tapidata.dwID\t\t = dwId ;\n\
\tapidata.dwCallLevel = GetStackDepth() + 1 ;\n\
\tapidata.dwUserData\t= 0 ;\n\
\tapidata.Ret\t\t= 0 ;\n\
\tapidata.dwReturnAddress = pStack->dwReturnAddress ;\n\
\tapidata.pArgStack\t= (BYTE *)&(pStack->abArgs) ;\n\
\n\
\tbRet = APIPrelude( &apidata ) ;\n\
\n\
\t/* make sure these are not changed by APIPrelude */\n\
\tapidata.dwID\t\t = dwId ;\n\
\tapidata.dwCallLevel\t = GetStackDepth() + 1 ;\n\
\tapidata.dwReturnAddress = pStack->dwReturnAddress ;\n\
\tapidata.pArgStack\t= (BYTE *)&(pStack->abArgs) ;\n\
\n\
\t/* Place on stack */\n\
\tPushStack( &apidata ) ;\n\
\n\
\tSetLastError(dwError) ;\n\
\n\
\treturn bRet ? adwAPIAddress[dwId] : (FARPROC)0L ;\n\
}\n\
\n\
/*\n\
** _postlude\n\
**\tPop a call state off the stack and pass information to APIPostlude\n\
*/\n\
RETVAL\t\t_postlude( RETVAL Ret, PDWORD pdwReturnAddress ) {\n\
\tAPICALLDATA apidata ;\n\
\tRETVAL UserRet ;\n\
\tDWORD dwError = GetLastError() ;\n\
\n\
\tPopStack( &apidata ) ;\n\
\n\
\t/* patch up return address */\n\
\t*pdwReturnAddress = apidata.dwReturnAddress ;\n\
\n\
\tapidata.Ret = Ret ;\n\
\n\
\tUserRet = APIPostlude( &apidata ) ;\n\
\n\
\tSetLastError(dwError) ;\n\
\n\
\treturn UserRet ;\n\
}\n\
\n\
/*\n\
** WrapperNothing\n\
*/\n\
BOOL WINAPI WrapperNothing( void ) {\n\
\treturn TRUE ;\n\
}\n\
\n\
/*\n\
** InitStack\n\
**\tinitialize the per thread stack\n\
*/\n\
BOOL InitStack() {\n\
\tBOOL fRet = FALSE ;\n\
\tPAPIDATASTACK pAPIDataStack =\n\
\t (PAPIDATASTACK) LocalAlloc(LPTR, sizeof(APIDATASTACK) ) ;\n\
\n\
\tif (pAPIDataStack != NULL)\n\
\t fRet = TlsSetValue(dwTlsIndex, pAPIDataStack) ;\n\
\n\
\tpAPIDataStack->wTop = 0 ;\n\
\n\
\treturn fRet ;\n\
}\n\
\n"