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

Windows Kernel

Development Platform:

Visual C++

  1. //
  2. // Debug dump functions for common ADTs
  3. //
  4. // This file should be #included by your DLL.  It is not part of
  5. // stocklib.lib because it requires linking to certain guid libs,
  6. // and DLLs like COMCTL32 do not do this.  (Therefore, COMCTL32
  7. // doesn't #include this file, but still links to stocklib.)
  8. //
  9. //
  10. #include <intshcut.h>       // For error values
  11. #include <sherror.h>
  12. #ifdef DEBUG
  13. /*
  14.  * macro for simplifying result to string translation, assumes result string
  15.  * pointer pcsz
  16.  */
  17. #define STRING_CASE(val)               case val: pcsz = TEXT(#val); break
  18. //
  19. //  Debug value-to-string mapping functions
  20. //
  21. /*----------------------------------------------------------
  22. Purpose: Return the string form of the clipboard format.
  23. Returns: pointer to a static string
  24. Cond:    --
  25. */
  26. LPCTSTR 
  27. Dbg_GetCFName(
  28.     UINT ucf)
  29. {
  30.     LPCTSTR pcsz;
  31.     static TCHAR s_szCFName[MAX_PATH];
  32.     switch (ucf)
  33.     {
  34.         STRING_CASE(CF_TEXT);
  35.         STRING_CASE(CF_BITMAP);
  36.         STRING_CASE(CF_METAFILEPICT);
  37.         STRING_CASE(CF_SYLK);
  38.         STRING_CASE(CF_DIF);
  39.         STRING_CASE(CF_TIFF);
  40.         STRING_CASE(CF_OEMTEXT);
  41.         STRING_CASE(CF_DIB);
  42.         STRING_CASE(CF_PALETTE);
  43.         STRING_CASE(CF_PENDATA);
  44.         STRING_CASE(CF_RIFF);
  45.         STRING_CASE(CF_WAVE);
  46.         STRING_CASE(CF_UNICODETEXT);
  47.         STRING_CASE(CF_ENHMETAFILE);
  48.         STRING_CASE(CF_HDROP);
  49.         STRING_CASE(CF_LOCALE);
  50.         STRING_CASE(CF_MAX);
  51.         STRING_CASE(CF_OWNERDISPLAY);
  52.         STRING_CASE(CF_DSPTEXT);
  53.         STRING_CASE(CF_DSPBITMAP);
  54.         STRING_CASE(CF_DSPMETAFILEPICT);
  55.         STRING_CASE(CF_DSPENHMETAFILE);
  56.     default:
  57.         if (! GetClipboardFormatName(ucf, s_szCFName, SIZECHARS(s_szCFName)))
  58.             lstrcpy(s_szCFName, TEXT("UNKNOWN CLIPBOARD FORMAT"));
  59.         pcsz = s_szCFName;
  60.         break;
  61.     }
  62.     ASSERT(pcsz);
  63.     return(pcsz);
  64. }
  65. LPCTSTR 
  66. Dbg_GetHRESULTName(
  67.     HRESULT hr)
  68. {
  69.     LPCTSTR pcsz;
  70.     static TCHAR s_rgchHRESULT[] = TEXT("0x12345678");
  71.     switch (hr)
  72.         {
  73.         STRING_CASE(S_OK);
  74.         STRING_CASE(S_FALSE);
  75.         STRING_CASE(DRAGDROP_S_CANCEL);
  76.         STRING_CASE(DRAGDROP_S_DROP);
  77.         STRING_CASE(DRAGDROP_S_USEDEFAULTCURSORS);
  78.         STRING_CASE(E_UNEXPECTED);
  79.         STRING_CASE(E_NOTIMPL);
  80.         STRING_CASE(E_OUTOFMEMORY);
  81.         STRING_CASE(E_INVALIDARG);
  82.         STRING_CASE(E_NOINTERFACE);
  83.         STRING_CASE(E_POINTER);
  84.         STRING_CASE(E_HANDLE);
  85.         STRING_CASE(E_ABORT);
  86.         STRING_CASE(E_FAIL);
  87.         STRING_CASE(E_ACCESSDENIED);
  88.         STRING_CASE(CLASS_E_NOAGGREGATION);
  89.         STRING_CASE(CO_E_NOTINITIALIZED);
  90.         STRING_CASE(CO_E_ALREADYINITIALIZED);
  91.         STRING_CASE(CO_E_INIT_ONLY_SINGLE_THREADED);
  92.         STRING_CASE(DV_E_DVASPECT);
  93.         STRING_CASE(DV_E_LINDEX);
  94.         STRING_CASE(DV_E_TYMED);
  95.         STRING_CASE(DV_E_FORMATETC);
  96.         STRING_CASE(E_FLAGS);
  97.         STRING_CASE(URL_E_INVALID_SYNTAX);
  98.         STRING_CASE(URL_E_UNREGISTERED_PROTOCOL);
  99.         STRING_CASE(IS_E_EXEC_FAILED);
  100.         STRING_CASE(E_FILE_NOT_FOUND);
  101.         STRING_CASE(E_PATH_NOT_FOUND);
  102.     default:
  103.         wsprintf(s_rgchHRESULT, TEXT("%#lx"), hr);
  104.         pcsz = s_rgchHRESULT;
  105.         break;
  106.         }
  107.     ASSERT(IS_VALID_STRING_PTR(pcsz, -1));
  108.     return(pcsz);
  109. }
  110. /*----------------------------------------------------------
  111. Purpose: Dump propvariant types
  112. Returns: 
  113. Cond:    --
  114. */
  115. LPCTSTR 
  116. Dbg_GetVTName(
  117.     VARTYPE vt)
  118. {
  119.     LPCTSTR pcsz;
  120.     static TCHAR s_szT[] = TEXT("0x12345678");
  121.     switch (vt)
  122.         {
  123.         STRING_CASE(VT_EMPTY);
  124.         STRING_CASE(VT_NULL);
  125.         STRING_CASE(VT_I2);
  126.         STRING_CASE(VT_I4);
  127.         STRING_CASE(VT_R4);
  128.         STRING_CASE(VT_R8);
  129.         STRING_CASE(VT_CY);
  130.         STRING_CASE(VT_DATE);
  131.         STRING_CASE(VT_BSTR);
  132.         STRING_CASE(VT_ERROR);
  133.         STRING_CASE(VT_BOOL);
  134.         STRING_CASE(VT_VARIANT);
  135.         STRING_CASE(VT_UI1);
  136.         STRING_CASE(VT_UI2);
  137.         STRING_CASE(VT_UI4);
  138.         STRING_CASE(VT_I8);
  139.         STRING_CASE(VT_UI8);
  140.         STRING_CASE(VT_LPSTR);
  141.         STRING_CASE(VT_LPWSTR);
  142.         STRING_CASE(VT_FILETIME);
  143.         STRING_CASE(VT_BLOB);
  144.         STRING_CASE(VT_STREAM);
  145.         STRING_CASE(VT_STORAGE);
  146.         STRING_CASE(VT_STREAMED_OBJECT);
  147.         STRING_CASE(VT_STORED_OBJECT);
  148.         STRING_CASE(VT_BLOB_OBJECT);
  149.         STRING_CASE(VT_CLSID);
  150.         STRING_CASE(VT_ILLEGAL);
  151.         STRING_CASE(VT_CF);
  152.     default:
  153.         wsprintf(s_szT, TEXT("%#lx"), vt);
  154.         pcsz = s_szT;
  155.         break;
  156.         }
  157.     ASSERT(IS_VALID_STRING_PTR(pcsz, -1));
  158.     return(pcsz);
  159. }
  160. #define STRING_RIID(val)               { &val, TEXT(#val) }
  161. //
  162. //  Alphabetical order, please.
  163. //
  164. struct 
  165.     {
  166.     REFIID riid;
  167.     LPCTSTR psz;
  168.     } const c_mpriid[] = 
  169. {
  170.         STRING_RIID(IID_IAddressList),
  171.         STRING_RIID(IID_IAdviseSink),
  172. #ifdef __IAddressList_INTERFACE_DEFINED__
  173.         STRING_RIID(IID_IAddressList),
  174. #endif
  175.         STRING_RIID(IID_IAugmentedShellFolder),
  176.         STRING_RIID(IID_IAugmentedShellFolder2),
  177. #ifdef __IAuthenticate_INTERFACE_DEFINED__
  178.         STRING_RIID(IID_IAuthenticate),
  179. #endif
  180. #ifdef __IBandSiteHelper_INTERFACE_DEFINED__
  181.         STRING_RIID(IID_IBandSiteHelper),
  182. #endif
  183. #ifdef __IBandProxy_INTERFACE_DEFINED__
  184.         STRING_RIID(IID_IBandProxy),
  185. #endif
  186. #ifdef __IBindStatusCallback_INTERFACE_DEFINED__
  187.         STRING_RIID(IID_IBindStatusCallback),
  188. #endif
  189.         STRING_RIID(IID_IBrowserBand),
  190. #ifdef __IBrowserService_INTERFACE_DEFINED__
  191.         STRING_RIID(IID_IBrowserService),
  192. #endif
  193.         STRING_RIID(IID_IBrowserService2),
  194.         STRING_RIID(IID_IConnectionPoint),
  195. #ifdef __IConnectionPointCB_INTERFACE_DEFINED__
  196.         STRING_RIID(IID_IConnectionPointCB),
  197. #endif
  198.         STRING_RIID(IID_IConnectionPointContainer),
  199.         STRING_RIID(IID_IContextMenu),
  200.         STRING_RIID(IID_IContextMenu2),
  201.         STRING_RIID(IID_IContextMenuCB),
  202.         STRING_RIID(IID_IContextMenuSite),
  203.         STRING_RIID(IID_IDataObject),
  204.         STRING_RIID(IID_IDeskBand),
  205.         STRING_RIID(IID_IDispatch),
  206.         STRING_RIID(IID_IDocFindBrowser),
  207.         STRING_RIID(IID_IDocFindFileFilter),
  208. #ifdef __IDocHostUIHandler_INTERFACE_DEFINED__
  209.         STRING_RIID(IID_IDocHostUIHandler),
  210. #endif
  211.         STRING_RIID(IID_IDockingWindowFrame),
  212.         STRING_RIID(IID_IDockingWindow),
  213.         STRING_RIID(IID_IDockingWindowSite),
  214. #ifdef __IDocNavigate_INTERFACE_DEFINED__
  215.         STRING_RIID(IID_IDocNavigate),
  216. #endif
  217.         STRING_RIID(IID_IDocViewSite),
  218.         STRING_RIID(IID_IDropTarget),
  219.         STRING_RIID(IID_IDropTargetBackground),
  220. #ifdef __IEFrameAuto_INTERFACE_DEFINED__
  221.         STRING_RIID(IID_IEFrameAuto),
  222. #endif        
  223.         STRING_RIID(IID_IEnumUnknown),
  224.         STRING_RIID(IID_IErrorInfo),
  225. #ifdef __IExpDispSupport_INTERFACE_DEFINED__
  226.         STRING_RIID(IID_IExpDispSupport),
  227. #endif
  228. #ifdef __IExpDispSupportOC_INTERFACE_DEFINED__
  229.         STRING_RIID(IID_IExpDispSupportOC),
  230. #endif
  231.         STRING_RIID(IID_IExplorerToolbar),
  232.         STRING_RIID(IID_IExtractIcon),
  233.         STRING_RIID(IID_IExternalConnection),
  234.         STRING_RIID(IID_FavoriteMenu),
  235. #ifdef __IHistSFPrivate_INTERFACE_DEFINED__
  236.         STRING_RIID(IID_IHistSFPrivate),
  237. #endif
  238. #ifdef __IHlink_INTERFACE_DEFINED__
  239.         STRING_RIID(IID_IHlink),
  240. #endif
  241. #ifdef __IHlinkFrame_INTERFACE_DEFINED__
  242.         STRING_RIID(IID_IHlinkFrame),
  243. #endif
  244. #ifdef __IHlinkSite_INTERFACE_DEFINED__
  245.         STRING_RIID(IID_IHlinkSite),
  246. #endif
  247. #ifdef __IHlinkTarget_INTERFACE_DEFINED__
  248.         STRING_RIID(IID_IHlinkTarget),
  249. #endif
  250. #ifdef __IHttpNegotiate_INTERFACE_DEFINED__
  251.         STRING_RIID(IID_IHttpNegotiate),
  252. #endif
  253. #ifdef __IHttpSecurity_INTERFACE_DEFINED__
  254.         STRING_RIID(IID_IHttpSecurity),
  255. #endif
  256.         STRING_RIID(IID_IInputObject),
  257.         STRING_RIID(IID_IInputObjectSite),
  258.         STRING_RIID(IID_IIsWebBrowserSB),
  259.         STRING_RIID(IID_IMenuBand),
  260. #ifdef __IMRU_INTERFACE_DEFINED__
  261.         STRING_RIID(IID_IMRU),
  262. #endif
  263. #ifdef __INavigationStack_INTERFACE_DEFINED__
  264.         STRING_RIID(IID_INavigationStack),
  265. #endif
  266. #ifdef __INavigationStackItem_INTERFACE_DEFINED__
  267.         STRING_RIID(IID_INavigationStackItem),
  268. #endif
  269.         STRING_RIID(IID_INewShortcutHook),
  270. #ifdef __IObjectCache_INTERFACE_DEFINED__
  271.         STRING_RIID(IID_IObjectCache),
  272. #endif
  273. #ifdef __IObjectSafety_INTERFACE_DEFINED__
  274.         STRING_RIID(IID_IObjectSafety),
  275. #endif
  276.         STRING_RIID(IID_IOleClientSite),
  277.         STRING_RIID(IID_IOleCommandTarget),
  278.         STRING_RIID(IID_IOleContainer),
  279.         STRING_RIID(IID_IOleControl),
  280.         STRING_RIID(IID_IOleControlSite),
  281.         STRING_RIID(IID_IOleDocument),
  282.         STRING_RIID(IID_IOleDocumentSite),
  283.         STRING_RIID(IID_IOleDocumentView),
  284.         STRING_RIID(IID_IOleInPlaceActiveObject),
  285.         STRING_RIID(IID_IOleInPlaceFrame),
  286.         STRING_RIID(IID_IOleInPlaceSite),
  287.         STRING_RIID(IID_IOleInPlaceObject),
  288.         STRING_RIID(IID_IOleInPlaceUIWindow),
  289.         STRING_RIID(IID_IOleObject),
  290.         STRING_RIID(IID_IOleWindow),
  291.         STRING_RIID(IID_IPersist),
  292.         STRING_RIID(IID_IPersistFolder),
  293. #ifdef __IPersistMoniker_INTERFACE_DEFINED__
  294.         STRING_RIID(IID_IPersistMoniker),
  295. #endif
  296.         STRING_RIID(IID_IPersistPropertyBag),
  297.         STRING_RIID(IID_IPersistStorage),
  298.         STRING_RIID(IID_IPersistStream),
  299.         STRING_RIID(IID_IPersistStreamInit),
  300.         STRING_RIID(IID_IPersistString),
  301.         STRING_RIID(IID_IProvideClassInfo),
  302.         STRING_RIID(IID_IPropertyNotifySink),
  303.         STRING_RIID(IID_IPropertySetStorage),
  304.         STRING_RIID(IID_IPropertyStorage),
  305.         STRING_RIID(IID_IProxyShellFolder),
  306.         STRING_RIID(IID_IServiceProvider),
  307.         STRING_RIID(IID_ISetWinHandler),
  308.         STRING_RIID(IID_IShellBrowser),
  309.         STRING_RIID(IID_IShellChangeNotify),
  310.         STRING_RIID(IID_IShellDetails),
  311.         STRING_RIID(IID_IShellDetails2),
  312.         STRING_RIID(IID_IShellExtInit),
  313.         STRING_RIID(IID_IShellFolder),
  314.         STRING_RIID(IID_IShellIcon),
  315.         STRING_RIID(IID_IShellLink),
  316.         STRING_RIID(IID_IShellLinkDataList),
  317.         STRING_RIID(IID_IShellMenu),
  318.         STRING_RIID(IID_IShellMenuCallback),
  319.         STRING_RIID(IID_IShellPropSheetExt),
  320. #ifdef __IShellService_INTERFACE_DEFINED__
  321.         STRING_RIID(IID_IShellService),
  322. #endif
  323.         STRING_RIID(IID_IShellView),
  324.         STRING_RIID(IID_IShellView2),
  325. #ifdef __ITargetEmbedding_INTERFACE_DEFINED__
  326.         STRING_RIID(IID_ITargetEmbedding),
  327. #endif
  328. #ifdef __ITargetFrame2_INTERFACE_DEFINED__
  329.         STRING_RIID(IID_ITargetFrame2),
  330. #endif
  331. #ifdef __ITargetFramePriv_INTERFACE_DEFINED__
  332.         STRING_RIID(IID_ITargetFramePriv),
  333. #endif
  334.         STRING_RIID(IID_ITravelEntry),
  335.         STRING_RIID(IID_ITravelLog),
  336.         STRING_RIID(IID_IUniformResourceLocator),
  337.         STRING_RIID(IID_IUnknown),
  338.         STRING_RIID(IID_IViewObject),
  339.         STRING_RIID(IID_IViewObject2),
  340.         STRING_RIID(IID_IWebBrowser),
  341.         STRING_RIID(IID_IWebBrowser2),
  342.         STRING_RIID(IID_IWebBrowserApp),
  343.         STRING_RIID(IID_IWinEventHandler),
  344. };
  345. struct 
  346. {
  347.     IID iid;
  348.     TCHAR szGuid[GUIDSTR_MAX];
  349. } s_guid[50] = {0};
  350. LPCTSTR
  351. Dbg_GetREFIIDName(
  352.     REFIID riid)
  353. {
  354.     int i;
  355.     // search the known list
  356.     for (i = 0; i < ARRAYSIZE(c_mpriid); i++)
  357.         {
  358.         if (IsEqualIID(riid, c_mpriid[i].riid))
  359.             return c_mpriid[i].psz;
  360.         }
  361.     // get a display name for the the first few unknown requests
  362.     for (i = 0; i < ARRAYSIZE(s_guid); i++)
  363.         {
  364.         if (TEXT('{') /*}*/ == s_guid[i].szGuid[0])
  365.             {
  366.             if (IsEqualIID(riid, &s_guid[i].iid))
  367.                 return s_guid[i].szGuid;
  368.             }
  369.         else
  370.             {
  371.             s_guid[i].iid = *riid;
  372.             SHStringFromGUID(riid, s_guid[i].szGuid, ARRAYSIZE(s_guid[0].szGuid));
  373.             return s_guid[i].szGuid;
  374.             }
  375.         }
  376.     return TEXT("Unknown REFIID");
  377. }
  378. //***
  379. // NOTE
  380. //  must be called *after* Dbg_GetREFIIDName (since that is what creates entry)
  381. void *
  382. Dbg_GetREFIIDAtom(
  383.     REFIID riid)
  384. {
  385.     int i;
  386.     for (i = 0; i < ARRAYSIZE(c_mpriid); i++)
  387.         {
  388.         if (IsEqualIID(riid, c_mpriid[i].riid))
  389.             return (void *) c_mpriid[i].riid;
  390.         }
  391.     // get a display name for the the first few unknown requests
  392.     for (i = 0; i < ARRAYSIZE(s_guid); i++)
  393.         {
  394.         if (TEXT('{') /*}*/ == s_guid[i].szGuid[0])
  395.             {
  396.             if (IsEqualIID(riid, &s_guid[i].iid))
  397.                 return (void *) &s_guid[i].iid;
  398.             }
  399.         else
  400.             {
  401.             return NULL;
  402.             }
  403.         }
  404.     return NULL;
  405. }
  406. #endif  // DEBUG