home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * filename - DelayImp.h
- *
- * structures and prototypes necessary for delay loading of imports.
- * Delay loading of DLL imports is selected when building a module by
- *
- *
- * This technology supports delayed loading of DLLs for arbitrary images.
- *
- * Restrictions:
- * You cannot delay loading of a reference to imported data.
- * You cannot delay loading of KERNEL32.DLL.
- * You cannot delay loading of the RTLDLL (since these routines need
- * to be present to support delayed loading).
- * You must be very careful with using __FUnloadDelayLoadedDLL in a
- * multithreaded environment. It is possible to cause problems
- * if one thread gets a delay loaded function address from this
- * module, at the same time as another thread unloads the delayed
- * load DLL. There is no way for us to guard against that, so
- * the user has to be aware of the possibility.
- *
- * Notes:
- * TLS support works for delayed load DLLs with Borland tools, as we
- * have worked around the OS restrictions of handling TLS variables in
- * dynamically loaded DLLs.
- *
- ****************************************************************************/
-
- /*
- * C/C++ Run Time Library - Version 10.0
- *
- * Copyright (c) 1999, 2000 by Inprise Corporation
- * All Rights Reserved.
- *
- */
-
- /* $Revision: 9.4 $ */
-
- #ifndef __DELAYIMP_H
- #define __DELAYIMP_H
-
- #include <windows.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- typedef struct ImgDelayDescr
- {
- DWORD grAttrs; /* attributes */
- LPCSTR szName; /* pointer to dll name */
- HMODULE hmod; /* address of module handle */
- IMAGE_THUNK_DATA * pIAT; /* address of the IAT */
- IMAGE_THUNK_DATA * pINT; /* address of the INT */
- IMAGE_THUNK_DATA * pBoundIAT; /* address of the optional bound IAT */
- IMAGE_THUNK_DATA * pUnloadIAT; /* address of optional copy of
- original IAT */
- DWORD dwTimeStamp; /* 0 if not bound, */
- /* O.W. date/time stamp of DLL bound
- to (Old BIND) */
- } ImgDelayDescr;
-
- /* Delay load import hook notifications */
-
- typedef enum
- {
- dliNoteStartProcessing, /* used to bypass or note helper only */
- dliNotePreLoadLibrary, /* called just before LoadLibrary, can */
- /* override w/ new HMODULE return val */
- dliNotePreGetProcAddress, /* called just before GetProcAddress, can */
- /* override w/ new FARPROC return value */
- dliFailLoadLibrary, /* failed to load library, fix it by */
- /* returning a valid HMODULE */
- dliFailGetProcAddress, /* failed to get proc address, fix it by */
- /* returning a valid FARPROC */
- dliNoteEndProcessing, /* called after all processing is done, */
- /* no bypass possible at this point */
- /* except by longjmp(), throw(), or
- RaiseException. */
- } dliNotification;
-
- typedef struct DelayLoadProc
- {
- BOOL fImportByName;
- union
- {
- LPCSTR szProcName;
- DWORD dwOrdinal;
- };
- } DelayLoadProc;
-
- typedef struct DelayLoadInfo
- {
- DWORD cb; /* size of structure */
- const ImgDelayDescr * pidd; /* raw form of data (everything is
- there) */
- FARPROC * ppfn; /* points to address of function to
- load */
- LPCSTR szDll; /* name of dll */
- DelayLoadProc dlp; /* name or ordinal of procedure */
- HMODULE hmodCur; /* the hInstance of the library we
- have loaded */
- FARPROC pfnCur; /* the actual function that will be
- called */
- DWORD dwLastError;/* error received (if an error
- notification) */
- } DelayLoadInfo, *PDelayLoadInfo;
-
- typedef FARPROC (WINAPI *DelayedLoadHook)(
- dliNotification dliNotify,
- DelayLoadInfo * pdli
- );
-
- /* Unload support */
-
- /* routine definition; takes a pointer to a name to unload, or NULL to
- unload all the delay load dlls in the list.
- */
-
- BOOL WINAPI __FUnloadDelayLoadedDLL(LPCSTR szDll);
-
- /* Hook pointers */
-
- /* The "notify hook" gets called for every call to the
- delay load helper. This allows a user to hook every call and
- skip the delay load helper entirely.
-
- dliNotify ==
- {
- dliNoteStartProcessing |
- dliNotePreLoadLibrary |
- dliNotePreGetProcAddress |
- dliNoteEndProcessing
- }
-
- on this call.
- */
- extern DelayedLoadHook _EXPDATA __pfnDliNotifyHook;
-
- /* This is the failure hook,
-
- dliNotify ==
- {
- dliFailLoadLibrary |
- dliFailGetProcAddress
- }
- */
- extern DelayedLoadHook _EXPDATA __pfnDliFailureHook;
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __DELAYIMP_H */
-
-