iphook.h
上传用户:ykzxjx
上传日期:2022-04-03
资源大小:1175k
文件大小:3k
开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright 1999 - 2000 Mark Roddy
  4. // All Rights Reserved
  5. //
  6. // Hollis Technology Solutions
  7. // 94 Dow Road
  8. // Hollis, NH 03049
  9. // info@hollistech.com
  10. //
  11. // Synopsis: 
  12. // 
  13. //
  14. // Version Information:
  15. //
  16. // $Header: /iphook/inc/iphook.h 3     1/27/00 10:35p Markr $ 
  17. //
  18. ///////////////////////////////////////////////////////////////////////////////
  19. #pragma once
  20. //
  21. // this is functionally equivalent to the _T() macro
  22. // but could somebody tell me why we need two defines?
  23. //
  24. #ifdef UNICODE
  25. #define String(x) L##x
  26. #else 
  27. #ifdef _UNICODE 
  28. #define String(x) L##x
  29. #else
  30. #define String(x) x
  31. #endif
  32. #endif
  33. #define IPHOOK_NAME String("IpHook")
  34. #define IPHOOK_DEV_NAME String("\Device\IpHook")
  35. #define IPHOOK_USER_DEV_NAME String("\DosDevices\IpHook")
  36. #define IPHOOK_DEVICE_TYPE (32768 + 5020)
  37. //
  38. // great, so lets define a simple API
  39. //
  40. // IOCTLs start here
  41. //
  42. #define IP_HOOK_API_BASE (0x800 + 37)
  43. #define CODE_N(n) (n + IP_HOOK_API_BASE)
  44. //
  45. // 1. start hooking
  46. //
  47. #define START_IP_HOOK CTL_CODE(IPHOOK_DEVICE_TYPE, CODE_N(0), 
  48.    METHOD_BUFFERED, FILE_ANY_ACCESS)
  49. //
  50. // 2. stop hooking - only the thread that starts a hook can stop it
  51. //
  52. #define STOP_IP_HOOK CTL_CODE(IPHOOK_DEVICE_TYPE, CODE_N(1), 
  53.    METHOD_BUFFERED, FILE_ANY_ACCESS)
  54. typedef struct IPHeader {
  55.     UCHAR     iph_verlen;     // Version and length 
  56.     UCHAR     iph_tos;        // Type of service 
  57.     USHORT    iph_length;     // Total datagram length 
  58.     USHORT    iph_id;         // Identification 
  59.     USHORT    iph_offset;     // Flags, fragment offset 
  60.     UCHAR     iph_ttl;        // Time to live 
  61.     UCHAR     iph_protocol;   // Protocol 
  62.     USHORT    iph_xsum;       // Header checksum 
  63.     ULONG     iph_src;        // Source address 
  64.     ULONG     iph_dest;       // Destination address 
  65. } IPHeader; 
  66. typedef ULONG IPAddr;
  67. #pragma pack(push, default1)
  68. #pragma pack(4)
  69. typedef struct {
  70. ULONG   tag;
  71. ULONG   sequence;
  72. ULONGLONG timestamp;
  73. ULONG     direction;
  74. ULONG   ifIndex;
  75. IPHeader  header;
  76. ULONG     dataLength;
  77. IPAddr   nextHop;
  78. } IPHOOK_DATA, *PIPHOOK_DATA;
  79. typedef struct {
  80. ULONG tag;
  81. ULONG entries; // how many are there?
  82. ULONG valid;  // how many contain data?
  83. IPHOOK_DATA buffer[1];
  84. } IPHOOK_BUFFER, *PIPHOOK_BUFFER;
  85. #pragma pack(pop, default1)
  86. #define IPHOOK_BUFFER_TAG 0x9038
  87. #define IPHOOK_DATA_TAG 0x9039
  88. //
  89. // 3. Hook this - only the thread that starts a hook can stop it
  90. //
  91. #define HOOK_THIS CTL_CODE(IPHOOK_DEVICE_TYPE, CODE_N(2), 
  92.    METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  93. //
  94. // input Buffer: null, output Buffer: an IPHOOK_BUFFER 
  95. //
  96. // The caller supplies the output buffer, the driver fills it with 
  97. // as much data as is available.
  98. //
  99. BOOLEAN inline validIpHookData(PIPHOOK_DATA iphook)
  100. {
  101. if (iphook && (iphook->tag == IPHOOK_DATA_TAG)) {
  102. return TRUE;
  103. }
  104. return FALSE;
  105. }
  106. BOOLEAN inline validIpHookBuffer(IPHOOK_BUFFER * iphookbuffer)
  107. {
  108. if (iphookbuffer && (iphookbuffer->tag == IPHOOK_BUFFER_TAG)) {
  109. return TRUE;
  110. }
  111. return FALSE;
  112. }
  113. ///////////////////////////////////////////////////////////////////////////////
  114. // 
  115. // Change History Log
  116. //
  117. // $Log: /iphook/inc/iphook.h $
  118. // 
  119. // 3     1/27/00 10:35p Markr
  120. // Prepare to release!
  121. //
  122. //////////////////////////////////////////////////////////////////////////////