STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Macros | Typedefs | Enumerations | Functions | Variables
delayimp.h File Reference

Go to the source code of this file.

Classes

struct  ImgDelayDescr
 
struct  DelayLoadProc
 
struct  DelayLoadInfo
 

Macros

#define _DELAY_IMP_VER   2
 
#define ExternC   extern
 
#define VcppException(sev, err)   ((sev) | (FACILITY_VISUALCPP<<16) | err)
 

Typedefs

typedef IMAGE_THUNK_DATA * PImgThunkData
 
typedef const IMAGE_THUNK_DATA * PCImgThunkData
 
typedef DWORD RVA
 
typedef struct ImgDelayDescr ImgDelayDescr
 
typedef struct ImgDelayDescrPImgDelayDescr
 
typedef const ImgDelayDescrPCImgDelayDescr
 
typedef struct DelayLoadProc DelayLoadProc
 
typedef struct DelayLoadInfo DelayLoadInfo
 
typedef struct DelayLoadInfoPDelayLoadInfo
 
typedef FARPROC(WINAPI * PfnDliHook) (unsigned dliNotify, PDelayLoadInfo pdli)
 

Enumerations

enum  DLAttr { dlattrRva = 0x1 }
 
enum  {
  dliStartProcessing, dliNoteStartProcessing = dliStartProcessing, dliNotePreLoadLibrary, dliNotePreGetProcAddress,
  dliFailLoadLib, dliFailGetProc, dliNoteEndProcessing
}
 

Functions

ExternC BOOL WINAPI __FUnloadDelayLoadedDLL2 (LPCSTR szDll)
 
ExternC HRESULT WINAPI __HrLoadAllImportsForDll (LPCSTR szDll)
 

Variables

ExternC PfnDliHook __pfnDliNotifyHook2
 
ExternC PfnDliHook __pfnDliFailureHook2
 

Macro Definition Documentation

#define _DELAY_IMP_VER   2
#define ExternC   extern
#define VcppException (   sev,
  err 
)    ((sev) | (FACILITY_VISUALCPP<<16) | err)

Typedef Documentation

typedef struct DelayLoadInfo DelayLoadInfo
typedef struct DelayLoadProc DelayLoadProc
typedef struct ImgDelayDescr ImgDelayDescr
typedef const IMAGE_THUNK_DATA* PCImgThunkData
typedef struct DelayLoadInfo * PDelayLoadInfo
typedef FARPROC(WINAPI * PfnDliHook) (unsigned dliNotify, PDelayLoadInfo pdli)
typedef struct ImgDelayDescr * PImgDelayDescr
typedef IMAGE_THUNK_DATA* PImgThunkData
typedef DWORD RVA

Enumeration Type Documentation

anonymous enum
Enumerator
dliStartProcessing 
dliNoteStartProcessing 
dliNotePreLoadLibrary 
dliNotePreGetProcAddress 
dliFailLoadLib 
dliFailGetProc 
dliNoteEndProcessing 
45  {
46  dliStartProcessing, // used to bypass or note helper only
48 
49  dliNotePreLoadLibrary, // called just before LoadLibrary, can
50  // override w/ new HMODULE return val
51  dliNotePreGetProcAddress, // called just before GetProcAddress, can
52  // override w/ new FARPROC return value
53  dliFailLoadLib, // failed to load library, fix it by
54  // returning a valid HMODULE
55  dliFailGetProc, // failed to get proc address, fix it by
56  // returning a valid FARPROC
57  dliNoteEndProcessing, // called after all processing is done, no
58  // no bypass possible at this point except
59  // by longjmp()/throw()/RaiseException.
60  };
Definition: delayimp.h:55
Definition: delayimp.h:53
Definition: delayimp.h:46
Definition: delayimp.h:47
Definition: delayimp.h:57
Definition: delayimp.h:49
Definition: delayimp.h:51
enum DLAttr
Enumerator
dlattrRva 
36  { // Delay Load Attributes
37  dlattrRva = 0x1, // RVAs are used instead of pointers
38  // Having this set indicates a VC7.0
39  // and above delay load descriptor.
40  };
Definition: delayimp.h:37

Function Documentation

ExternC BOOL WINAPI __FUnloadDelayLoadedDLL2 ( LPCSTR  szDll)
399  {
400  BOOL fRet = FALSE;
401  PCImgDelayDescr pidd = PiddFromDllName(szDll);
402 
403  if ((pidd != NULL) &&
404  (pidd->rvaUnloadIAT != 0)) {
405  HMODULE * phmod = PFromRva<HMODULE*>(pidd->rvaHmod);
406  HMODULE hmod = *phmod;
407  if (hmod != NULL) {
408  OverlayIAT(
409  PFromRva<PImgThunkData>(pidd->rvaIAT),
410  PFromRva<PCImgThunkData>(pidd->rvaUnloadIAT)
411  );
412  ::FreeLibrary(hmod);
413  *phmod = NULL;
414  fRet = TRUE;
415  }
416 
417  }
418  return fRet;
419  }
RVA rvaUnloadIAT
Definition: delayimp.h:29
RVA rvaHmod
Definition: delayimp.h:25
#define NULL
Definition: crtdbg.h:30
RVA rvaIAT
Definition: delayimp.h:26
static PCImgDelayDescr PiddFromDllName(LPCSTR szDll)
Definition: delayhlp.cpp:157
static void WINAPI OverlayIAT(PImgThunkData pitdDst, PCImgThunkData pitdSrc)
Definition: delayhlp.cpp:139
Definition: delayimp.h:22
ExternC HRESULT WINAPI __HrLoadAllImportsForDll ( LPCSTR  szDll)
423  {
424  HRESULT hrRet = HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND);
425  PCImgDelayDescr pidd = PiddFromDllName(szDll);
426 
427  if (pidd != NULL) {
428  // Found a matching DLL name, now process it.
429  //
430  // Set up the internal structure
431  //
432  FARPROC * ppfnIATEntry = PFromRva<FARPROC*>(pidd->rvaIAT);
433  size_t cpfnIATEntries = CountOfImports(PCImgThunkData(ppfnIATEntry));
434  FARPROC * ppfnIATEntryMax = ppfnIATEntry + cpfnIATEntries;
435 
436  for (;ppfnIATEntry < ppfnIATEntryMax; ppfnIATEntry++) {
437  __delayLoadHelper2(pidd, ppfnIATEntry);
438  }
439 
440  // Done, indicate some semblance of success
441  //
442  hrRet = S_OK;
443  }
444  return hrRet;
445  }
#define S_OK
Definition: comutil.h:62
#define NULL
Definition: crtdbg.h:30
RVA rvaIAT
Definition: delayimp.h:26
static PCImgDelayDescr PiddFromDllName(LPCSTR szDll)
Definition: delayhlp.cpp:157
Definition: delayimp.h:22
unsigned CountOfImports(PCImgThunkData pitdBase)
Definition: delayhlp.cpp:103
const IMAGE_THUNK_DATA * PCImgThunkData
Definition: delayimp.h:19
FARPROC WINAPI __delayLoadHelper2(PCImgDelayDescr pidd, FARPROC *ppfnIATEntry)
Definition: delayhlp.cpp:207

Variable Documentation

ExternC PfnDliHook __pfnDliFailureHook2
ExternC PfnDliHook __pfnDliNotifyHook2