dllload.c
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 51k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #include "shellprv.h"
  2. #define OLEDBVER 0x0250
  3. #include <oledb.h>
  4. #include <cmdtree.h>
  5. #include <oleext.h>
  6. #include <ntquery.h>
  7. #include <urlmon.h>
  8. #include <imagehlp.h>
  9. #include <dbgmem.h>
  10. #include <userenv.h>
  11. #include <activeds.h>
  12. #include <lm.h>
  13. #include <cscapi.h>
  14. #define _DSGETDCAPI_
  15. #include <dsgetdc.h>
  16. #define _NTDSAPI_
  17. #include <ntdsapi.h>
  18. #undef NTDSAPI          // needed as we reference this later
  19. #pragma  hdrstop
  20. #include "uemapp.h"
  21. #include "..libdllload.c"
  22. // -------- SHDOCVW.DLL --------
  23. HMODULE g_hmodShdocvw = NULL;
  24. DELAY_LOAD_BOOL(g_hmodShdocvw, SHDOCVW, DllRegisterWindowClasses,
  25.                 (const SHDRC * pshdrc),
  26.                 (pshdrc));
  27. DELAY_LOAD_HRESULT(g_hmodShdocvw, SHDOCVW, SHGetIDispatchForFolder,
  28.                 (LPCITEMIDLIST pidl, IWebBrowserApp ** ppauto),
  29.                 (pidl, ppauto));
  30. DELAY_LOAD_HRESULT(g_hmodShdocvw, SHDOCVW, URLQualifyA,
  31.                 ( LPCSTR pszURL, DWORD dwFlags, LPSTR * ppszOut ),
  32.                 ( pszURL, dwFlags, ppszOut ));
  33. DELAY_LOAD_HRESULT(g_hmodShdocvw, SHDOCVW, URLQualifyW,
  34.                 ( LPCWSTR pszURL, DWORD dwFlags, LPWSTR * ppszOut ),
  35.                 ( pszURL, dwFlags, ppszOut ));
  36. DELAY_LOAD_DWORD(g_hmodShdocvw, SHDOCVW, SoftwareUpdateMessageBox,
  37.                 ( HWND hWnd, LPCWSTR szDistUnit, DWORD dwFlags, LPSOFTDISTINFO psdi ),
  38.                 ( hWnd, szDistUnit, dwFlags, psdi ));
  39. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, HRESULT, _GetStdLocation, 150,
  40.                 ( LPWSTR pwszURL, DWORD cbPathSize, UINT id ),
  41.                 ( pwszURL, cbPathSize, id ));
  42. #if !defined(POSTPOSTSPLIT)
  43. //
  44. // Temporary hack for shdocvw/browseui split.  This should be fixed eventually.
  45. //
  46. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, BOOL,
  47.             ParseURLFromOutsideSourceA, 169,
  48.             (LPCSTR psz, LPSTR pszOut, LPDWORD pcchOut, LPBOOL pbWasSearchURL),
  49.             (psz, pszOut, pcchOut, pbWasSearchURL));
  50. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, BOOL,
  51.             ParseURLFromOutsideSourceW, 170,
  52.             (LPCWSTR psz, LPWSTR pszOut, LPDWORD pcchOut, LPBOOL pbWasSearchURL),
  53.             (psz, pszOut, pcchOut, pbWasSearchURL));
  54. DELAY_LOAD_ORD_ERR(g_hmodShdocvw, SHDOCVW, HRESULT,
  55.             NavToUrlUsingIEA, 203,
  56.             (LPCSTR wszUrl, BOOL fNewWindow),
  57.             (wszUrl, fNewWindow),
  58.             E_FAIL);
  59. DELAY_LOAD_ORD_ERR(g_hmodShdocvw, SHDOCVW, HRESULT,
  60.             NavToUrlUsingIEW, 204,
  61.             (LPCWSTR wszUrl, BOOL fNewWindow),
  62.             (wszUrl, fNewWindow),
  63.             E_FAIL);
  64. DELAY_LOAD_ORD_ERR(g_hmodShdocvw, SHDOCVW, HRESULT,
  65.             URLSubLoadString, 138,
  66.             (HMODULE hInst, UINT idRes, LPWSTR pszUrlOut,
  67.              DWORD cchSizeOut, DWORD dwSubstitutions),
  68.             (hInst, idRes, pszUrlOut, cchSizeOut, dwSubstitutions),
  69.             E_FAIL);
  70. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, DWORD,
  71.             SHRestricted2A, 158,
  72.             (RESTRICTIONS rest, LPCSTR pszUrl, DWORD dwReserved),
  73.             (rest, pszUrl, dwReserved));
  74. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, DWORD,
  75.             SHRestricted2W, 159,
  76.             (RESTRICTIONS rest, LPCWSTR pszUrl, DWORD dwReserved),
  77.             (rest, pszUrl, dwReserved));
  78. #endif
  79. DELAY_LOAD_ORD(g_hmodShdocvw, SHDOCVW, BOOL, GetLeakDetectionFunctionTable, 161,
  80.                (LEAKDETECTFUNCS *pTable), (pTable));
  81. DELAY_LOAD_VOID_ORD(g_hmodShdocvw, SHDOCVW, IEOnFirstBrowserCreation, 195,
  82.                 (IUnknown* punk), (punk));
  83. //---------- ACTIVEDS.DLL --------------
  84. HMODULE g_hmodActiveDS = NULL;
  85. DELAY_LOAD_HRESULT(g_hmodActiveDS, ACTIVEDS, ADsOpenObject,
  86.                     (LPCWSTR lpszPathName, LPCWSTR lpszUserName, LPCWSTR lpszPassword, DWORD  dwReserved,
  87.                      REFIID riid, void **ppObject),
  88.                     (lpszPathName, lpszUserName, lpszPassword, dwReserved, riid, ppObject));
  89. //---------- BROWSEUI.DLL --------------
  90. //
  91. //--- delay load browseui functions
  92. HMODULE g_hmodBrowseui = NULL;
  93. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, BOOL, SHOnCWMCommandLine, 127,
  94.                 (LPARAM lParam), (lParam));
  95. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, BOOL, SHOpenFolderWindow, 102,
  96.                   (IETHREADPARAM* pieiIn),
  97.                   (pieiIn));
  98. DELAY_LOAD_IE_HRESULT(g_hmodBrowseui, BROWSEUI,
  99.                   SHGetSetDefFolderSettings, 107,
  100.                   (DEFFOLDERSETTINGS *pdfs, int cbDfs, UINT flags),
  101.                   (pdfs, cbDfs, flags));
  102. DELAY_LOAD_IE_ORD_VOID(g_hmodBrowseui, BROWSEUI,
  103.                   SHCreateSavedWindows, 105, (), ());
  104. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, HRESULT,
  105.                   SHCreateBandForPidl, 120,
  106.                   (LPCITEMIDLIST pidl, IUnknown** ppunk, BOOL fAllowBrowserBand),
  107.                   (pidl, ppunk, fAllowBrowserBand));
  108. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, HRESULT,
  109.                   SHPidlFromDataObject, 121,
  110.                   (IDataObject *pdtobj, LPITEMIDLIST * ppidlTarget, LPWSTR pszDisplayName,DWORD cchDisplayName),
  111.                   (pdtobj, ppidlTarget, pszDisplayName, cchDisplayName));
  112. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, DWORD,
  113.                   IDataObject_GetDeskBandState, 122,
  114.                   (IDataObject *pdtobj),
  115.                   (pdtobj));
  116. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, IETHREADPARAM*,
  117.                   SHCreateIETHREADPARAM, 123,
  118.                   (LPCWSTR pszCmdLineIn, int nCmdShowIn, ITravelLog *ptlIn, IEFreeThreadedHandShake* piehsIn),
  119.                   (pszCmdLineIn, nCmdShowIn, ptlIn, piehsIn));
  120. DELAY_LOAD_IE_ORD_VOID(g_hmodBrowseui, BROWSEUI,
  121.                   SHDestroyIETHREADPARAM, 126,
  122.                   (IETHREADPARAM* pieiIn),
  123.                   (pieiIn));
  124. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, BOOL,
  125.                   SHParseIECommandLine, 125,
  126.                   (LPCWSTR * ppszCmdLine, IETHREADPARAM * piei),
  127.                   (ppszCmdLine, piei));
  128. DELAY_LOAD_IE_ORD(g_hmodBrowseui, BROWSEUI, HRESULT,
  129.                   Channel_QuickLaunch, 133, (void),());
  130. // -------- OLEAUT32.DLL --------
  131. HMODULE g_hmodOLEAUT32 = NULL;
  132. DELAY_LOAD(g_hmodOLEAUT32, OLEAUT32, BSTR, SysAllocString,
  133.     (const WCHAR *pch), (pch));
  134. DELAY_LOAD(g_hmodOLEAUT32, OLEAUT32, BSTR, SysAllocStringLen,
  135.     (const WCHAR *pch, unsigned int i), (pch, i));
  136. DELAY_LOAD_VOID(g_hmodOLEAUT32, OLEAUT32, SysFreeString, (BSTR bs), (bs));
  137. DELAY_LOAD(g_hmodOLEAUT32, OLEAUT32, BSTR, SysAllocStringByteLen,
  138.     (LPCSTR psz, unsigned int len), (psz, len));
  139. DELAY_LOAD_UINT(g_hmodOLEAUT32, OLEAUT32, SysStringLen,
  140.     (BSTR str), (str));
  141. DELAY_LOAD_UINT(g_hmodOLEAUT32, OLEAUT32, SysStringByteLen,
  142.     (BSTR str), (str));
  143. DELAY_LOAD_INT(g_hmodOLEAUT32, OLEAUT32, DosDateTimeToVariantTime,
  144.     (USHORT wDosDate, USHORT wDosTime, DOUBLE * pvtime), (wDosDate, wDosTime, pvtime));
  145. DELAY_LOAD_INT(g_hmodOLEAUT32, OLEAUT32, VariantTimeToDosDateTime,
  146.     (DOUBLE vtime, USHORT *pwDosDate, USHORT *pwDosTime), (vtime, pwDosDate, pwDosTime));
  147. #undef VariantClear
  148. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, VariantClear,
  149.     (VARIANTARG *pvarg), (pvarg));
  150. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, VariantCopy,
  151.     (VARIANTARG * pvargDest, VARIANTARG * pvargSrc), (pvargDest, pvargSrc));
  152. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, VariantChangeType,
  153.     (VARIANTARG * pvargDest, VARIANTARG * pvarSrc, USHORT wFlags, VARTYPE vt), 
  154.     (pvargDest, pvarSrc, wFlags, vt));
  155. DELAY_LOAD_SAFEARRAY(g_hmodOLEAUT32, OLEAUT32, SafeArrayCreateVector,
  156.     (VARTYPE vt, long iBound, ULONG cElements), (vt, iBound, cElements) );
  157. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, CreateErrorInfo,
  158.     (ICreateErrorInfo **pperrinfo), (pperrinfo));
  159. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, LoadRegTypeLib,
  160.     (REFGUID rguid, unsigned short wVerMajor, unsigned short wVerMinor, LCID lcid, ITypeLib **pptlib), 
  161.     (rguid, wVerMajor, wVerMinor, lcid, pptlib));
  162. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, SetErrorInfo,
  163.     (DWORD  dwReserved, IErrorInfo  *perrinfo), (dwReserved, perrinfo));
  164. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, RegisterTypeLib,
  165.     (ITypeLib *ptlib, WCHAR *szFullPath, WCHAR *szHelpDir),
  166.     (ptlib, szFullPath, szHelpDir));
  167. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, LoadTypeLib,
  168.     (const WCHAR *szFile, ITypeLib **pptlib), (szFile, pptlib));
  169. DELAY_LOAD(g_hmodOLEAUT32, OLEAUT32, INT, SystemTimeToVariantTime,
  170.     (LPSYSTEMTIME pst, double *pvtime), (pst, pvtime));
  171. DELAY_LOAD(g_hmodOLEAUT32, OLEAUT32, INT, VariantTimeToSystemTime,
  172.     (DOUBLE vtime, LPSYSTEMTIME lpSystemTime), (vtime, lpSystemTime));
  173. DELAY_LOAD_HRESULT(g_hmodOLEAUT32, OLEAUT32, VarI4FromStr,
  174.     (OLECHAR * strIn, LCID lcid, DWORD dwFlags, LONG * plOut), (strIn, lcid, dwFlags, plOut));
  175. // -----------ole32.dll---------------
  176. HMODULE g_hmodOLE32 = NULL;
  177. #undef PropVariantClear
  178. DELAY_LOAD_HRESULT( g_hmodOLE32, OLE32, PropVariantClear, (PROPVARIANT * pvar), (pvar));
  179. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoGetClassObject,
  180.     (REFCLSID clsid, DWORD dwContext, LPWSTR pszRemote, REFIID riid, void ** ppv), (clsid, dwContext, pszRemote, riid, ppv));
  181. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoCreateInstance,
  182.     (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, void ** ppv), (rclsid, pUnkOuter, dwClsContext, riid, ppv));
  183. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleRun, (IUnknown *punk), (punk));
  184. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateBindCtx, (DWORD dw, LPBC *ppbc), (dw, ppbc));
  185. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleInitialize, (void *pv), (pv));
  186. DELAY_LOAD_VOID(g_hmodOLE32, OLE32, OleUninitialize, (void), ());
  187. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoInitialize, (void *pv), (pv));
  188. // BUGBUG -- Win9x doesn't have CoInitializeEx
  189. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoInitializeEx, (void *pv, DWORD dw), (pv, dw));
  190. DELAY_LOAD_VOID(g_hmodOLE32, OLE32, CoUninitialize, (void), ());
  191. DELAY_LOAD_VOID(g_hmodOLE32, OLE32, CoFreeUnusedLibraries, (void), ());
  192. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateStreamOnHGlobal,
  193.                 ( HGLOBAL hGlobal, BOOL fRelease, LPSTREAM *ppstm),
  194.                 ( hGlobal, fRelease, ppstm ));
  195. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateDataAdviseHolder,
  196.                 (LPDATAADVISEHOLDER *ppDAHolder), (ppDAHolder));
  197. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoGetInterfaceAndReleaseStream ,
  198.                    (LPSTREAM pStm, REFIID riid, void ** ppv), (pStm, riid, ppv));
  199. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoMarshalInterThreadInterfaceInStream,
  200.                    (REFIID riid, IUnknown *punk, LPSTREAM *ppStm), (riid, punk, ppStm));
  201. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgCreateDocfile,
  202.                    (const WCHAR *pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen), (pwcsName, grfMode, reserved, ppstgOpen));
  203. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgOpenStorage,
  204.                    (const WCHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen), (pwcsName, pstgPriority, grfMode, snbExclude, reserved, ppstgOpen));
  205. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgOpenStorageEx,
  206.                    (const WCHAR *pwcsName, DWORD grfMode, DWORD stgfmt, DWORD grfAttrs, STGOPTIONS * pStgOptions, void * reserved2, REFIID riid, void ** ppObjectOpen), 
  207.                    (pwcsName, grfMode, stgfmt, grfAttrs, pStgOptions, reserved2, riid, ppObjectOpen));
  208. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgIsStorageFile,
  209.                    (const WCHAR *pwcsName), (pwcsName));
  210. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, FmtIdToPropStgName,
  211.                    (const FMTID* pfmtid, LPOLESTR oszName), (pfmtid, oszName));
  212. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgOpen,
  213.                    (const WCHAR *pwcsName), (pwcsName));
  214. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleQueryCreateFromData,
  215.                    (IDataObject *pSrcDataObj), (pSrcDataObj));
  216. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleQueryLinkFromData,
  217.                    (IDataObject *pSrcDataObj), (pSrcDataObj));
  218. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleRegGetMiscStatus,
  219.                    (REFCLSID clsid, DWORD dwAspect, DWORD *pdwStatus),
  220.                    (clsid, dwAspect, pdwStatus));
  221. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, GetClassFile,
  222.                    (const WCHAR *pwcs, CLSID *pclsid), (pwcs, pclsid));
  223. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleSetClipboard,
  224.                    (IDataObject *pSrcDataObj), (pSrcDataObj));
  225. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleGetClipboard,
  226.                    (IDataObject **ppSrcDataObj), (ppSrcDataObj));
  227. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleFlushClipboard,
  228.                    (), ());
  229. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, DoDragDrop,
  230.                    (IDataObject *pdata, IDropSource *pdsrc, DWORD dwEffect, DWORD *pdwEffect), (pdata, pdsrc, dwEffect, pdwEffect));
  231. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, RevokeDragDrop,
  232.                    (HWND hwnd), (hwnd));
  233. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, RegisterDragDrop,
  234.                    (HWND hwnd, LPDROPTARGET pDropTarget), (hwnd, pDropTarget));
  235. DELAY_LOAD_VOID(g_hmodOLE32, OLE32, ReleaseStgMedium,
  236.                    (LPSTGMEDIUM pmedium), (pmedium));
  237. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoGetMalloc,
  238.                    (DWORD dw, IMalloc **ppmem), (dw, ppmem));
  239. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleRegGetUserType,
  240.         (REFCLSID clsid, DWORD dwFormOfType, LPWSTR * pszUserType),
  241.         (clsid, dwFormOfType, pszUserType));
  242. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleRegEnumVerbs,
  243.     (REFCLSID clsid, LPENUMOLEVERB * ppenum),
  244.     (clsid, ppenum));
  245. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, WriteClassStm,
  246.     (LPSTREAM pStm, REFCLSID rclsid),
  247.     (pStm, rclsid));
  248. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleLoadFromStream,
  249.     (LPSTREAM pStm, REFIID iidInterface, void ** ppvObj),
  250.     (pStm, iidInterface, ppvObj));
  251. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, OleSaveToStream,
  252.     (LPPERSISTSTREAM pPStm, LPSTREAM pStm ),
  253.     (pPStm, pStm ));
  254. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoMarshalInterface,
  255.     (LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext,
  256.      void *pvDestContext, DWORD mshlflags),
  257.     (pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags));
  258. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoUnmarshalInterface,
  259.     (LPSTREAM pStm, REFIID riid, void ** ppv),
  260.     (pStm, riid, ppv));
  261. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoReleaseMarshalData,
  262.     (LPSTREAM pStm),
  263.     (pStm));
  264. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, ProgIDFromCLSID,
  265.     (REFCLSID clsid, LPWSTR * ppszProgID),
  266.     (clsid, ppszProgID));
  267. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoRegisterClassObject,
  268.     (REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext,
  269.      DWORD flags, LPDWORD lpdwRegister),
  270.     (rclsid, pUnk, dwClsContext, flags, lpdwRegister));
  271. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CoRevokeClassObject,
  272.     (DWORD dwRegister),
  273.     (dwRegister));
  274. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateOleAdviseHolder,
  275.     (LPOLEADVISEHOLDER * ppOAHolder),
  276.     (ppOAHolder));
  277. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateFileMoniker,
  278.     (LPCOLESTR lpszPathName, LPMONIKER *ppmk),
  279.     (lpszPathName, ppmk));
  280. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StringFromCLSID,
  281.     (IN REFCLSID rclsid, OUT LPOLESTR *lplpsz),
  282.     (rclsid, lplpsz));
  283.     
  284. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, StgCreateDocfileOnILockBytes,
  285.     (ILockBytes * plkbyt, DWORD grfMode, DWORD reserved, IStorage ** ppstgOpen),
  286.     (plkbyt, grfMode, reserved, ppstgOpen));
  287.     
  288. DELAY_LOAD_HRESULT(g_hmodOLE32, OLE32, CreateILockBytesOnHGlobal,
  289.     (HGLOBAL hGlobal, BOOL fDeleteOnRelease, ILockBytes ** ppLkbyt),
  290.     (hGlobal, fDeleteOnRelease, ppLkbyt));
  291. DELAY_LOAD_LPVOID(g_hmodOLE32, OLE32, CoTaskMemAlloc, (SIZE_T cb), (cb));
  292. DELAY_LOAD_VOID(g_hmodOLE32, OLE32, CoTaskMemFree, (void *pv), (pv));
  293. // -----------oleacc.dll---------------
  294. HMODULE g_hmodOLEACC = NULL;
  295. DELAY_LOAD_LRESULT(g_hmodOLEACC, OLEACC, LresultFromObject, 
  296.                    (REFIID riid, WPARAM wParam, LPUNKNOWN punk),
  297.                    (riid, wParam, punk));
  298. DELAY_LOAD_HRESULT(g_hmodOLEACC, OLEACC, AccessibleObjectFromWindow, 
  299.                    (HWND hwnd, DWORD idObject, REFIID riid, void** ppvObj),
  300.                    (hwnd, idObject, riid, ppvObj));
  301. DELAY_LOAD_HRESULT(g_hmodOLEACC, OLEACC, CreateStdAccessibleObject, 
  302.                    (HWND hwnd, LONG idObject, REFIID riid, void** ppvObj),
  303.                    (hwnd, idObject, riid, ppvObj));
  304. // -------------------- linkinfo.dll ----------------------
  305. HMODULE g_hmodLinkinfo = NULL;
  306. #define DELAY_LINKINFO_BOOL(_fn, _fni, _args, _nargs) DELAY_LOAD_NAME_ERR(g_hmodLinkinfo, LINKINFO, BOOL, _fn, _fni, _args, _nargs, FALSE)
  307. #define DELAY_LINKINFO_VOID(_fn, _args, _nargs) DELAY_LOAD_NAME_VOID(g_hmodLinkinfo, LINKINFO, _fn, _fn, _args, _nargs)
  308. #ifdef UNICODE
  309. DELAY_LINKINFO_BOOL(CreateLinkInfo, CreateLinkInfo, (LPCTSTR psz, PLINKINFO *ppli), (psz, ppli));
  310. DELAY_LINKINFO_BOOL(ResolveLinkInfo, ResolveLinkInfo,
  311.                 (PCLINKINFO pli, LPTSTR psz, DWORD dw1, HWND hwnd, PDWORD pdw2, PLINKINFO *ppli),
  312.                 (pli, psz, dw1, hwnd, pdw2, ppli));
  313. #else
  314. #undef CreateLinkInfo
  315. #undef ResolveLinkInfo
  316. DELAY_LINKINFO_BOOL(CreateLinkInfoA, CreateLinkInfo, (LPCTSTR psz, PLINKINFO *ppli), (psz, ppli));
  317. DELAY_LINKINFO_BOOL(ResolveLinkInfoA, ResolveLinkInfo,
  318.                 (PCLINKINFO pli, LPTSTR psz, DWORD dw1, HWND hwnd, PDWORD pdw2, PLINKINFO *ppli),
  319.                 (pli, psz, dw1, hwnd, pdw2, ppli));
  320. #endif
  321. DELAY_LINKINFO_VOID(DestroyLinkInfo, (PLINKINFO pli), (pli));
  322. DELAY_LINKINFO_BOOL(GetLinkInfoData, GetLinkInfoData,
  323.                 (PCLINKINFO pli, LINKINFODATATYPE lidt, const VOID **ppv), 
  324.                 (pli, lidt, ppv));
  325.                                                                                       
  326. #ifdef WINNT
  327. // -----------query.dll---------------
  328. HMODULE g_hmodQuery = NULL;
  329. DELAY_LOAD_HRESULT(g_hmodQuery, QUERY, CIMakeICommand,
  330.     (ICommand **ppQuery, ULONG cScope, DWORD const *aDepths, WCHAR const * const *awcsScope, WCHAR const * const *awcsCat, WCHAR const * const *awcsMachine),
  331.     (ppQuery, cScope, aDepths, awcsScope, awcsCat, awcsMachine));
  332. DELAY_LOAD_HRESULT(g_hmodQuery, QUERY, CITextToFullTreeEx,
  333.     (WCHAR const *pwszRestriction, ULONG ulDialect, WCHAR const *pwszColumns, WCHAR const *pwszSortColumns, WCHAR const *pwszGroupings, DBCOMMANDTREE **ppTree, ULONG cProperties, CIPROPERTYDEF *pReserved, LCID LocaleID),
  334.     (pwszRestriction, ulDialect, pwszColumns, pwszSortColumns, pwszGroupings, ppTree, cProperties, pReserved, LocaleID));
  335. DELAY_LOAD_HRESULT(g_hmodQuery, QUERY, LocateCatalogsW,
  336.     (WCHAR const *pwszScope, ULONG iBmk, WCHAR *pwszMachine, ULONG *pccMachine, WCHAR *pwszCat, ULONG *pccCat),
  337.     (pwszScope, iBmk, pwszMachine, pccMachine, pwszCat, pccCat));
  338. DELAY_LOAD_HRESULT(g_hmodQuery, QUERY, CIState,
  339.     (WCHAR const *pwszCatalog, WCHAR const *pwszMachine, CI_STATE *pciState),
  340.     (pwszCatalog, pwszMachine, pciState));
  341. // -----------fmifs.dll---------------
  342. HMODULE g_hmodFmifs = NULL;
  343. DELAY_LOAD_BOOLEAN(g_hmodFmifs, FMIFS, QueryFileSystemName,
  344.                 (PWSTR NtDriveName, PWSTR FileSystemName, PUCHAR MajorVersion, PUCHAR MinorVersion, PNTSTATUS ErrorCode),
  345.                 (NtDriveName, FileSystemName, MajorVersion, MinorVersion, ErrorCode))
  346.                                                                                       
  347. DELAY_LOAD_BOOLEAN(g_hmodFmifs, FMIFS, QueryLatestFileSystemVersion,
  348.                 (PWSTR FileSystemName, PUCHAR MajorVersion, PUCHAR MinorVersion),
  349.                 (FileSystemName, MajorVersion, MinorVersion))
  350.                                                                                       
  351. DELAY_LOAD_BOOLEAN(g_hmodFmifs, FMIFS, QueryAvailableFileSystemFormat,
  352.                 (ULONG Index, PWSTR FileSystemName, PUCHAR MajorVersion, PUCHAR MinorVersion, PBOOLEAN Latest),
  353.                 (Index, FileSystemName, MajorVersion, MinorVersion, Latest))
  354. #endif // WINNT                                                                                      
  355. #ifdef UNICODE
  356. // -----------kernel32.dll---------------
  357. // primarily for winnt specific kernel functions that we can't link to
  358. // because it would bind us to NT5.
  359. HMODULE g_hmodAdvApi32 = NULL;
  360. DELAY_LOAD_NAME_ERR(g_hmodAdvApi32, ADVAPI32, BOOL, DelayCreateProcessWithLogon,
  361.                     CreateProcessWithLogonW,
  362.                     (LPCWSTR pszUser,
  363.                      LPCWSTR pszDomain,
  364.                      LPCWSTR pszPassword,
  365.                      DWORD dwLogonFlags,
  366.                      LPCWSTR lpApplicationName,
  367.                      LPCWSTR lpCommandLine,
  368.                      DWORD dwCreationFlags,
  369.                      LPVOID lpEnvironment,
  370.                      LPCWSTR lpCurrentDirectory,
  371.                      LPSTARTUPINFOW lpStartupInfo,
  372.                      LPPROCESS_INFORMATION lpProcessInformation
  373.                     ), 
  374.                     (pszUser,
  375.                      pszDomain,
  376.                      pszPassword,
  377.                      dwLogonFlags,
  378.                      lpApplicationName,
  379.                      lpCommandLine, 
  380.                      dwCreationFlags,
  381.                      lpEnvironment,
  382.                      lpCurrentDirectory,
  383.                      lpStartupInfo,
  384.                      lpProcessInformation
  385.                     ), 
  386.                     FALSE                  
  387.                    );
  388. #endif
  389. // NT5 specific ...
  390. #ifdef WINNT
  391. HMODULE g_hmodKernel32 = NULL;
  392. DELAY_LOAD_NAME_ERR(g_hmodKernel32, KERNEL32, LANGID, DelayGetUserDefaultUILanguage,
  393.     GetUserDefaultUILanguage, 
  394.     (void),(),LANG_USER_DEFAULT);
  395. #endif
  396. // -----------urlmon.dll---------------
  397. HMODULE g_hmodUrlmon = NULL;
  398. // EXTERN_C STDAPI_(HRESULT) CoInternetCreateSecurityManager(IServiceProvider *pSP, IInternetSecurityManager **ppSM, DWORD dwReserved);
  399. DELAY_LOAD_HRESULT(g_hmodUrlmon, URLMON, CoInternetCreateSecurityManager,
  400.     (IServiceProvider *pSP, IInternetSecurityManager **ppSM, DWORD dwReserved),
  401.     (pSP, ppSM, dwReserved));
  402. DELAY_LOAD_HRESULT(g_hmodUrlmon, URLMON, CreateURLMoniker,
  403.     (IMoniker* pMkCtx, LPCWSTR pwsURL, IMoniker ** ppimk), (pMkCtx, pwsURL, ppimk));
  404. DELAY_LOAD_HRESULT(g_hmodUrlmon, URLMON, RegisterBindStatusCallback,
  405.     (LPBC pBC, IBindStatusCallback *pBSCb, IBindStatusCallback**  ppBSCBPrev, DWORD dwReserved),
  406.     (pBC, pBSCb, ppBSCBPrev, dwReserved));
  407. DELAY_LOAD_HRESULT(g_hmodUrlmon, URLMON, RevokeBindStatusCallback,
  408.     (LPBC pBC, IBindStatusCallback *pBSCb),
  409.     (pBC, pBSCb));
  410. DELAY_LOAD_HRESULT(g_hmodUrlmon, URLMON, HlinkNavigateString,
  411.     (IUnknown *pUnk, LPCWSTR szTarget),
  412.     (pUnk, szTarget));
  413. // -----------WININET.dll---------------
  414. HMODULE g_hmodWininet = NULL;
  415. #undef CreateUrlCacheEntryA
  416. // EXTERN_C STDAPI_(BOOL) CreateUrlCacheEntryA(LPCSTR lpszUrlName, DWORD dwExpectedFileSize, LPCSTR lpszFileExtension,
  417. //                                                LPSTR lpszFileName, DWORD dwReserved);
  418. DELAY_LOAD_NAME_ERR(g_hmodWininet, WININET, BOOL, _CreateUrlCacheEntryA, CreateUrlCacheEntryA,
  419.     (LPCSTR lpszUrlName, DWORD dwExpectedFileSize, LPCSTR lpszFileExtension, LPSTR lpszFileName, DWORD dwReserved),
  420.     (lpszUrlName, dwExpectedFileSize, lpszFileExtension, lpszFileName, dwReserved), FALSE);
  421. #undef CreateUrlCacheEntryW
  422. // EXTERN_C STDAPI_(BOOL) CreateUrlCacheEntryW(LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension,
  423. //                                                LPWSTR lpszFileName, DWORD dwReserved);
  424. DELAY_LOAD_NAME_ERR(g_hmodWininet, WININET, BOOL, _CreateUrlCacheEntryW, CreateUrlCacheEntryW,
  425.     (LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension, LPWSTR lpszFileName, DWORD dwReserved),
  426.     (lpszUrlName, dwExpectedFileSize, lpszFileExtension, lpszFileName, dwReserved), FALSE);
  427. #undef CommitUrlCacheEntryA
  428. // EXTERN_C STDAPI_(BOOL) CommitUrlCacheEntryA(LPCSTR lpszUrlName, LPCSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime,
  429. //                                             DWORD CacheEntryType, LPSTR lpHeaderInfo, DWORD dwHeaderSize, LPCSTR lpszFileExtension, LPCSTR lpszOriginalUrl);
  430. DELAY_LOAD_NAME_ERR(g_hmodWininet, WININET, BOOL, _CommitUrlCacheEntryA, CommitUrlCacheEntryA,
  431.     (LPCSTR lpszUrlName, LPCSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime,
  432.      DWORD CacheEntryType, LPSTR lpHeaderInfo, DWORD dwHeaderSize, LPCSTR lpszFileExtension, LPCSTR lpszOriginalUrl),
  433.     (lpszUrlName, lpszLocalFileName, ExpireTime, LastModifiedTime, CacheEntryType, lpHeaderInfo, dwHeaderSize, lpszFileExtension, lpszOriginalUrl), FALSE);
  434. #undef CommitUrlCacheEntryW
  435. // EXTERN_C STDAPI_(BOOL) CommitUrlCacheEntryW(LPCWSTR lpszUrlName, LPCWSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime,
  436. //                                             DWORD CacheEntryType, LPWSTR lpHeaderInfo, DWORD dwHeaderSize, LPCWSTR lpszFileExtension, LPCWSTR lpszOriginalUrl);
  437. DELAY_LOAD_NAME_ERR(g_hmodWininet, WININET, BOOL, _CommitUrlCacheEntryW, CommitUrlCacheEntryW,
  438.     (LPCWSTR lpszUrlName, LPCWSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime,
  439.      DWORD CacheEntryType, LPWSTR lpHeaderInfo, DWORD dwHeaderSize, LPCWSTR lpszFileExtension, LPCWSTR lpszOriginalUrl),
  440.     (lpszUrlName, lpszLocalFileName, ExpireTime, LastModifiedTime, CacheEntryType, lpHeaderInfo, dwHeaderSize, lpszFileExtension, lpszOriginalUrl), FALSE);
  441. // -----------commdlg.dll---------------
  442. HMODULE g_hmodCommDlg = NULL;
  443. #ifdef UNICODE
  444. DELAY_LOAD_BOOL(g_hmodCommDlg, comdlg32, GetOpenFileNameW, (LPOPENFILENAMEW pofn), (pofn))
  445. DELAY_LOAD_BOOL(g_hmodCommDlg, comdlg32, GetSaveFileNameW, (LPOPENFILENAMEW pofn), (pofn))
  446. #else
  447. DELAY_LOAD_BOOL(g_hmodCommDlg, comdlg32, GetOpenFileNameA, (LPOPENFILENAMEA pofn), (pofn))
  448. DELAY_LOAD_BOOL(g_hmodCommDlg, comdlg32, GetSaveFileNameA, (LPOPENFILENAMEA pofn), (pofn))
  449. #endif
  450. // -----------sspi.dll---------------
  451. HMODULE g_hmodSECUR32 = NULL;
  452. DELAY_LOAD(g_hmodSECUR32, secur32, BOOLEAN, GetUserNameExW,
  453.            (EXTENDED_NAME_FORMAT NameFormat, LPWSTR lpNameBuffer, PULONG nSize),
  454.            (NameFormat, lpNameBuffer, nSize)); 
  455. // -----------hhctrl.ocx--------------- 
  456. HMODULE g_hmodHHCtrl = NULL;
  457. #ifdef UNICODE
  458. DELAY_LOAD_EXT(g_hmodHHCtrl, hhctrl, OCX, HWND, HtmlHelpW,
  459.                 (HWND hwndCaller, LPCWSTR pwszFile, UINT uCommand, DWORD dwData), 
  460.                 (hwndCaller, pwszFile, uCommand, dwData))
  461. #else
  462. DELAY_LOAD_EXT(g_hmodHHCtrl, hhctrl, OCX, HWND, HtmlHelpA,
  463.                 (HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData), 
  464.                 (hwndCaller, pszFile, uCommand, dwData))
  465. #endif //UNICODE
  466. // -----------version.dll-------------------
  467. HMODULE g_hmodVersion = NULL;
  468. #ifdef UNICODE
  469. DELAY_LOAD_BOOL(g_hmodVersion, version, GetFileVersionInfoW,
  470.                 (LPTSTR pszFilename, DWORD dwHandle, DWORD dwLen, void *lpData),
  471.                 (pszFilename, dwHandle, dwLen, lpData))
  472. DELAY_LOAD(g_hmodVersion, version, DWORD, GetFileVersionInfoSizeW,
  473.                 (LPTSTR pszFilename,  LPDWORD lpdwHandle),
  474.                 (pszFilename, lpdwHandle))
  475.  
  476. DELAY_LOAD_BOOL(g_hmodVersion, version, VerQueryValueW,
  477.                 (const void *pBlock, LPTSTR lpSubBlock, void **ppBuffer, PUINT puLen),
  478.                 (pBlock, lpSubBlock, ppBuffer, puLen))
  479. DELAY_LOAD_DWORD(g_hmodVersion, version, VerLanguageNameW,
  480.                 (DWORD wLang, LPTSTR szLang, DWORD nSize),
  481.                 (wLang, szLang, nSize))
  482. DELAY_LOAD_BOOL(g_hmodVersion, version, VerQueryValueIndexW,
  483.                 (const void *pBlock, LPTSTR lpSubBlock, DWORD dwIndex, void **ppBuffer, void **ppValue, PUINT puLen),
  484.                 (pBlock, lpSubBlock, dwIndex, ppBuffer, ppValue, puLen))
  485. #else
  486. DELAY_LOAD_BOOL(g_hmodVersion, version, GetFileVersionInfoA,
  487.                 (LPTSTR pszFilename, DWORD dwHandle, DWORD dwLen, void *lpData),
  488.                 (pszFilename, dwHandle, dwLen, lpData))
  489. DELAY_LOAD(g_hmodVersion, version, DWORD, GetFileVersionInfoSizeA,
  490.                 (LPTSTR pszFilename,  LPDWORD lpdwHandle),
  491.                 (pszFilename, lpdwHandle))
  492.  
  493. DELAY_LOAD_BOOL(g_hmodVersion, version, VerQueryValueA,
  494.                 (const void *pBlock, LPTSTR lpSubBlock, void **ppBuffer, PUINT puLen),
  495.                 (pBlock, lpSubBlock, ppBuffer, puLen))
  496. DELAY_LOAD_DWORD(g_hmodVersion, version, VerLanguageNameA,
  497.                 (DWORD wLang, LPTSTR szLang, DWORD nSize),
  498.                 (wLang, szLang, nSize))
  499. #endif
  500. // --------- MPR.DLL ---------------
  501. HMODULE g_hmodMPR = NULL;
  502. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetConnectionDialog, (HWND  hwnd, DWORD dwType), (hwnd, dwType));
  503. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCloseEnum, (HANDLE hEnum), (hEnum));
  504. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetDisconnectDialog,
  505.         (HWND hwnd, DWORD dwType), (hwnd, dwType));
  506. #ifdef UNICODE
  507. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetEnumResourceW,
  508.        (HANDLE  hEnum, LPDWORD lpcCount, LPVOID  lpBuffer, LPDWORD lpBufferSize),
  509.        (hEnum, lpcCount, lpBuffer, lpBufferSize));
  510. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetOpenEnumW,
  511.        (DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum),
  512.        (dwScope, dwType, dwUsage, lpNetResource, lphEnum));
  513. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetFormatNetworkNameW,
  514.     (LPCWSTR lpProvider, LPCWSTR lpRemoteName, LPWSTR lpFormattedName,
  515.      LPDWORD lpnLength, DWORD dwFlags, DWORD dwAveCharPerLine),
  516.     (lpProvider, lpRemoteName, lpFormattedName, lpnLength,  dwFlags, dwAveCharPerLine));
  517. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetRestoreConnectionW,
  518.        (HWND hwnd, LPCWSTR psz),
  519.        (hwnd, psz));
  520. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCancelConnectionW,
  521.        (LPCTSTR lpName, BOOL fForce),
  522.        (lpName, fForce));
  523. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetProviderNameW,
  524.        (DWORD dwNetType,
  525.         LPWSTR lpProvider,
  526.         LPDWORD lpBufferSize),
  527.        (dwNetType,lpProvider,lpBufferSize));
  528. DELAY_LOAD_WNET(g_hmodMPR, MPR, MultinetGetErrorTextW,
  529.        (LPWSTR lpErrorTextBuf,
  530.         LPDWORD lpnErrorBufSize,
  531.         LPWSTR lpProviderNameBuf,
  532.         LPDWORD lpnNameBufSize   ),
  533.        (lpErrorTextBuf, lpnErrorBufSize, lpProviderNameBuf, lpnNameBufSize ));
  534. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetUserW,
  535.        (LPCWSTR lpName,
  536.         LPWSTR lpUserName,
  537.         LPDWORD lpnLength),
  538.        (lpName,lpUserName,lpnLength));
  539.        
  540. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetResourceInformationW,
  541.        (LPNETRESOURCE lpNetResource,
  542.         LPVOID lpBuffer,
  543.         LPDWORD lpcbBuffer,
  544.         LPWSTR *lplpSystem ),
  545.        (lpNetResource, lpBuffer, lpcbBuffer, lplpSystem ));
  546. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetUseConnectionW,
  547.        (HWND hwndOwner,               
  548.         LPNETRESOURCE lpNetResource,  
  549.         LPCWSTR lpUserName,            
  550.         LPCWSTR lpPassword,            
  551.         DWORD dwFlags,                
  552.         LPWSTR lpAccessName,          
  553.         LPDWORD lpBufferSize,         
  554.         LPDWORD lpResult ),
  555.        (hwndOwner, lpNetResource, lpUserName, lpPassword,
  556.         dwFlags, lpAccessName, lpBufferSize, lpResult ));
  557. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetAddConnection3W,
  558.        (HWND hwndOwner,
  559.         LPNETRESOURCE lpNetResource,
  560.         LPCWSTR lpPassword,
  561.         LPCWSTR lpUserName,
  562.         DWORD dwFlags ),
  563.        (hwndOwner, lpNetResource, lpPassword, lpUserName, dwFlags ));
  564. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetResourceParentW,
  565.        (LPNETRESOURCE lpNetResource,
  566.         LPVOID lpBuffer,
  567.         LPDWORD lpBufferSize ),
  568.        (lpNetResource, lpBuffer, lpBufferSize ));
  569. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCancelConnection2W,
  570.        (LPCWSTR lpName,
  571.         DWORD dwFlags,
  572.         BOOL fForce ),
  573.        (lpName, dwFlags, fForce ));
  574. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetDisconnectDialog1W,
  575.        (LPDISCDLGSTRUCT lpDiscDlgStruct),
  576.        (lpDiscDlgStruct));
  577. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetConnectionDialog1W,
  578.        (LPCONNECTDLGSTRUCT lpConnectDlgStruct),
  579.        (lpConnectDlgStruct));
  580. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetLastErrorW,
  581.        (LPDWORD lpError,
  582.         LPWSTR lpErrorBuf,
  583.         DWORD nErrorBufSize,
  584.         LPWSTR lpNameBuf,
  585.         DWORD nNameBufSize ),
  586.        (lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize));
  587. DELAY_LOAD_WNET(g_hmodMPR, MPR, MultinetGetConnectionPerformanceW,
  588.         (LPNETRESOURCE lpNetResource,
  589.         LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct),
  590.         (lpNetResource, lpNetConnectInfoStruct));
  591. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetConnectionW,
  592.         (LPCWSTR lpLocalName,
  593.          LPWSTR lpRemoteName,
  594.          LPDWORD lpcbBuffer),
  595.         (lpLocalName, lpRemoteName, lpcbBuffer));
  596. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetConnection3W,
  597.         (LPCWSTR lpLocalName,
  598.         LPCWSTR lpProviderName,
  599.         DWORD dwInfoLevel,
  600.         LPVOID lpBuffer,
  601.         LPDWORD lpcbBuffer),
  602.         (lpLocalName, lpProviderName, dwInfoLevel, lpBuffer, lpcbBuffer));
  603. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetProviderTypeW,
  604.         (LPCWSTR lpProvider,
  605.         LPDWORD lpdwNetType),
  606.         (lpProvider, lpdwNetType));
  607. #else
  608. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetEnumResourceA,
  609.        (HANDLE  hEnum, LPDWORD lpcCount, LPVOID  lpBuffer, LPDWORD lpBufferSize),
  610.        (hEnum, lpcCount, lpBuffer, lpBufferSize));
  611. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetOpenEnumA,
  612.        (DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCEA lpNetResource, LPHANDLE lphEnum),
  613.        (dwScope, dwType, dwUsage, lpNetResource, lphEnum));
  614. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetFormatNetworkNameA,
  615.     (LPCSTR lpProvider, LPCSTR lpRemoteName, LPSTR lpFormattedName,
  616.      LPDWORD lpnLength, DWORD dwFlags, DWORD dwAveCharPerLine),
  617.     (lpProvider, lpRemoteName, lpFormattedName, lpnLength,  dwFlags, dwAveCharPerLine));
  618. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetRestoreConnectionA,
  619.        (HWND hwnd, LPCSTR psz),
  620.        (hwnd, psz));
  621. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCancelConnectionA,
  622.        (LPCTSTR lpName, BOOL fForce),
  623.        (lpName, fForce));
  624. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetProviderNameA,
  625.        (DWORD dwNetType,
  626.         LPSTR lpProvider,
  627.         LPDWORD lpBufferSize),
  628.        (dwNetType,lpProvider,lpBufferSize));
  629. DELAY_LOAD_WNET(g_hmodMPR, MPR, MultinetGetErrorTextA,
  630.        (LPSTR lpErrorTextBuf,
  631.         LPDWORD lpnErrorBufSize,
  632.         LPSTR lpProviderNameBuf,
  633.         LPDWORD lpnNameBufSize   ),
  634.        (lpErrorTextBuf, lpnErrorBufSize, lpProviderNameBuf, lpnNameBufSize ));
  635. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetLogonA,
  636.        (LPCSTR lpProvider,
  637.         HWND hwndOwner   ),
  638.        (lpProvider, hwndOwner ));
  639. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetUserA,
  640.        (LPCSTR lpName,
  641.         LPSTR lpUserName,
  642.         LPDWORD lpnLength),
  643.        (lpName,lpUserName,lpnLength));
  644. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetResourceInformationA,
  645.        (LPNETRESOURCE lpNetResource,
  646.         LPVOID lpBuffer,
  647.         LPDWORD lpcbBuffer,
  648.         LPSTR *lplpSystem ),
  649.        (lpNetResource, lpBuffer, lpcbBuffer, lplpSystem ));
  650. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetUseConnectionA,
  651.        (HWND hwndOwner,               
  652.         LPNETRESOURCE lpNetResource,  
  653.         LPCSTR lpUserName,            
  654.         LPCSTR lpPassword,            
  655.         DWORD dwFlags,                
  656.         LPSTR lpAccessName,          
  657.         LPDWORD lpBufferSize,         
  658.         LPDWORD lpResult ),
  659.        (hwndOwner, lpNetResource, lpUserName, lpPassword,
  660.         dwFlags, lpAccessName, lpBufferSize, lpResult ));
  661. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetAddConnection3A,
  662.        (HWND hwndOwner,
  663.         LPNETRESOURCE lpNetResource,
  664.         LPCSTR lpPassword,
  665.         LPCSTR lpUserName,
  666.         DWORD dwFlags ),
  667.        (hwndOwner, lpNetResource, lpPassword, lpUserName, dwFlags ));
  668. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetResourceParentA,
  669.        (LPNETRESOURCE lpNetResource,
  670.         LPVOID lpBuffer,
  671.         LPDWORD lpBufferSize ),
  672.        (lpNetResource, lpBuffer, lpBufferSize ));
  673. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCancelConnection2A,
  674.        (LPCSTR lpName,
  675.         DWORD dwFlags,
  676.         BOOL fForce ),
  677.        (lpName, dwFlags, fForce ));
  678. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetDisconnectDialog1A,
  679.        (LPDISCDLGSTRUCT lpDiscDlgStruct),
  680.        (lpDiscDlgStruct));
  681. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetConnectionDialog1A,
  682.        (LPCONNECTDLGSTRUCT lpConnectDlgStruct),
  683.        (lpConnectDlgStruct));
  684. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetLastErrorA,
  685.        (LPDWORD lpError,
  686.         LPSTR lpErrorBuf,
  687.         DWORD nErrorBufSize,
  688.         LPSTR lpNameBuf,
  689.         DWORD nNameBufSize ),
  690.        (lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize));
  691.        
  692. DELAY_LOAD_WNET(g_hmodMPR, MPR, MultinetGetConnectionPerformanceA,
  693.         (LPNETRESOURCE lpNetResource,
  694.         LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct),
  695.         (lpNetResource, lpNetConnectInfoStruct));
  696.         
  697. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetConnectionA,
  698.         (LPCSTR lpLocalName,
  699.          LPSTR lpRemoteName,
  700.          LPDWORD lpcbBuffer),
  701.         (lpLocalName, lpRemoteName, lpcbBuffer));
  702.         
  703. DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetConnection3A,
  704.         (LPCSTR lpLocalName,
  705.         LPCSTR lpProviderName,
  706.         DWORD dwInfoLevel,
  707.         LPVOID lpBuffer,
  708.         LPDWORD lpcbBuffer),
  709.         (lpLocalName, lpProviderName, dwInfoLevel, lpBuffer, lpcbBuffer));
  710. #endif
  711. // --------- NETAPI32.DLL ---------------
  712. HMODULE g_hmodNetAPI32 = NULL;
  713. DELAY_LOAD_ERR(g_hmodNetAPI32, NETAPI32, NET_API_STATUS, NetGetJoinInformation,
  714.                 (LPCWSTR lpServer, LPWSTR *lpNameBuffer, PNETSETUP_JOIN_STATUS BufferType),
  715.                 (lpServer, lpNameBuffer, BufferType),
  716.                 NERR_NetNotStarted);
  717. DELAY_LOAD_ERR(g_hmodNetAPI32, NETAPI32, NET_API_STATUS, NetApiBufferFree,
  718.                 (LPVOID Buffer), 
  719.                 (Buffer), 
  720.                 NERR_Success);
  721. DELAY_LOAD_ERR(g_hmodNetAPI32, NETAPI32, DWORD, DsGetDcName,
  722.                 (IN LPCTSTR ComputerName OPTIONAL,
  723.                 IN LPCTSTR DomainName OPTIONAL,
  724.                 IN GUID *DomainGuid OPTIONAL,
  725.                 IN LPCTSTR SiteName OPTIONAL,
  726.                 IN ULONG Flags,
  727.                 OUT PDOMAIN_CONTROLLER_INFO *DomainControllerInfo),
  728.                 (ComputerName, DomainName, DomainGuid, SiteName, Flags, DomainControllerInfo),
  729.                 ERROR_NO_SUCH_DOMAIN);
  730. // --------- NTDSAPI.DLL ---------------
  731. HMODULE g_hmodNTDSAPI = NULL;
  732. DELAY_LOAD_ERR(g_hmodNTDSAPI, NTDSAPI, DWORD, DsCrackNames, 
  733.                 (HANDLE          hDS,          
  734.                  DS_NAME_FLAGS   flags,        
  735.                  DS_NAME_FORMAT  formatOffered,
  736.                  DS_NAME_FORMAT  formatDesired,
  737.                  DWORD           cNames,       
  738.                  const LPCTSTR   *rpNames,     
  739.                  PDS_NAME_RESULT *ppResult),
  740.                 (hDS, flags, formatOffered, formatDesired, cNames, rpNames, ppResult),
  741.                  ERROR_INVALID_FUNCTION);   
  742. DELAY_LOAD_VOID(g_hmodNTDSAPI, NTDSAPI, DsFreeNameResult, (DS_NAME_RESULT *pResult), (pResult));   
  743. // --------- MLANG.DLL ---------------
  744. HMODULE g_hmodMLANG = NULL;
  745. DELAY_LOAD_HRESULT(g_hmodMLANG, MLANG, ConvertINetMultiByteToUnicode,
  746.             (LPDWORD lpdwMode, DWORD dwEncoding, LPCSTR lpSrcStr, LPINT lpnMultiCharCount, LPWSTR lpDstStr, LPINT lpnWideCharCount),
  747.             (lpdwMode, dwEncoding, lpSrcStr, lpnMultiCharCount, lpDstStr, lpnWideCharCount));
  748. DELAY_LOAD_HRESULT(g_hmodMLANG, MLANG, ConvertINetUnicodeToMultiByte,
  749.             (LPDWORD lpdwMode, DWORD dwEncoding, LPCWSTR lpSrcStr, LPINT lpnWideCharCount, LPSTR lpDstStr, LPINT lpnMultiCharCount),
  750.             (lpdwMode, dwEncoding, lpSrcStr, lpnWideCharCount, lpDstStr, lpnMultiCharCount));
  751. DELAY_LOAD_HRESULT(g_hmodMLANG, MLANG, LcidToRfc1766W,
  752.             (LCID Locale, LPWSTR pszRfc1766, int nChar),
  753.             (Locale, pszRfc1766, nChar));
  754. // --------- CDFVIEW.DLL ---------------
  755. HMODULE g_hmodCDFVIEW = NULL;
  756. DELAY_LOAD_HRESULT(g_hmodCDFVIEW, CDFVIEW, ParseDesktopComponent,
  757.            (HWND hwndOwner, LPWSTR wszURL, COMPONENT *pInfo),
  758.            (hwndOwner, wszURL, pInfo));
  759. // EXTERN_C STDAPI_(HRESULT) SubscribeToCDF(HWND hwndParent, LPCWSTR pwzUrl, DWORD dwCDFTypes);
  760. DELAY_LOAD_HRESULT(g_hmodCDFVIEW, CDFVIEW, SubscribeToCDF,
  761.            (HWND hwndParent, LPCWSTR pwzUrl, DWORD dwCDFTypes),
  762.            (hwndParent, pwzUrl, dwCDFTypes));
  763. // --------- USER32.DLL ----------------
  764. HINSTANCE g_hinstUSER32 = NULL;
  765. DELAY_LOAD_BOOL(g_hinstUSER32, USER32, AllowSetForegroundWindow,
  766.                (DWORD dwProcessId), (dwProcessId));
  767. // --------- USERENV.DLL ----------------
  768. HMODULE g_hmodUserEnv = NULL;
  769. DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, GetUserProfileDirectoryW,
  770.                 (HANDLE hToken, WCHAR *pszDir, DWORD *pdwSize),
  771.                 (hToken, pszDir, pdwSize));
  772. DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, GetAllUsersProfileDirectoryW,
  773.                 (WCHAR *pszDir, DWORD *pdwSize),
  774.                 (pszDir, pdwSize));
  775. #undef GetDefaultUserProfileDirectoryW
  776. DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, GetDefaultUserProfileDirectoryW,
  777.                 (WCHAR *pszDir, DWORD *pdwSize),
  778.                 (pszDir, pdwSize));
  779. #undef ExpandEnvironmentStringsForUserW
  780. DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, ExpandEnvironmentStringsForUserW,
  781.                 (HANDLE hToken, LPCWSTR lpSrc, LPWSTR lpDest, DWORD dwSize),
  782.                 (hToken, lpSrc, lpDest, dwSize));
  783. DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, CreateEnvironmentBlock,
  784.                 (LPVOID *lpEnvironment, HANDLE hToken, BOOL bInherit),
  785.                 (lpEnvironment, hToken, bInherit));
  786.  DELAY_LOAD_BOOL(g_hmodUserEnv, USERENV, DestroyEnvironmentBlock,
  787.                 (LPVOID lpEnvironment),
  788.                 (lpEnvironment));
  789.                 
  790. // --------- CSCDLL.DLL ----------------
  791. HMODULE g_hmodCSCDLL = NULL;
  792. DELAY_LOAD_BOOL(g_hmodCSCDLL, CSCDLL, CSCIsCSCEnabled, (void), ());
  793. DELAY_LOAD_BOOL(g_hmodCSCDLL, CSCDLL, CSCQueryFileStatusW,
  794.                 (LPCWSTR lpszFileName, LPDWORD lpdwStatus, LPDWORD lpdwPinCount, LPDWORD lpdwHintFlags),
  795.                 (lpszFileName, lpdwStatus, lpdwPinCount, lpdwHintFlags));
  796. DELAY_LOAD_BOOL(g_hmodCSCDLL, CSCDLL, CSCQueryFileStatusA,
  797.                 (LPCSTR lpszFileName, LPDWORD lpdwStatus, LPDWORD lpdwPinCount, LPDWORD lpdwHintFlags),
  798.                 (lpszFileName, lpdwStatus, lpdwPinCount, lpdwHintFlags));
  799. // --------- WINSPOOL.DRV ----------------
  800. HINSTANCE g_hinstWINSPOOL_DRV = NULL;
  801. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, AddPort,
  802.                 (LPTSTR pName, HWND hwnd, LPTSTR pMonitorName), 
  803.                 (pName, hwnd, pMonitorName));
  804. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, ClosePrinter,
  805.                 (HANDLE h), 
  806.                 (h));
  807. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, ConfigurePort,
  808.                 (LPTSTR pName, HWND hwnd, LPTSTR pPortName), 
  809.                 (pName, hwnd, pPortName));
  810. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, DeletePort,
  811.                 (LPTSTR pName, HWND hwnd, LPTSTR psz2), 
  812.                 (pName, hwnd, psz2));
  813. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, DeletePrinter,
  814.                 (HANDLE hPrinter), 
  815.                 (hPrinter));
  816. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, DeletePrinterDriver,
  817.                 (LPTSTR pName, LPTSTR pEnvironment, LPTSTR pDriverName), 
  818.                 (pName, pEnvironment, pDriverName));
  819. DELAY_LOAD_EXT_WRAP(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, int, _DeviceCapabilities, DeviceCapabilities,
  820.                 (LPCTSTR psz1, LPCTSTR psz2, WORD w, LPTSTR psz3, CONST DEVMODE * pDevMode), 
  821.                 (psz1, psz2, w, psz3, pDevMode));             
  822. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumJobs,
  823.                 (HANDLE h, DWORD dw1, DWORD dw2, DWORD dw3, LPBYTE pb, DWORD dw4, LPDWORD pdw1, LPDWORD pdw2), 
  824.                 (h, dw1, dw2, dw3, pb, dw4, pdw1, pdw2));
  825. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumMonitors,
  826.                 (LPTSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1, LPDWORD pdw2), 
  827.                 (psz1, dw1, pb1, dw2, pdw1, pdw2));
  828. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPorts,
  829.                 (LPTSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1, LPDWORD pdw2), 
  830.                 (psz1, dw1, pb1, dw2, pdw1, pdw2));
  831. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrintProcessorDatatypes,
  832.                 (LPTSTR psz1, LPTSTR psz2, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1, LPDWORD pdw2), 
  833.                 (psz1, psz2, dw1, pb1, dw2, pdw1, pdw2));
  834. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrintProcessors,
  835.                 (LPTSTR psz1, LPTSTR psz2, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1, LPDWORD pdw2), 
  836.                 (psz1, psz2, dw1, pb1, dw2, pdw1, pdw2));
  837. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrinterDrivers,
  838.                 (LPTSTR pName, LPTSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned), 
  839.                 (pName, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded, pcReturned));
  840. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrinters,
  841.                 (DWORD dwFlags, LPTSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw2, LPDWORD pdw3),
  842.                 (dwFlags, psz1, dw1, pb1, dw2, pdw2, pdw3));
  843. DELAY_LOAD_EXT_ORD(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrinterPropertySheets, ENUMPRINTERPROPERTYSHEETS_ORD,
  844.                 (HANDLE h1, HWND hwnd, LPFNADDPROPSHEETPAGE pfn, LPARAM lParam), 
  845.                 (h1, hwnd, pfn, lParam));
  846. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, GetPrinter,
  847.                 (HANDLE h1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1), 
  848.                 (h1, dw1, pb1, dw2, pdw1));
  849. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, GetPrinterDriver,
  850.                 (HANDLE h1, LPTSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw1), 
  851.                 (h1, psz1, dw1, pb1, dw2, pdw1));
  852. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, OpenPrinter,
  853.                 (LPTSTR psz1, LPHANDLE ph1, LPPRINTER_DEFAULTS pDefault), 
  854.                 (psz1, ph1, pDefault));
  855. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, PrinterProperties,
  856.                 (HWND hwnd, HANDLE h1), 
  857.                 (hwnd, h1));
  858. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, SetJob,
  859.                 (HANDLE h1, DWORD dw1, DWORD dw2, LPBYTE pb1, DWORD dw3), 
  860.                 (h1, dw1, dw2, pb1, dw3));
  861. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, SetPrinter,
  862.                 (HANDLE h1, DWORD dw1, LPBYTE pb1, DWORD dw2), 
  863.                 (h1, dw1, pb1, dw2));
  864. DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, DWORD, GetPrinterData,
  865.                 (HANDLE h1, LPTSTR psz1, LPDWORD pdw1, LPBYTE pb1, DWORD dw1, LPDWORD pdw2), 
  866.                 (h1, psz1, pdw1, pb1, dw1, pdw2));
  867.                 
  868. // --------- PRINTUI.DLL ----------------
  869. HINSTANCE g_hinstPRINTUI = NULL;
  870. #ifdef WINNT // PRINTQ
  871. DELAY_LOAD_VOID(g_hinstPRINTUI, PRINTUI, vQueueCreate,
  872.     (HWND hwnd1, LPCTSTR psz1, INT n, LPARAM lParam),
  873.     (hwnd1, psz1, n, lParam));
  874. DELAY_LOAD_VOID(g_hinstPRINTUI, PRINTUI, vPrinterPropPages,
  875.     (HWND hwnd1, LPCTSTR psz1, INT n, LPARAM lParam),
  876.     (hwnd1, psz1, n, lParam));
  877. DELAY_LOAD_VOID(g_hinstPRINTUI, PRINTUI, vServerPropPages,
  878.     (HWND hwnd1, LPCTSTR psz1, INT n, LPARAM lParam),
  879.     (hwnd1, psz1, n, lParam));
  880. DELAY_LOAD(g_hinstPRINTUI, PRINTUI, BOOL, bPrinterSetup,
  881.     (HWND hwnd1, UINT ui1, UINT ui2, LPTSTR psz1, PUINT pui, LPCTSTR psz2),
  882.     (hwnd1, ui1, ui2, psz1, pui, psz2));
  883. DELAY_LOAD_VOID(g_hinstPRINTUI, PRINTUI, vDocumentDefaults,
  884.     (HWND hwnd1, LPCTSTR psz1, INT n, LPARAM lParam),
  885.     (hwnd1, psz1, n, lParam));
  886. #ifdef PRN_FOLDERDATA
  887. DELAY_LOAD_HRESULT(g_hinstPRINTUI, PRINTUI, RegisterPrintNotify,
  888.     (LPCTSTR psz1, IFolderNotify * pfn, LPHANDLE pHandle),
  889.     (psz1, pfn, pHandle));
  890. DELAY_LOAD_HRESULT(g_hinstPRINTUI, PRINTUI, UnregisterPrintNotify,
  891.     (LPCTSTR psz1, IFolderNotify * pfn, LPHANDLE pHandle),
  892.     (psz1, pfn, pHandle));
  893. DELAY_LOAD(g_hinstPRINTUI, PRINTUI, HANDLE, hFolderRegister,
  894.     (LPCTSTR psz1, LPCITEMIDLIST pidl),
  895.     (psz1, pidl));
  896. DELAY_LOAD_VOID(g_hinstPRINTUI, PRINTUI, vFolderUnregister,
  897.     (HANDLE h),
  898.     (h));
  899. DELAY_LOAD(g_hinstPRINTUI, PRINTUI, BOOL, bFolderEnumPrinters,
  900.     (HANDLE h, PFOLDER_PRINTER_DATA pFolderPrinterData, DWORD dw1, PDWORD pwd1, PDWORD pwd2),
  901.     (h, pFolderPrinterData, dw1, pwd1, pwd2));
  902. DELAY_LOAD(g_hinstPRINTUI, PRINTUI, BOOL, bFolderRefresh,
  903.     (HANDLE h, PBOOL pb),
  904.     (h, pb));
  905. DELAY_LOAD(g_hinstPRINTUI, PRINTUI, BOOL, bFolderGetPrinter,
  906.     (HANDLE h, LPCTSTR psz1, PFOLDER_PRINTER_DATA pFolderPrinterData, DWORD dw1, PDWORD pdw2),
  907.     (h, psz1, pFolderPrinterData, dw1, pdw2));
  908. #endif // PRN_FOLDERDATA
  909. #endif // PRINTQ
  910. // --------- DEVMGR.DLL ----------------
  911. HINSTANCE g_hinstDEVMGR = NULL;
  912. DELAY_LOAD(g_hinstDEVMGR, DEVMGR, HWND, DeviceCreateHardwarePageEx,
  913.     (HWND hwndParent, const GUID *pguid, int iNumClass, DWORD dwViewMode),
  914.     (hwndParent, pguid, iNumClass,  dwViewMode));
  915. // --------- INETCFG.DLL ----------------
  916. HMODULE g_hmodINETCFG = NULL;
  917. DELAY_LOAD_DWORD(g_hmodINETCFG, INETCFG, IsSmartStart,
  918.            (void),
  919.            ());
  920. // --------- COMCTL32.DLL ----------------
  921. //
  922. //  Wha?  Delay-load comctl32?  Yup, because some setup apps
  923. //  include comctl32.dll in their temporary setup directory,
  924. //  so we end up loading that comctl32 instead of the system
  925. //  comctl32, and ImageList_SetFlags is an API that didn't exist
  926. //  in old versions of Comctl32, so shell32 would fail to load,
  927. //  and the setup app would barf.  Fortunately, setup apps don't
  928. //  use shell32 for much beyond CShellLink and SHChangeNotify,
  929. //  so the mixup of a new shell32 and a downlevel comctl32 won't
  930. //  screw them too badly.
  931. //
  932. HINSTANCE g_hinstCOMCTL32 = NULL;
  933. #undef ImageList_SetFlags
  934. DELAY_LOAD_NAME_BOOL(g_hinstCOMCTL32, COMCTL32,
  935.                      _ImageList_SetFlags, ImageList_SetFlags,
  936.                      (HIMAGELIST himl, UINT flags),
  937.                      (himl, flags));
  938. #undef ImageList_GetFlags
  939. DELAY_LOAD_NAME_UINT(g_hinstCOMCTL32, COMCTL32,
  940.                      _ImageList_GetFlags, ImageList_GetFlags,
  941.                      (HIMAGELIST himl),
  942.                      (himl));
  943. // --------- MSI.DLL ----------------
  944. HMODULE g_hmodMSI = NULL;
  945. DELAY_LOAD_UINT(g_hmodMSI, MSI, MsiDecomposeDescriptorW,
  946.                 (LPCWSTR szDescriptor,
  947.              LPWSTR     szProductCode,
  948.              LPWSTR     szFeatureId,
  949.              LPWSTR     szComponentCode,
  950.              DWORD*     pcchArgsOffset),
  951.                  (szDescriptor,
  952.                   szProductCode,
  953.                   szFeatureId,
  954.                   szComponentCode,
  955.                   pcchArgsOffset));
  956. DELAY_LOAD_UINT(g_hmodMSI, MSI, MsiDecomposeDescriptorA,
  957.                 (LPCSTR szDescriptor,
  958.              LPSTR     szProductCode,
  959.              LPSTR     szFeatureId,
  960.              LPSTR     szComponentCode,
  961.              DWORD*     pcchArgsOffset),
  962.                  (szDescriptor,
  963.                   szProductCode,
  964.                   szFeatureId,
  965.                   szComponentCode,
  966.                   pcchArgsOffset));