Ignore:
Timestamp:
Jan 5, 2003, 1:31:26 PM (23 years ago)
Author:
sandervl
Message:

added dll load hook and function to override named or ordinal exports

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/wprocess.cpp

    r9540 r9617  
    1 /* $Id: wprocess.cpp,v 1.168 2002-12-20 12:40:44 sandervl Exp $ */
     1/* $Id: wprocess.cpp,v 1.169 2003-01-05 12:31:26 sandervl Exp $ */
    22
    33/*
     
    22862286}
    22872287//******************************************************************************
     2288// ODIN_SetProcAddress: Override a dll export
     2289//
     2290// Parameters:
     2291//      HMODULE hModule         Module handle
     2292//      LPCSTR  lpszProc        Export name or ordinal
     2293//      FARPROC pfnNewProc      New export function address
     2294//
     2295// Returns: Success -> old address of export
     2296//          Failure -> -1
     2297//
     2298//******************************************************************************
     2299FARPROC WIN32API ODIN_SetProcAddress(HMODULE hModule, LPCSTR lpszProc,
     2300                                     FARPROC pfnNewProc)
     2301{
     2302 Win32ImageBase *winmod;
     2303 FARPROC   proc;
     2304 ULONG     ulAPIOrdinal;
     2305
     2306  if(hModule == 0 || hModule == -1 || (WinExe && hModule == WinExe->getInstanceHandle())) {
     2307        winmod = WinExe;
     2308  }
     2309  else  winmod = (Win32ImageBase *)Win32DllBase::findModule((HINSTANCE)hModule);
     2310
     2311  if(winmod) {
     2312        ulAPIOrdinal = (ULONG)lpszProc;
     2313        if (ulAPIOrdinal <= 0x0000FFFF) {
     2314                proc = (FARPROC)winmod->setApi((int)ulAPIOrdinal, (ULONG)pfnNewProc);
     2315        }
     2316        else    proc = (FARPROC)winmod->setApi((char *)lpszProc, (ULONG)pfnNewProc);
     2317        if(proc == 0) {
     2318#ifdef DEBUG
     2319                if(ulAPIOrdinal <= 0x0000FFFF) {
     2320                        dprintf(("ODIN_SetProcAddress %x %x not found!", hModule, ulAPIOrdinal));
     2321                }
     2322                else    dprintf(("ODIN_SetProcAddress %x %s not found!", hModule, lpszProc));
     2323#endif
     2324                SetLastError(ERROR_PROC_NOT_FOUND);
     2325        }
     2326        if(HIWORD(lpszProc))
     2327                dprintf(("KERNEL32:  ODIN_SetProcAddress %s from %X returned %X\n", lpszProc, hModule, proc));
     2328        else    dprintf(("KERNEL32:  ODIN_SetProcAddress %x from %X returned %X\n", lpszProc, hModule, proc));
     2329
     2330        SetLastError(ERROR_SUCCESS);
     2331        return proc;
     2332  }
     2333  SetLastError(ERROR_INVALID_HANDLE);
     2334  return (FARPROC)-1;
     2335}
     2336//******************************************************************************
    22882337//Retrieve the version
    22892338//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.