Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
9.6 KiB

  1. /*************************************************************************
  2. **
  3. ** OLE 2.0 Common Utilities
  4. **
  5. ** dbgutil.h
  6. **
  7. ** This file contains file contains functions to support debug output.
  8. **
  9. ** (c) Copyright Microsoft Corp. 1990 - 1992 All Rights Reserved
  10. **
  11. *************************************************************************/
  12. #include "precomp.h"
  13. #ifdef _DEBUG
  14. static int s_nDbgIndent = 0; // indent level for debug message
  15. static int s_nDbgLevel = 0; // default dbg level printed
  16. STDAPI_(void) OleDbgPrint(
  17. int nDbgLvl,
  18. LPTSTR lpszPrefix,
  19. LPTSTR lpszMsg,
  20. int nIndent)
  21. {
  22. if (nDbgLvl <= s_nDbgLevel)
  23. OleDbgPrintAlways(lpszPrefix, lpszMsg, nIndent);
  24. }
  25. STDAPI_(void) OleDbgPrintAlways(LPTSTR lpszPrefix, LPTSTR lpszMsg, int nIndent)
  26. {
  27. if (nIndent < 0)
  28. OleDbgIndent(nIndent);
  29. if (lpszPrefix && *lpszPrefix != '\0')
  30. {
  31. OutputDebugString(TEXT("| "));
  32. for (int i = 0; i < s_nDbgIndent; i++)
  33. OutputDebugString(TEXT("----"));
  34. OutputDebugString(lpszPrefix);
  35. OutputDebugString(TEXT(": "));
  36. }
  37. OutputDebugString(lpszMsg);
  38. if (nIndent > 0)
  39. OleDbgIndent(nIndent);
  40. }
  41. STDAPI_(void) OleDbgSetDbgLevel(int nDbgLvl)
  42. {
  43. s_nDbgLevel = nDbgLvl;
  44. }
  45. STDAPI_(int) OleDbgGetDbgLevel( void )
  46. {
  47. return s_nDbgLevel;
  48. }
  49. STDAPI_(void) OleDbgIndent(int n)
  50. {
  51. switch (n)
  52. {
  53. case -1:
  54. s_nDbgIndent--;
  55. break;
  56. case 1:
  57. s_nDbgIndent++;
  58. break;
  59. case -2:
  60. s_nDbgIndent = 0;
  61. break;
  62. }
  63. }
  64. STDAPI_(void) OleDbgPrintRefCnt(
  65. int nDbgLvl,
  66. LPTSTR lpszPrefix,
  67. LPTSTR lpszMsg,
  68. LPVOID lpObj,
  69. ULONG refcnt)
  70. {
  71. if (nDbgLvl <= s_nDbgLevel)
  72. OleDbgPrintRefCntAlways(lpszPrefix, lpszMsg, lpObj, refcnt);
  73. }
  74. STDAPI_(void) OleDbgPrintRefCntAlways(
  75. LPTSTR lpszPrefix,
  76. LPTSTR lpszMsg,
  77. LPVOID lpObj,
  78. ULONG refcnt)
  79. {
  80. TCHAR szBuf[256];
  81. StringCchPrintf(szBuf, sizeof(szBuf)/sizeof(szBuf[0]), TEXT("[obj=(0x%lx) cnt=%ld] %s"), lpObj, refcnt, lpszMsg);
  82. OleDbgPrintAlways(lpszPrefix, szBuf, 0);
  83. }
  84. STDAPI_(void) OleDbgPrintRect(
  85. int nDbgLvl,
  86. LPTSTR lpszPrefix,
  87. LPTSTR lpszMsg,
  88. LPRECT lpRect)
  89. {
  90. if (nDbgLvl <= s_nDbgLevel)
  91. OleDbgPrintRectAlways(lpszPrefix, lpszMsg, lpRect);
  92. }
  93. STDAPI_(void) OleDbgPrintRectAlways(
  94. LPTSTR lpszPrefix,
  95. LPTSTR lpszMsg,
  96. LPRECT lpRect)
  97. {
  98. TCHAR szBuf[256];
  99. StringCchPrintf(
  100. szBuf,
  101. sizeof(szBuf)/sizeof(szBuf[0]),
  102. TEXT("%s: (%d,%d)-(%d,%d) %dx%d\r\n"),
  103. lpszMsg,
  104. lpRect->left,
  105. lpRect->top,
  106. lpRect->right,
  107. lpRect->bottom,
  108. (lpRect->right-lpRect->left),
  109. (lpRect->bottom-lpRect->top)
  110. );
  111. OleDbgPrintAlways(lpszPrefix, szBuf, 0);
  112. }
  113. #define CASE_SCODE(sc) \
  114. case sc: \
  115. pszErrName = TEXT(#sc); \
  116. break;
  117. STDAPI_(void) OleDbgPrintScodeAlways(LPTSTR lpszPrefix, LPTSTR lpszMsg, SCODE sc)
  118. {
  119. const TCHAR* pszErrName;
  120. switch (sc)
  121. {
  122. /* SCODE's defined in SCODE.H */
  123. CASE_SCODE(S_OK)
  124. CASE_SCODE(S_FALSE)
  125. CASE_SCODE(E_UNEXPECTED)
  126. CASE_SCODE(E_OUTOFMEMORY)
  127. CASE_SCODE(E_INVALIDARG)
  128. CASE_SCODE(E_NOINTERFACE)
  129. CASE_SCODE(E_POINTER)
  130. CASE_SCODE(E_HANDLE)
  131. CASE_SCODE(E_ABORT)
  132. CASE_SCODE(E_FAIL)
  133. CASE_SCODE(E_ACCESSDENIED)
  134. /* SCODE's defined in OLE2.H */
  135. CASE_SCODE(OLE_E_OLEVERB)
  136. CASE_SCODE(OLE_E_ADVF)
  137. CASE_SCODE(OLE_E_ENUM_NOMORE)
  138. CASE_SCODE(OLE_E_ADVISENOTSUPPORTED)
  139. CASE_SCODE(OLE_E_NOCONNECTION)
  140. CASE_SCODE(OLE_E_NOTRUNNING)
  141. CASE_SCODE(OLE_E_NOCACHE)
  142. CASE_SCODE(OLE_E_BLANK)
  143. CASE_SCODE(OLE_E_CLASSDIFF)
  144. CASE_SCODE(OLE_E_CANT_GETMONIKER)
  145. CASE_SCODE(OLE_E_CANT_BINDTOSOURCE)
  146. CASE_SCODE(OLE_E_STATIC)
  147. CASE_SCODE(OLE_E_PROMPTSAVECANCELLED)
  148. CASE_SCODE(OLE_E_INVALIDRECT)
  149. CASE_SCODE(OLE_E_WRONGCOMPOBJ)
  150. CASE_SCODE(OLE_E_INVALIDHWND)
  151. CASE_SCODE(OLE_E_NOT_INPLACEACTIVE)
  152. CASE_SCODE(OLE_E_CANTCONVERT)
  153. CASE_SCODE(OLE_E_NOSTORAGE)
  154. CASE_SCODE(DV_E_FORMATETC)
  155. CASE_SCODE(DV_E_DVTARGETDEVICE)
  156. CASE_SCODE(DV_E_STGMEDIUM)
  157. CASE_SCODE(DV_E_STATDATA)
  158. CASE_SCODE(DV_E_LINDEX)
  159. CASE_SCODE(DV_E_TYMED)
  160. CASE_SCODE(DV_E_CLIPFORMAT)
  161. CASE_SCODE(DV_E_DVASPECT)
  162. CASE_SCODE(DV_E_DVTARGETDEVICE_SIZE)
  163. CASE_SCODE(DV_E_NOIVIEWOBJECT)
  164. CASE_SCODE(OLE_S_USEREG)
  165. CASE_SCODE(OLE_S_STATIC)
  166. CASE_SCODE(OLE_S_MAC_CLIPFORMAT)
  167. CASE_SCODE(CONVERT10_E_OLESTREAM_GET)
  168. CASE_SCODE(CONVERT10_E_OLESTREAM_PUT)
  169. CASE_SCODE(CONVERT10_E_OLESTREAM_FMT)
  170. CASE_SCODE(CONVERT10_E_OLESTREAM_BITMAP_TO_DIB)
  171. CASE_SCODE(CONVERT10_E_STG_FMT)
  172. CASE_SCODE(CONVERT10_E_STG_NO_STD_STREAM)
  173. CASE_SCODE(CONVERT10_E_STG_DIB_TO_BITMAP)
  174. CASE_SCODE(CONVERT10_S_NO_PRESENTATION)
  175. CASE_SCODE(CLIPBRD_E_CANT_OPEN)
  176. CASE_SCODE(CLIPBRD_E_CANT_EMPTY)
  177. CASE_SCODE(CLIPBRD_E_CANT_SET)
  178. CASE_SCODE(CLIPBRD_E_BAD_DATA)
  179. CASE_SCODE(CLIPBRD_E_CANT_CLOSE)
  180. CASE_SCODE(DRAGDROP_E_NOTREGISTERED)
  181. CASE_SCODE(DRAGDROP_E_ALREADYREGISTERED)
  182. CASE_SCODE(DRAGDROP_E_INVALIDHWND)
  183. CASE_SCODE(DRAGDROP_S_DROP)
  184. CASE_SCODE(DRAGDROP_S_CANCEL)
  185. CASE_SCODE(DRAGDROP_S_USEDEFAULTCURSORS)
  186. CASE_SCODE(OLEOBJ_E_NOVERBS)
  187. CASE_SCODE(OLEOBJ_E_INVALIDVERB)
  188. CASE_SCODE(OLEOBJ_S_INVALIDVERB)
  189. CASE_SCODE(OLEOBJ_S_CANNOT_DOVERB_NOW)
  190. CASE_SCODE(OLEOBJ_S_INVALIDHWND)
  191. CASE_SCODE(INPLACE_E_NOTUNDOABLE)
  192. CASE_SCODE(INPLACE_E_NOTOOLSPACE)
  193. CASE_SCODE(INPLACE_S_TRUNCATED)
  194. /* SCODE's defined in COMPOBJ.H */
  195. CASE_SCODE(CO_E_NOTINITIALIZED)
  196. CASE_SCODE(CO_E_ALREADYINITIALIZED)
  197. CASE_SCODE(CO_E_CANTDETERMINECLASS)
  198. CASE_SCODE(CO_E_CLASSSTRING)
  199. CASE_SCODE(CO_E_IIDSTRING)
  200. CASE_SCODE(CO_E_APPNOTFOUND)
  201. CASE_SCODE(CO_E_APPSINGLEUSE)
  202. CASE_SCODE(CO_E_ERRORINAPP)
  203. CASE_SCODE(CO_E_DLLNOTFOUND)
  204. CASE_SCODE(CO_E_ERRORINDLL)
  205. CASE_SCODE(CO_E_WRONGOSFORAPP)
  206. CASE_SCODE(CO_E_OBJNOTREG)
  207. CASE_SCODE(CO_E_OBJISREG)
  208. CASE_SCODE(CO_E_OBJNOTCONNECTED)
  209. CASE_SCODE(CO_E_APPDIDNTREG)
  210. CASE_SCODE(CLASS_E_NOAGGREGATION)
  211. CASE_SCODE(CLASS_E_CLASSNOTAVAILABLE)
  212. CASE_SCODE(REGDB_E_READREGDB)
  213. CASE_SCODE(REGDB_E_WRITEREGDB)
  214. CASE_SCODE(REGDB_E_KEYMISSING)
  215. CASE_SCODE(REGDB_E_INVALIDVALUE)
  216. CASE_SCODE(REGDB_E_CLASSNOTREG)
  217. CASE_SCODE(REGDB_E_IIDNOTREG)
  218. CASE_SCODE(RPC_E_CALL_REJECTED)
  219. CASE_SCODE(RPC_E_CALL_CANCELED)
  220. CASE_SCODE(RPC_E_CANTPOST_INSENDCALL)
  221. CASE_SCODE(RPC_E_CANTCALLOUT_INASYNCCALL)
  222. CASE_SCODE(RPC_E_CANTCALLOUT_INEXTERNALCALL)
  223. CASE_SCODE(RPC_E_CONNECTION_TERMINATED)
  224. CASE_SCODE(RPC_E_SERVER_DIED)
  225. CASE_SCODE(RPC_E_CLIENT_DIED)
  226. CASE_SCODE(RPC_E_INVALID_DATAPACKET)
  227. CASE_SCODE(RPC_E_CANTTRANSMIT_CALL)
  228. CASE_SCODE(RPC_E_CLIENT_CANTMARSHAL_DATA)
  229. CASE_SCODE(RPC_E_CLIENT_CANTUNMARSHAL_DATA)
  230. CASE_SCODE(RPC_E_SERVER_CANTMARSHAL_DATA)
  231. CASE_SCODE(RPC_E_SERVER_CANTUNMARSHAL_DATA)
  232. CASE_SCODE(RPC_E_INVALID_DATA)
  233. CASE_SCODE(RPC_E_INVALID_PARAMETER)
  234. CASE_SCODE(RPC_E_UNEXPECTED)
  235. /* SCODE's defined in DVOBJ.H */
  236. CASE_SCODE(DATA_S_SAMEFORMATETC)
  237. CASE_SCODE(VIEW_E_DRAW)
  238. CASE_SCODE(VIEW_S_ALREADY_FROZEN)
  239. CASE_SCODE(CACHE_E_NOCACHE_UPDATED)
  240. CASE_SCODE(CACHE_S_FORMATETC_NOTSUPPORTED)
  241. CASE_SCODE(CACHE_S_SAMECACHE)
  242. CASE_SCODE(CACHE_S_SOMECACHES_NOTUPDATED)
  243. /* SCODE's defined in STORAGE.H */
  244. CASE_SCODE(STG_E_INVALIDFUNCTION)
  245. CASE_SCODE(STG_E_FILENOTFOUND)
  246. CASE_SCODE(STG_E_PATHNOTFOUND)
  247. CASE_SCODE(STG_E_TOOMANYOPENFILES)
  248. CASE_SCODE(STG_E_ACCESSDENIED)
  249. CASE_SCODE(STG_E_INVALIDHANDLE)
  250. CASE_SCODE(STG_E_INSUFFICIENTMEMORY)
  251. CASE_SCODE(STG_E_INVALIDPOINTER)
  252. CASE_SCODE(STG_E_NOMOREFILES)
  253. CASE_SCODE(STG_E_DISKISWRITEPROTECTED)
  254. CASE_SCODE(STG_E_SEEKERROR)
  255. CASE_SCODE(STG_E_WRITEFAULT)
  256. CASE_SCODE(STG_E_READFAULT)
  257. CASE_SCODE(STG_E_SHAREVIOLATION)
  258. CASE_SCODE(STG_E_LOCKVIOLATION)
  259. CASE_SCODE(STG_E_FILEALREADYEXISTS)
  260. CASE_SCODE(STG_E_INVALIDPARAMETER)
  261. CASE_SCODE(STG_E_MEDIUMFULL)
  262. CASE_SCODE(STG_E_ABNORMALAPIEXIT)
  263. CASE_SCODE(STG_E_INVALIDHEADER)
  264. CASE_SCODE(STG_E_INVALIDNAME)
  265. CASE_SCODE(STG_E_UNKNOWN)
  266. CASE_SCODE(STG_E_UNIMPLEMENTEDFUNCTION)
  267. CASE_SCODE(STG_E_INVALIDFLAG)
  268. CASE_SCODE(STG_E_INUSE)
  269. CASE_SCODE(STG_E_NOTCURRENT)
  270. CASE_SCODE(STG_E_REVERTED)
  271. CASE_SCODE(STG_E_CANTSAVE)
  272. CASE_SCODE(STG_E_OLDFORMAT)
  273. CASE_SCODE(STG_E_OLDDLL)
  274. CASE_SCODE(STG_E_SHAREREQUIRED)
  275. CASE_SCODE(STG_E_NOTFILEBASEDSTORAGE)
  276. CASE_SCODE(STG_E_EXTANTMARSHALLINGS)
  277. CASE_SCODE(STG_S_CONVERTED)
  278. /* SCODE's defined in STORAGE.H */
  279. CASE_SCODE(MK_E_CONNECTMANUALLY)
  280. CASE_SCODE(MK_E_EXCEEDEDDEADLINE)
  281. CASE_SCODE(MK_E_NEEDGENERIC)
  282. CASE_SCODE(MK_E_UNAVAILABLE)
  283. CASE_SCODE(MK_E_SYNTAX)
  284. CASE_SCODE(MK_E_NOOBJECT)
  285. CASE_SCODE(MK_E_INVALIDEXTENSION)
  286. CASE_SCODE(MK_E_INTERMEDIATEINTERFACENOTSUPPORTED)
  287. CASE_SCODE(MK_E_NOTBINDABLE)
  288. CASE_SCODE(MK_E_NOTBOUND)
  289. CASE_SCODE(MK_E_CANTOPENFILE)
  290. CASE_SCODE(MK_E_MUSTBOTHERUSER)
  291. CASE_SCODE(MK_E_NOINVERSE)
  292. CASE_SCODE(MK_E_NOSTORAGE)
  293. CASE_SCODE(MK_E_NOPREFIX)
  294. CASE_SCODE(MK_S_REDUCED_TO_SELF)
  295. CASE_SCODE(MK_S_ME)
  296. CASE_SCODE(MK_S_HIM)
  297. CASE_SCODE(MK_S_US)
  298. CASE_SCODE(MK_S_MONIKERALREADYREGISTERED)
  299. default:
  300. pszErrName = TEXT("UNKNOWN SCODE");
  301. break;
  302. }
  303. TCHAR szBuf[256];
  304. StringCchPrintf(szBuf, sizeof(szBuf)/sizeof(szBuf[0]), TEXT("%s %s (0x%lx)\n"), lpszMsg, pszErrName, sc);
  305. OleDbgPrintAlways(lpszPrefix, szBuf, 0);
  306. }
  307. STDAPI OleStdAssert(LPTSTR lpstrExpr, LPTSTR lpstrMsg, LPTSTR lpstrFileName, UINT iLine)
  308. {
  309. TCHAR buf[4096];
  310. StringCchPrintf(buf, sizeof(buf)/sizeof(buf[0]), _T("Expr: %s Msg: (%s)\n")
  311. _T("File: %s, line: %ud"), lpstrExpr, lpstrMsg, lpstrFileName, iLine);
  312. int i = MessageBox(GetActiveWindow(), buf, _T("Assertion Failed!"),
  313. MB_TASKMODAL|MB_ABORTRETRYIGNORE);
  314. switch (i)
  315. {
  316. case IDABORT:
  317. ExitProcess((UINT)-3);
  318. break;
  319. case IDRETRY:
  320. #ifdef _X86_
  321. _asm int 3;
  322. #else
  323. DebugBreak();
  324. #endif
  325. break;
  326. }
  327. return NOERROR;
  328. }
  329. #endif //_DEBUG