Advertisement
Guest User

DETOURS.H

a guest
Sep 26th, 2016
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.81 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Core Detours Functionality (detours.h of detours.lib)
  4. //
  5. // Microsoft Research Detours Package, Version 3.0 Build_316.
  6. //
  7. // Copyright (c) Microsoft Corporation. All rights reserved.
  8. //
  9.  
  10. #pragma once
  11. #include <Windows.h>
  12. #define _CRT_SECURE_NO_WARNINGS
  13. #ifndef _DETOURS_H_
  14. #define _DETOURS_H_
  15.  
  16. #define DETOURS_VERSION 30000 // 3.00.00
  17.  
  18. //////////////////////////////////////////////////////////////////////////////
  19. //
  20.  
  21. #if (_MSC_VER < 1299)
  22. typedef LONG LONG_PTR;
  23. typedef ULONG ULONG_PTR;
  24. #endif
  25.  
  26. #ifndef __in_z
  27. #define __in_z
  28. #endif
  29.  
  30. //////////////////////////////////////////////////////////////////////////////
  31. //
  32. #ifndef GUID_DEFINED
  33. #define GUID_DEFINED
  34. typedef struct _GUID
  35. {
  36. DWORD Data1;
  37. WORD Data2;
  38. WORD Data3;
  39. BYTE Data4[8];
  40. } GUID;
  41.  
  42. #ifdef INITGUID
  43. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  44. const GUID name \
  45. = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
  46. #else
  47. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  48. const GUID name
  49. #endif // INITGUID
  50. #endif // !GUID_DEFINED
  51.  
  52. #if defined(__cplusplus)
  53. #ifndef _REFGUID_DEFINED
  54. #define _REFGUID_DEFINED
  55. #define REFGUID const GUID &
  56. #endif // !_REFGUID_DEFINED
  57. #else // !__cplusplus
  58. #ifndef _REFGUID_DEFINED
  59. #define _REFGUID_DEFINED
  60. #define REFGUID const GUID * const
  61. #endif // !_REFGUID_DEFINED
  62. #endif // !__cplusplus
  63.  
  64. //
  65. //////////////////////////////////////////////////////////////////////////////
  66.  
  67. #ifdef __cplusplus
  68. extern "C" {
  69. #endif // __cplusplus
  70.  
  71. /////////////////////////////////////////////////// Instruction Target Macros.
  72. //
  73. #define DETOUR_INSTRUCTION_TARGET_NONE ((PVOID)0)
  74. #define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PVOID)(LONG_PTR)-1)
  75. #define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0"
  76.  
  77. extern const GUID DETOUR_EXE_RESTORE_GUID;
  78. extern const GUID DETOUR_EXE_HELPER_GUID;
  79.  
  80. #define DETOUR_TRAMPOLINE_SIGNATURE 0x21727444 // Dtr!
  81. typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE;
  82.  
  83. /////////////////////////////////////////////////////////// Binary Structures.
  84. //
  85. #pragma pack(push, 8)
  86. typedef struct _DETOUR_SECTION_HEADER
  87. {
  88. DWORD cbHeaderSize;
  89. DWORD nSignature;
  90. DWORD nDataOffset;
  91. DWORD cbDataSize;
  92.  
  93. DWORD nOriginalImportVirtualAddress;
  94. DWORD nOriginalImportSize;
  95. DWORD nOriginalBoundImportVirtualAddress;
  96. DWORD nOriginalBoundImportSize;
  97.  
  98. DWORD nOriginalIatVirtualAddress;
  99. DWORD nOriginalIatSize;
  100. DWORD nOriginalSizeOfImage;
  101. DWORD cbPrePE;
  102.  
  103. DWORD nOriginalClrFlags;
  104. DWORD reserved1;
  105. DWORD reserved2;
  106. DWORD reserved3;
  107.  
  108. // Followed by cbPrePE bytes of data.
  109. } DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER;
  110.  
  111. typedef struct _DETOUR_SECTION_RECORD
  112. {
  113. DWORD cbBytes;
  114. DWORD nReserved;
  115. GUID guid;
  116. } DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD;
  117.  
  118. typedef struct _DETOUR_CLR_HEADER
  119. {
  120. // Header versioning
  121. ULONG cb;
  122. USHORT MajorRuntimeVersion;
  123. USHORT MinorRuntimeVersion;
  124.  
  125. // Symbol table and startup information
  126. IMAGE_DATA_DIRECTORY MetaData;
  127. ULONG Flags;
  128.  
  129. // Followed by the rest of the IMAGE_COR20_HEADER
  130. } DETOUR_CLR_HEADER, *PDETOUR_CLR_HEADER;
  131.  
  132. typedef struct _DETOUR_EXE_RESTORE
  133. {
  134. DWORD cb;
  135. DWORD cbidh;
  136. DWORD cbinh;
  137. DWORD cbclr;
  138.  
  139. PBYTE pidh;
  140. PBYTE pinh;
  141. PBYTE pclr;
  142.  
  143. IMAGE_DOS_HEADER idh;
  144. union {
  145. IMAGE_NT_HEADERS inh;
  146. IMAGE_NT_HEADERS32 inh32;
  147. IMAGE_NT_HEADERS64 inh64;
  148. BYTE raw[sizeof(IMAGE_NT_HEADERS64) +
  149. sizeof(IMAGE_SECTION_HEADER) * 32];
  150. };
  151. DETOUR_CLR_HEADER clr;
  152.  
  153. } DETOUR_EXE_RESTORE, *PDETOUR_EXE_RESTORE;
  154.  
  155. typedef struct _DETOUR_EXE_HELPER
  156. {
  157. DWORD cb;
  158. DWORD pid;
  159. CHAR DllName[MAX_PATH];
  160.  
  161. } DETOUR_EXE_HELPER, *PDETOUR_EXE_HELPER;
  162.  
  163. #pragma pack(pop)
  164.  
  165. #define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \
  166. { \
  167. sizeof(DETOUR_SECTION_HEADER),\
  168. DETOUR_SECTION_HEADER_SIGNATURE,\
  169. sizeof(DETOUR_SECTION_HEADER),\
  170. (cbSectionSize),\
  171. \
  172. 0,\
  173. 0,\
  174. 0,\
  175. 0,\
  176. \
  177. 0,\
  178. 0,\
  179. 0,\
  180. 0,\
  181. }
  182.  
  183. /////////////////////////////////////////////////////////////// Helper Macros.
  184. //
  185. #define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x)
  186. #define DETOURS_STRINGIFY_(x) #x
  187.  
  188. ///////////////////////////////////////////////////////////// Binary Typedefs.
  189. //
  190. typedef BOOL(CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(PVOID pContext,
  191. PCHAR pszFile,
  192. PCHAR *ppszOutFile);
  193.  
  194. typedef BOOL(CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(PVOID pContext,
  195. PCHAR pszOrigFile,
  196. PCHAR pszFile,
  197. PCHAR *ppszOutFile);
  198.  
  199. typedef BOOL(CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(PVOID pContext,
  200. ULONG nOrigOrdinal,
  201. ULONG nOrdinal,
  202. ULONG *pnOutOrdinal,
  203. PCHAR pszOrigSymbol,
  204. PCHAR pszSymbol,
  205. PCHAR *ppszOutSymbol);
  206.  
  207. typedef BOOL(CALLBACK *PF_DETOUR_BINARY_COMMIT_CALLBACK)(PVOID pContext);
  208.  
  209. typedef BOOL(CALLBACK *PF_DETOUR_ENUMERATE_EXPORT_CALLBACK)(PVOID pContext,
  210. ULONG nOrdinal,
  211. PCHAR pszName,
  212. PVOID pCode);
  213.  
  214. typedef BOOL(CALLBACK *PF_DETOUR_IMPORT_FILE_CALLBACK)(PVOID pContext,
  215. HMODULE hModule,
  216. PCSTR pszFile);
  217.  
  218. typedef BOOL(CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK)(PVOID pContext,
  219. DWORD nOrdinal,
  220. PCSTR pszFunc,
  221. PVOID pvFunc);
  222.  
  223. typedef VOID * PDETOUR_BINARY;
  224. typedef VOID * PDETOUR_LOADED_BINARY;
  225.  
  226. //////////////////////////////////////////////////////////// Transaction APIs.
  227. //
  228. LONG WINAPI DetourTransactionBegin(VOID);
  229. LONG WINAPI DetourTransactionAbort(VOID);
  230. LONG WINAPI DetourTransactionCommit(VOID);
  231. LONG WINAPI DetourTransactionCommitEx(PVOID **pppFailedPointer);
  232.  
  233. LONG WINAPI DetourUpdateThread(HANDLE hThread);
  234.  
  235. LONG WINAPI DetourAttach(PVOID *ppPointer,
  236. PVOID pDetour);
  237.  
  238. LONG WINAPI DetourAttachEx(PVOID *ppPointer,
  239. PVOID pDetour,
  240. PDETOUR_TRAMPOLINE *ppRealTrampoline,
  241. PVOID *ppRealTarget,
  242. PVOID *ppRealDetour);
  243.  
  244. LONG WINAPI DetourDetach(PVOID *ppPointer,
  245. PVOID pDetour);
  246.  
  247. BOOL WINAPI DetourSetIgnoreTooSmall(BOOL fIgnore);
  248. BOOL WINAPI DetourSetRetainRegions(BOOL fRetain);
  249.  
  250. ////////////////////////////////////////////////////////////// Code Functions.
  251. //
  252. PVOID WINAPI DetourFindFunction(PCSTR pszModule, PCSTR pszFunction);
  253. PVOID WINAPI DetourCodeFromPointer(PVOID pPointer, PVOID *ppGlobals);
  254. PVOID WINAPI DetourCopyInstruction(PVOID pDst,
  255. PVOID *pDstPool,
  256. PVOID pSrc,
  257. PVOID *ppTarget,
  258. LONG *plExtra);
  259.  
  260. ///////////////////////////////////////////////////// Loaded Binary Functions.
  261. //
  262. HMODULE WINAPI DetourGetContainingModule(PVOID pvAddr);
  263. HMODULE WINAPI DetourEnumerateModules(HMODULE hModuleLast);
  264. PVOID WINAPI DetourGetEntryPoint(HMODULE hModule);
  265. ULONG WINAPI DetourGetModuleSize(HMODULE hModule);
  266. BOOL WINAPI DetourEnumerateExports(HMODULE hModule,
  267. PVOID pContext,
  268. PF_DETOUR_ENUMERATE_EXPORT_CALLBACK pfExport);
  269. BOOL WINAPI DetourEnumerateImports(HMODULE hModule,
  270. PVOID pContext,
  271. PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile,
  272. PF_DETOUR_IMPORT_FUNC_CALLBACK pfImportFunc);
  273.  
  274. PVOID WINAPI DetourFindPayload(HMODULE hModule, REFGUID rguid, DWORD *pcbData);
  275. PVOID WINAPI DetourFindPayloadEx(REFGUID rguid, DWORD * pcbData);
  276. DWORD WINAPI DetourGetSizeOfPayloads(HMODULE hModule);
  277.  
  278. ///////////////////////////////////////////////// Persistent Binary Functions.
  279. //
  280.  
  281. PDETOUR_BINARY WINAPI DetourBinaryOpen(HANDLE hFile);
  282. PVOID WINAPI DetourBinaryEnumeratePayloads(PDETOUR_BINARY pBinary,
  283. GUID *pGuid,
  284. DWORD *pcbData,
  285. DWORD *pnIterator);
  286. PVOID WINAPI DetourBinaryFindPayload(PDETOUR_BINARY pBinary,
  287. REFGUID rguid,
  288. DWORD *pcbData);
  289. PVOID WINAPI DetourBinarySetPayload(PDETOUR_BINARY pBinary,
  290. REFGUID rguid,
  291. PVOID pData,
  292. DWORD cbData);
  293. BOOL WINAPI DetourBinaryDeletePayload(PDETOUR_BINARY pBinary, REFGUID rguid);
  294. BOOL WINAPI DetourBinaryPurgePayloads(PDETOUR_BINARY pBinary);
  295. BOOL WINAPI DetourBinaryResetImports(PDETOUR_BINARY pBinary);
  296. BOOL WINAPI DetourBinaryEditImports(PDETOUR_BINARY pBinary,
  297. PVOID pContext,
  298. PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway,
  299. PF_DETOUR_BINARY_FILE_CALLBACK pfFile,
  300. PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol,
  301. PF_DETOUR_BINARY_COMMIT_CALLBACK pfCommit);
  302. BOOL WINAPI DetourBinaryWrite(PDETOUR_BINARY pBinary, HANDLE hFile);
  303. BOOL WINAPI DetourBinaryClose(PDETOUR_BINARY pBinary);
  304.  
  305. /////////////////////////////////////////////////// Create Process & Load Dll.
  306. //
  307. typedef BOOL(WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA)
  308. (LPCSTR lpApplicationName,
  309. LPSTR lpCommandLine,
  310. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  311. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  312. BOOL bInheritHandles,
  313. DWORD dwCreationFlags,
  314. LPVOID lpEnvironment,
  315. LPCSTR lpCurrentDirectory,
  316. LPSTARTUPINFOA lpStartupInfo,
  317. LPPROCESS_INFORMATION lpProcessInformation);
  318.  
  319. typedef BOOL(WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW)
  320. (LPCWSTR lpApplicationName,
  321. LPWSTR lpCommandLine,
  322. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  323. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  324. BOOL bInheritHandles,
  325. DWORD dwCreationFlags,
  326. LPVOID lpEnvironment,
  327. LPCWSTR lpCurrentDirectory,
  328. LPSTARTUPINFOW lpStartupInfo,
  329. LPPROCESS_INFORMATION lpProcessInformation);
  330.  
  331. BOOL WINAPI DetourCreateProcessWithDllA(LPCSTR lpApplicationName,
  332. __in_z LPSTR lpCommandLine,
  333. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  334. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  335. BOOL bInheritHandles,
  336. DWORD dwCreationFlags,
  337. LPVOID lpEnvironment,
  338. LPCSTR lpCurrentDirectory,
  339. LPSTARTUPINFOA lpStartupInfo,
  340. LPPROCESS_INFORMATION lpProcessInformation,
  341. LPCSTR lpDllName,
  342. PDETOUR_CREATE_PROCESS_ROUTINEA
  343. pfCreateProcessA);
  344.  
  345. BOOL WINAPI DetourCreateProcessWithDllW(LPCWSTR lpApplicationName,
  346. __in_z LPWSTR lpCommandLine,
  347. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  348. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  349. BOOL bInheritHandles,
  350. DWORD dwCreationFlags,
  351. LPVOID lpEnvironment,
  352. LPCWSTR lpCurrentDirectory,
  353. LPSTARTUPINFOW lpStartupInfo,
  354. LPPROCESS_INFORMATION lpProcessInformation,
  355. LPCSTR lpDllName,
  356. PDETOUR_CREATE_PROCESS_ROUTINEW
  357. pfCreateProcessW);
  358.  
  359. #ifdef UNICODE
  360. #define DetourCreateProcessWithDll DetourCreateProcessWithDllW
  361. #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW
  362. #else
  363. #define DetourCreateProcessWithDll DetourCreateProcessWithDllA
  364. #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA
  365. #endif // !UNICODE
  366.  
  367. BOOL WINAPI DetourCreateProcessWithDllExA(LPCSTR lpApplicationName,
  368. __in_z LPSTR lpCommandLine,
  369. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  370. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  371. BOOL bInheritHandles,
  372. DWORD dwCreationFlags,
  373. LPVOID lpEnvironment,
  374. LPCSTR lpCurrentDirectory,
  375. LPSTARTUPINFOA lpStartupInfo,
  376. LPPROCESS_INFORMATION lpProcessInformation,
  377. LPCSTR lpDllName,
  378. PDETOUR_CREATE_PROCESS_ROUTINEA
  379. pfCreateProcessA);
  380.  
  381. BOOL WINAPI DetourCreateProcessWithDllExW(LPCWSTR lpApplicationName,
  382. __in_z LPWSTR lpCommandLine,
  383. LPSECURITY_ATTRIBUTES lpProcessAttributes,
  384. LPSECURITY_ATTRIBUTES lpThreadAttributes,
  385. BOOL bInheritHandles,
  386. DWORD dwCreationFlags,
  387. LPVOID lpEnvironment,
  388. LPCWSTR lpCurrentDirectory,
  389. LPSTARTUPINFOW lpStartupInfo,
  390. LPPROCESS_INFORMATION lpProcessInformation,
  391. LPCSTR lpDllName,
  392. PDETOUR_CREATE_PROCESS_ROUTINEW
  393. pfCreateProcessW);
  394.  
  395. #ifdef UNICODE
  396. #define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExW
  397. #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW
  398. #else
  399. #define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExA
  400. #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA
  401. #endif // !UNICODE
  402.  
  403. BOOL WINAPI DetourProcessViaHelperA(DWORD dwTargetPid,
  404. LPCSTR lpDllName,
  405. PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA);
  406.  
  407. BOOL WINAPI DetourProcessViaHelperW(DWORD dwTargetPid,
  408. LPCSTR lpDllName,
  409. PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW);
  410.  
  411. #ifdef UNICODE
  412. #define DetourProcessViaHelper DetourProcessViaHelperW
  413. #else
  414. #define DetourProcessViaHelper DetourProcessViaHelperA
  415. #endif // !UNICODE
  416.  
  417. BOOL WINAPI DetourUpdateProcessWithDll(HANDLE hProcess,
  418. LPCSTR *plpDlls,
  419. DWORD nDlls);
  420.  
  421. BOOL WINAPI DetourCopyPayloadToProcess(HANDLE hProcess,
  422. REFGUID rguid,
  423. PVOID pvData,
  424. DWORD cbData);
  425. BOOL WINAPI DetourRestoreAfterWith(VOID);
  426. BOOL WINAPI DetourRestoreAfterWithEx(PVOID pvData, DWORD cbData);
  427. BOOL WINAPI DetourIsHelperProcess(VOID);
  428. VOID CALLBACK DetourFinishHelperProcess(HWND, HINSTANCE, LPSTR, INT);
  429.  
  430. //
  431. //////////////////////////////////////////////////////////////////////////////
  432. #ifdef __cplusplus
  433. }
  434. #endif // __cplusplus
  435.  
  436. //////////////////////////////////////////////// Detours Internal Definitions.
  437. //
  438. #ifdef __cplusplus
  439. #ifdef DETOURS_INTERNAL
  440.  
  441. #ifndef __deref_out
  442. #define __deref_out
  443. #endif
  444.  
  445. #ifndef __deref
  446. #define __deref
  447. #endif
  448.  
  449. //////////////////////////////////////////////////////////////////////////////
  450. //
  451. #if (_MSC_VER < 1299)
  452. #include <imagehlp.h>
  453. typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64;
  454. typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64;
  455. typedef IMAGEHLP_SYMBOL SYMBOL_INFO;
  456. typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO;
  457.  
  458. static inline
  459. LONG InterlockedCompareExchange(LONG *ptr, LONG nval, LONG oval)
  460. {
  461. return (LONG)::InterlockedCompareExchange((PVOID*)ptr, (PVOID)nval, (PVOID)oval);
  462. }
  463. #else
  464. #include <dbghelp.h>
  465. #endif
  466.  
  467. #ifdef IMAGEAPI // defined by DBGHELP.H
  468. typedef LPAPI_VERSION(NTAPI *PF_ImagehlpApiVersionEx)(LPAPI_VERSION AppVersion);
  469.  
  470. typedef BOOL(NTAPI *PF_SymInitialize)(IN HANDLE hProcess,
  471. IN LPCSTR UserSearchPath,
  472. IN BOOL fInvadeProcess);
  473. typedef DWORD(NTAPI *PF_SymSetOptions)(IN DWORD SymOptions);
  474. typedef DWORD(NTAPI *PF_SymGetOptions)(VOID);
  475. typedef DWORD64(NTAPI *PF_SymLoadModule64)(IN HANDLE hProcess,
  476. IN HANDLE hFile,
  477. IN PSTR ImageName,
  478. IN PSTR ModuleName,
  479. IN DWORD64 BaseOfDll,
  480. IN DWORD SizeOfDll);
  481. typedef BOOL(NTAPI *PF_SymGetModuleInfo64)(IN HANDLE hProcess,
  482. IN DWORD64 qwAddr,
  483. OUT PIMAGEHLP_MODULE64 ModuleInfo);
  484. typedef BOOL(NTAPI *PF_SymFromName)(IN HANDLE hProcess,
  485. IN LPSTR Name,
  486. OUT PSYMBOL_INFO Symbol);
  487.  
  488. typedef struct _DETOUR_SYM_INFO
  489. {
  490. HANDLE hProcess;
  491. HMODULE hDbgHelp;
  492. PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx;
  493. PF_SymInitialize pfSymInitialize;
  494. PF_SymSetOptions pfSymSetOptions;
  495. PF_SymGetOptions pfSymGetOptions;
  496. PF_SymLoadModule64 pfSymLoadModule64;
  497. PF_SymGetModuleInfo64 pfSymGetModuleInfo64;
  498. PF_SymFromName pfSymFromName;
  499. } DETOUR_SYM_INFO, *PDETOUR_SYM_INFO;
  500.  
  501. PDETOUR_SYM_INFO DetourLoadDbgHelp(VOID);
  502.  
  503. #endif // IMAGEAPI
  504.  
  505. #ifndef DETOUR_TRACE
  506. #if DETOUR_DEBUG
  507. #define DETOUR_TRACE(x) printf x
  508. #define DETOUR_BREAK() __debugbreak()
  509. #include <stdio.h>
  510. #include <limits.h>
  511. #else
  512. #define DETOUR_TRACE(x)
  513. #define DETOUR_BREAK()
  514. #endif
  515. #endif
  516.  
  517. #ifdef DETOURS_IA64
  518. #error Feature not supported in this release.
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612. #endif // DETOURS_IA64
  613.  
  614. #ifdef DETOURS_ARM
  615. #error Feature not supported in this release.
  616.  
  617.  
  618.  
  619. #endif // DETOURS_ARM
  620.  
  621. //////////////////////////////////////////////////////////////////////////////
  622.  
  623. #endif // DETOURS_INTERNAL
  624. #endif // __cplusplus
  625.  
  626. #endif // _DETOURS_H_
  627. //
  628. //////////////////////////////////////////////////////////////// End of File.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement