Packet32.h
上传用户:sunrenlu
上传日期:2007-01-08
资源大小:199k
文件大小:6k
源码类别:

Internet/网络编程

开发平台:

Delphi

  1. /****************************************************************************
  2.  * Written by Sang-Eun Han (seh@brabo1.korea.ac.kr).
  3.  * 
  4.  * Date :
  5.  *
  6.  * Filename : Packet32.h
  7.  *
  8.  * PERMISSION IS GRANTED TO USE, COPY AND DISTRIBUTE THIS SOFTWARE FOR ANY 
  9.  * PURPOSE EXCEPT FOR A BUSINESS OR COMMERCIAL PURPOSE, AND WITHOUT FEE, PROVIDED, 
  10.  * THAT THE ABOVE COPYRIGHT NOTICE AND THIS STATEMENT APPEAR IN ALL COPIES.
  11.  * I MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS
  12.  * SOFTWARE FOR ANY PURPOSE.  THIS SOFTWARE IS PROVIDED "AS IS."
  13.  *
  14.  */
  15. #ifndef __PACKET32_H_
  16. #define __PACKET32_H_
  17. //copied from Ndis.h
  18. //the following constants are to be used to direct
  19. //the underlying NIC driver to choose which type of
  20. //packet can be delivered to the upper bound driver,
  21. //that is, our snoop driver.
  22. #define NDIS_PACKET_TYPE_DIRECTED           0x0001
  23. #define NDIS_PACKET_TYPE_MULTICAST          0x0002
  24. #define NDIS_PACKET_TYPE_ALL_MULTICAST      0x0004
  25. #define NDIS_PACKET_TYPE_BROADCAST          0x0008
  26. #define NDIS_PACKET_TYPE_SOURCE_ROUTING     0x0010
  27. #define NDIS_PACKET_TYPE_PROMISCUOUS        0x0020 //for snoop
  28. #define NDIS_PACKET_TYPE_SMT                0x0040
  29. #define NDIS_PACKET_TYPE_MAC_FRAME          0x8000
  30. #define NDIS_PACKET_TYPE_FUNCTIONAL         0x4000
  31. #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL     0x2000
  32. #define NDIS_PACKET_TYPE_GROUP              0x1000
  33. //
  34. #define        MAX_LINK_NAME_LENGTH   5
  35. typedef struct tagADAPTER {
  36. HANDLE     hFile;
  37. TCHAR      szAdapterName[MAX_LINK_NAME_LENGTH];
  38. TCHAR      SymbolicLink[MAX_PATH];
  39. } ADAPTER, *LPADAPTER;
  40. typedef struct tagPACKET {
  41. HANDLE       hEvent;
  42. OVERLAPPED   OverLapped;
  43. PVOID        Buffer;
  44. UINT         Length;
  45. } PACKET, *LPPACKET;
  46. typedef struct tagADAPTER_DESC {
  47. TCHAR szAdapterName[MAX_LINK_NAME_LENGTH];
  48. TCHAR szAdapterDesc[MAX_PATH];
  49. } ADAPTER_DESC, *LPADAPTER_DESC;
  50. #ifdef __cplusplus
  51. extern "C" {
  52. #endif
  53. PVOID WINAPI
  54. PacketOpenAdapter(
  55. LPTSTR   AdapterName
  56. /*
  57. description:
  58. open the adapter named as the argument.
  59. to get the adapter name, call PacketGetAdapterNames.
  60. return:
  61. if success, return the pointer to the allocated ADAPTER structure.
  62. else, return NULL
  63. */ 
  64. );
  65. BOOLEAN  WINAPI
  66. PacketSendPacket(
  67. LPADAPTER   AdapterObject,
  68. LPPACKET    lpPacket,
  69. BOOLEAN     Sync
  70. /*
  71. description:
  72. send the user-supplied data via lpPacket.
  73. Sync value is ignored.
  74. return:
  75. if success, return TRUE
  76. else, return FALSE
  77. */
  78. );
  79. PVOID  WINAPI
  80. PacketAllocatePacket(
  81. LPADAPTER   AdapterObject
  82. /*
  83. description:
  84. allocate the new packet
  85. return:
  86. if success, return the pointer to the allocated PACKET structure
  87. else, return NULL
  88. */
  89. );
  90. VOID  WINAPI
  91. PacketInitPacket(
  92. LPPACKET    lpPacket,
  93. PVOID       Buffer,
  94. UINT        Length
  95. /*
  96. description:
  97. set lpPacket's buffer to the user-passed Buffer
  98. set lpPacket's length to the user-passed Length
  99. return:
  100. */
  101. );
  102. VOID  WINAPI
  103. PacketFreePacket(
  104. LPPACKET    lpPacket
  105. /*
  106. description:
  107. free the pre-allocated lpPacket
  108. This doesn't free the lpPacket's buffer.
  109. return:
  110. */
  111. );
  112. BOOLEAN  WINAPI
  113. PacketResetAdapter(
  114. LPADAPTER  AdapterObject
  115. /*
  116. description:
  117. flush the adpater's receive queue
  118. clear any pending if it is.
  119. return:
  120. */
  121. );
  122. BOOLEAN  WINAPI
  123. PacketGetAddress(
  124. LPADAPTER  AdapterObject,
  125. PUCHAR     AddressBuffer,
  126. DWORD cbBytes, 
  127. LPDWORD lpcbBytes
  128. /*
  129. description:
  130. get the adapter's current MAC address
  131. return:
  132. if success, AddressBuffer contains the MAC address,  
  133. lpcbBytes is of the real size of the MAC address in bytes,
  134. return TRUE
  135. else, return FALSE
  136. */
  137. );
  138. BOOLEAN  WINAPI
  139. PacketWaitPacket(
  140. LPADAPTER  AdapterObject,
  141. LPPACKET   lpPacket,
  142. PULONG     BytesReceived
  143. /*
  144. description:
  145. if the user called PacketReceivePacket with the 3rd argument, Sync, set to FALSE 
  146. before calling this and PacketReceivePacket returned FALSE, then,
  147. this function waits until a packet is received.
  148. return:
  149. if success, the contents of the received packet is passed via lpPacket's Buffer,
  150. the length of the received packet in bytes is passed via *BytesReceived,
  151. and return TRUE
  152. else, return FALSE
  153. */
  154. );
  155. BOOLEAN WINAPI
  156. PacketReceivePacket(
  157. LPADAPTER   AdapterObject,
  158. LPPACKET    lpPacket,
  159. BOOLEAN     Sync,
  160. PULONG      BytesReceived
  161. /*
  162. description:
  163. receive a packet transitted over the transmission line attached to this PC.
  164. if Sync is set to FALSE, then it immediately returns (later, call PacketWaitPacket)
  165. ;otherwise, it waits until any packet is received.
  166. return:
  167. if success, the contents of the received packet is passed via lpPacket's Buffer,
  168. the length of the received packet in bytes is passed via *BytesReceived,
  169. and return TRUE
  170. else, *BytesReceived = 0 and return FALSE
  171. */
  172. );
  173. VOID WINAPI
  174. PacketCloseAdapter(
  175. LPADAPTER   lpAdapter
  176. /*
  177. description:
  178. close the underlying adpater
  179. return:
  180. */
  181. );
  182. BOOLEAN WINAPI
  183. PacketSetFilter(
  184. LPADAPTER  AdapterObject,
  185. ULONG      Filter
  186. /*
  187. description:
  188. select the mode of how to receive packets.
  189. For Filter, see the topmost part of this header file.
  190. return:
  191. if success, return TRUE
  192. else, return FALSE
  193. */
  194. );
  195. ULONG  WINAPI
  196. PacketGetAdapterNames(
  197. PVOID pAdapterDescs,
  198. UINT nAdapterDescs,
  199. PUINT pnAdapterDescsMax
  200. /*
  201. description:
  202. find all the adapters installed into this PC.
  203. The user should set the maximum bound of the number of adapters,
  204. normally 3 is enough.
  205. return:
  206. if found, *pnAdapterDescsMax is the total number of the found adapters 
  207. and return TRUE.
  208. else, *pnAdapterDescsMax = 0 and return FALSE
  209. */
  210. );
  211. BOOLEAN WINAPI
  212. PacketAdapterDesc(
  213. LPADAPTER AdapterObject,
  214. LPSTR lpszVendorSays, 
  215. DWORD cbBytes, 
  216. LPDWORD lpcbBytes
  217. /*
  218. description:
  219. get the vendor's description of the underlying NIC.
  220. return:
  221. if success, the vendor's description is passed via lpszVendorSays,
  222. *lpcbBytes is of the length of the description in bytes.
  223. and return TRUE.
  224. else, return FALSE.
  225. */
  226. );
  227. #ifdef __cplusplus
  228. }
  229. #endif
  230. #endif