home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_04 / Patcher / main.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-16  |  9.6 KB  |  462 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : main.cpp                                                             //
  10. //  Description: Main patcher program                                                //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define STRICT
  15. #define WIN32_LEAN_AND_MEAN
  16.  
  17. #include <windows.h>
  18. #include <assert.h>
  19.  
  20. #include "Patcher.h"
  21.  
  22. CPatcher patcher;
  23.  
  24. const char * FuncNames[] =
  25. {
  26. "AbortDoc",
  27. "AbortPath",
  28. "AddFontResourceA",
  29. "AddFontResourceTracking",
  30. "AddFontResourceW",
  31. "AngleArc",
  32. "AnimatePalette",
  33. "Arc",
  34. "ArcTo",
  35. "BeginPath",
  36. "BitBlt",
  37. "CancelDC",
  38. "CheckColorsInGamut",
  39. "ChoosePixelFormat",
  40. "Chord",
  41. "CloseEnhMetaFile",
  42. "CloseFigure",
  43. "CloseMetaFile",
  44. "ColorMatchToTarget",
  45. "CombineRgn",
  46. "CombineTransform",
  47. "CopyEnhMetaFileA",
  48. "CopyEnhMetaFileW",
  49. "CopyMetaFileA",
  50. "CopyMetaFileW",
  51. "CreateBitmap",
  52. "CreateBitmapIndirect",
  53. "CreateBrushIndirect",
  54. "CreateColorSpaceA",
  55. "CreateColorSpaceW",
  56. "CreateCompatibleBitmap",
  57. // "CreateCompatibleDC",
  58. "CreateDCA",
  59. "CreateDCW",
  60. "CreateDIBPatternBrush",
  61. "CreateDIBPatternBrushPt",
  62. "CreateDIBSection",
  63. "CreateDIBitmap",
  64. "CreateDiscardableBitmap",
  65. "CreateEllipticRgn",
  66. "CreateEllipticRgnIndirect",
  67. "CreateEnhMetaFileA",
  68. "CreateEnhMetaFileW",
  69. "CreateFontA",
  70. "CreateFontIndirectA",
  71. "CreateFontIndirectW",
  72. "CreateFontW",
  73. "CreateHalftonePalette",
  74. "CreateHatchBrush",
  75. "CreateICA",
  76. "CreateICW",
  77. "CreateMetaFileA",
  78. "CreateMetaFileW",
  79. "CreatePalette",
  80. "CreatePatternBrush",
  81. "CreatePen",
  82. "CreatePenIndirect",
  83. "CreatePolyPolygonRgn",
  84. "CreatePolygonRgn",
  85. "CreateRectRgn",
  86. "CreateRectRgnIndirect",
  87. "CreateRoundRectRgn",
  88. "CreateScalableFontResourceA",
  89. "CreateScalableFontResourceW",
  90. "CreateSolidBrush",
  91. "DPtoLP",
  92. "DeleteColorSpace",
  93. "DeleteDC",
  94. "DeleteEnhMetaFile",
  95. "DeleteMetaFile",
  96. "DeleteObject",
  97. "DescribePixelFormat",
  98. "DeviceCapabilitiesExA",
  99. "DeviceCapabilitiesExW",
  100. "DrawEscape",
  101. "Ellipse",
  102. "EndDoc",
  103. "EndPage",
  104. "EndPath",
  105. "EnumEnhMetaFile",
  106. "EnumFontFamiliesA",
  107. "EnumFontFamiliesExA",
  108. "EnumFontFamiliesExW",
  109. "EnumFontFamiliesW",
  110. "EnumFontsA",
  111. "EnumFontsW",
  112. "EnumICMProfilesA",
  113. "EnumICMProfilesW",
  114. "EnumMetaFile",
  115. "EnumObjects",
  116. "EqualRgn",
  117. "Escape",
  118. "ExcludeClipRect",
  119. "ExtCreatePen",
  120. "ExtCreateRegion",
  121. "ExtEscape",
  122. "ExtFloodFill",
  123. "ExtSelectClipRgn",
  124. "ExtTextOutA",
  125. "ExtTextOutW",
  126. "FillPath",
  127. "FillRgn",
  128. "FixBrushOrgEx",
  129. "FlattenPath",
  130. "FloodFill",
  131. "FrameRgn",
  132. "GdiAddFontResourceW",
  133. "GdiAddGlsBounds",
  134. "GdiAddGlsRecord",
  135. "GdiCleanCacheDC",
  136. "GdiComment",
  137. "GdiConsoleTextOut",
  138. "GdiConvertAndCheckDC",
  139. "GdiConvertBitmap",
  140. "GdiConvertBrush",
  141. "GdiConvertDC",
  142. "GdiConvertEnhMetaFile",
  143. "GdiConvertFont",
  144. "GdiConvertMetaFilePict",
  145. "GdiConvertPalette",
  146. "GdiConvertRegion",
  147. "GdiConvertToDevmodeW",
  148. "GdiCreateLocalEnhMetaFile",
  149. "GdiCreateLocalMetaFilePict",
  150. "GdiDeleteLocalDC",
  151. "GdiDescribePixelFormat",
  152. "GdiDllInitialize",
  153. "GdiEntry1",
  154. "GdiEntry10",
  155. "GdiEntry11",
  156. "GdiEntry12",
  157. "GdiEntry13",
  158. "GdiEntry14",
  159. "GdiEntry15",
  160. "GdiEntry2",
  161. "GdiEntry3",
  162. "GdiEntry4",
  163. "GdiEntry5",
  164. "GdiEntry6",
  165. "GdiEntry7",
  166. "GdiEntry8",
  167. "GdiEntry9",
  168. "GdiFixUpHandle",
  169. "GdiFlush",
  170. "GdiGetBatchLimit",
  171. "GdiGetCharDimensions",
  172. "GdiGetCodePage",
  173. "GdiGetLocalBrush",
  174. "GdiGetLocalDC",
  175. "GdiGetLocalFont",
  176. "GdiGetSpoolMessage",
  177. "GdiInitSpool",
  178. "GdiIsMetaFileDC",
  179. "GdiIsMetaPrintDC",
  180. "GdiPerf",
  181. "GdiPlayDCScript",
  182. "GdiPlayEMF",
  183. "GdiPlayJournal",
  184. "GdiPlayScript",
  185. "GdiProcessSetup",
  186. "GdiQueryFonts",
  187. "GdiQueryTable",
  188. "GdiReleaseLocalDC",
  189. "GdiSetAttrs",
  190. "GdiSetBatchLimit",
  191. "GdiSetPixelFormat",
  192. "GdiSetServerAttr",
  193. "GdiSwapBuffers",
  194. "GdiValidateHandle",
  195. "GetArcDirection",
  196. "GetAspectRatioFilterEx",
  197. "GetBitmapBits",
  198. "GetBitmapDimensionEx",
  199. "GetBkColor",
  200. "GetBkMode",
  201. "GetBoundsRect",
  202. "GetBrushOrgEx",
  203. "GetCharABCWidthsA",
  204. "GetCharABCWidthsFloatA",
  205. "GetCharABCWidthsFloatW",
  206. "GetCharABCWidthsW",
  207. "GetCharWidth32A",
  208. "GetCharWidth32W",
  209. "GetCharWidthA",
  210. "GetCharWidthFloatA",
  211. "GetCharWidthFloatW",
  212. "GetCharWidthInfo",
  213. "GetCharWidthW",
  214. "GetCharacterPlacementA",
  215. "GetCharacterPlacementW",
  216. "GetClipBox",
  217. "GetClipRgn",
  218. "GetColorAdjustment",
  219. "GetColorSpace",
  220. "GetCurrentObject",
  221. "GetCurrentPositionEx",
  222. "GetDCOrgEx",
  223. "GetDIBColorTable",
  224. "GetDIBits",
  225. "GetDeviceCaps",
  226. "GetDeviceGammaRamp",
  227. "GetETM",
  228. "GetEnhMetaFileA",
  229. "GetEnhMetaFileBits",
  230. "GetEnhMetaFileDescriptionA",
  231. "GetEnhMetaFileDescriptionW",
  232. "GetEnhMetaFileHeader",
  233. "GetEnhMetaFilePaletteEntries",
  234. "GetEnhMetaFilePixelFormat",
  235. "GetEnhMetaFileW",
  236. "GetFontData",
  237. "GetFontLanguageInfo",
  238. "GetFontResourceInfoW",
  239. "GetGlyphOutline",
  240. "GetGlyphOutlineA",
  241. "GetGlyphOutlineW",
  242. "GetGlyphOutlineWow",
  243. "GetGraphicsMode",
  244. "GetHFONT",
  245. "GetICMProfileA",
  246. "GetICMProfileW",
  247. "GetKerningPairs",
  248. "GetKerningPairsA",
  249. "GetKerningPairsW",
  250. "GetLogColorSpaceA",
  251. "GetLogColorSpaceW",
  252. "GetMapMode",
  253. "GetMetaFileA",
  254. "GetMetaFileBitsEx",
  255. "GetMetaFileW",
  256. "GetMetaRgn",
  257. "GetMiterLimit",
  258. "GetNearestColor",
  259. "GetNearestPaletteIndex",
  260. "GetObjectA",
  261. "GetObjectType",
  262. "GetObjectW",
  263. "GetOutlineTextMetricsA",
  264. "GetOutlineTextMetricsW",
  265. "GetPaletteEntries",
  266. "GetPath",
  267. "GetPixel",
  268. "GetPixelFormat",
  269. "GetPolyFillMode",
  270. "GetROP2",
  271. "GetRandomRgn",
  272. "GetRasterizerCaps",
  273. "GetRegionData",
  274. "GetRelAbs",
  275. "GetRgnBox",
  276. "GetStockObject",
  277. "GetStretchBltMode",
  278. "GetSystemPaletteEntries",
  279. "GetSystemPaletteUse",
  280. "GetTextAlign",
  281. "GetTextCharacterExtra",
  282. "GetTextCharset",
  283. "GetTextCharsetInfo",
  284. "GetTextColor",
  285. "GetTextExtentExPointA",
  286. "GetTextExtentExPointW",
  287. "GetTextExtentPoint32A",
  288. "GetTextExtentPoint32W",
  289. "GetTextExtentPointA",
  290. "GetTextExtentPointW",
  291. "GetTextFaceA",
  292. "GetTextFaceW",
  293. "GetTextMetricsA",
  294. "GetTextMetricsW",
  295. "GetTransform",
  296. "GetViewportExtEx",
  297. "GetViewportOrgEx",
  298. "GetWinMetaFileBits",
  299. "GetWindowExtEx",
  300. "GetWindowOrgEx",
  301. "GetWorldTransform",
  302. "IntersectClipRect",
  303. "InvertRgn",
  304. "LPtoDP",
  305. "LineDDA",
  306. "LineTo",
  307. "MaskBlt",
  308. "ModifyWorldTransform",
  309. "MoveToEx",
  310. "NamedEscape",
  311. "OffsetClipRgn",
  312. "OffsetRgn",
  313. "OffsetViewportOrgEx",
  314. "OffsetWindowOrgEx",
  315. "PaintRgn",
  316. "PatBlt",
  317. "PathToRegion",
  318. "Pie",
  319. "PlayEnhMetaFile",
  320. "PlayEnhMetaFileRecord",
  321. "PlayMetaFile",
  322. "PlayMetaFileRecord",
  323. "PlgBlt",
  324. "PolyBezier",
  325. "PolyBezierTo",
  326. "PolyDraw",
  327. "PolyPatBlt",
  328. "PolyPolygon",
  329. "PolyPolyline",
  330. "PolyTextOutA",
  331. "PolyTextOutW",
  332. "Polygon",
  333. "Polyline",
  334. "PolylineTo",
  335. "PtInRegion",
  336. "PtVisible",
  337. "RealizePalette",
  338. "RectInRegion",
  339. "RectVisible",
  340. "Rectangle",
  341. "RemoveFontResourceA",
  342. "RemoveFontResourceTracking",
  343. "RemoveFontResourceW",
  344. "ResetDCA",
  345. "ResetDCW",
  346. "ResizePalette",
  347. "RestoreDC",
  348. "RoundRect",
  349. "SaveDC",
  350. "ScaleViewportExtEx",
  351. "ScaleWindowExtEx",
  352. "SelectBrushLocal",
  353. "SelectClipPath",
  354. "SelectClipRgn",
  355. "SelectFontLocal",
  356. "SelectObject",
  357. "SelectPalette",
  358. "SetAbortProc",
  359. "SetArcDirection",
  360. "SetBitmapBits",
  361. "SetBitmapDimensionEx",
  362. "SetBkColor",
  363. "SetBkMode",
  364. "SetBoundsRect",
  365. "SetBrushOrgEx",
  366. "SetColorAdjustment",
  367. "SetColorSpace",
  368. "SetDIBColorTable",
  369. "SetDIBits",
  370. "SetDIBitsToDevice",
  371. "SetDeviceGammaRamp",
  372. "SetEnhMetaFileBits",
  373. "SetFontEnumeration",
  374. "SetGraphicsMode",
  375. "SetICMMode",
  376. "SetICMProfileA",
  377. "SetICMProfileW",
  378. "SetMagicColors",
  379. "SetMapMode",
  380. "SetMapperFlags",
  381. "SetMetaFileBitsEx",
  382. "SetMetaRgn",
  383. "SetMiterLimit",
  384. "SetPaletteEntries",
  385. "SetPixel",
  386. "SetPixelFormat",
  387. "SetPixelV",
  388. "SetPolyFillMode",
  389. "SetROP2",
  390. "SetRectRgn",
  391. "SetRelAbs",
  392. "SetStretchBltMode",
  393. "SetSystemPaletteUse",
  394. "SetTextAlign",
  395. "SetTextCharacterExtra",
  396. "SetTextColor",
  397. "SetTextJustification",
  398. "SetViewportExtEx",
  399. "SetViewportOrgEx",
  400. "SetVirtualResolution",
  401. "SetWinMetaFileBits",
  402. "SetWindowExtEx",
  403. "SetWindowOrgEx",
  404. "SetWorldTransform",
  405. "StartDocA",
  406. "StartDocW",
  407. "StartPage",
  408. "StretchBlt",
  409. "StretchDIBits",
  410. "StrokeAndFillPath",
  411. "StrokePath",
  412. "SwapBuffers",
  413. "TextOutA",
  414. "TextOutW",
  415. "TranslateCharsetInfo",
  416. "UnloadNetworkFonts",
  417. "UnrealizeObject",
  418. "UpdateColors",
  419. "UpdateICMRegKey",
  420. "UpdateICMRegKeyA",
  421. "UpdateICMRegKeyW",
  422. "WidenPath",
  423. "bInitSystemAndFontsDirectoriesW",
  424. "bMakePathNameW",
  425. "cGetTTFFromFOT",
  426. "gdiPlaySpoolStream"
  427. };
  428.  
  429. void Call(int funcid)
  430. {
  431. }
  432.  
  433. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
  434. {
  435.     HPEN hPen = (HPEN) GetStockObject(BLACK_PEN);
  436.  
  437.     HMODULE hModule = GetModuleHandle("GDI32.DLL");
  438.  
  439.     for (int i=0; i<sizeof(FuncNames)/sizeof(FuncNames[0]); i++)
  440.         patcher.Patch(hModule, FuncNames[i], i, Call);
  441.  
  442.     // patcher.Patch(0, "SelectObject");
  443.     // patcher.Patch(1, "CreateSolidBrush");
  444.     // patcher.Patch(2, "DeleteObject");
  445.  
  446.     // HBRUSH hBrush = CreateSolidBrush(RGB(0xFF, 0xFF, 0));
  447.     // SelectObject(GetDC(NULL), hBrush);
  448.     // DeleteObject(hPen);
  449.  
  450.     OutputDebugString("SetPixel\n");
  451.     SetPixel(GetDC(NULL), 1, 1, 0);
  452.  
  453.     OutputDebugString("SetPixelV\n");
  454.     SetPixelV(GetDC(NULL), 1, 1, 0);
  455.  
  456.     OutputDebugString("Begin MessageBox\n");
  457.     
  458.     MessageBox(NULL, "How many calls", "Hooked", MB_OK);
  459.     OutputDebugString("End MessageBox\n");
  460.  
  461.     return 0;
  462. }