netmon.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:220k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #pragma warning( disable: 4049 )  /* more than 64k source lines */
  2. /* this ALWAYS GENERATED file contains the definitions for the interfaces */
  3.  /* File created by MIDL compiler version 6.00.0347 */
  4. /* Compiler settings for netmon.idl:
  5.     Oicf, W1, Zp8, env=Win32 (32b run)
  6.     protocol : dce , ms_ext, c_ext, robust
  7.     error checks: allocation ref bounds_check enum stub_data 
  8.     VC __declspec() decoration level: 
  9.          __declspec(uuid()), __declspec(selectany), __declspec(novtable)
  10.          DECLSPEC_UUID(), MIDL_INTERFACE()
  11. */
  12. //@@MIDL_FILE_HEADING(  )
  13. /* verify that the <rpcndr.h> version is high enough to compile this file*/
  14. #ifndef __REQUIRED_RPCNDR_H_VERSION__
  15. #define __REQUIRED_RPCNDR_H_VERSION__ 475
  16. #endif
  17. #include "rpc.h"
  18. #include "rpcndr.h"
  19. #ifndef __RPCNDR_H_VERSION__
  20. #error this stub requires an updated version of <rpcndr.h>
  21. #endif // __RPCNDR_H_VERSION__
  22. #ifndef COM_NO_WINDOWS_H
  23. #include "windows.h"
  24. #include "ole2.h"
  25. #endif /*COM_NO_WINDOWS_H*/
  26. #ifndef __netmon_h__
  27. #define __netmon_h__
  28. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  29. #pragma once
  30. #endif
  31. /* Forward Declarations */ 
  32. #ifndef __IDelaydC_FWD_DEFINED__
  33. #define __IDelaydC_FWD_DEFINED__
  34. typedef interface IDelaydC IDelaydC;
  35. #endif  /* __IDelaydC_FWD_DEFINED__ */
  36. #ifndef __IESP_FWD_DEFINED__
  37. #define __IESP_FWD_DEFINED__
  38. typedef interface IESP IESP;
  39. #endif  /* __IESP_FWD_DEFINED__ */
  40. #ifndef __IRTC_FWD_DEFINED__
  41. #define __IRTC_FWD_DEFINED__
  42. typedef interface IRTC IRTC;
  43. #endif  /* __IRTC_FWD_DEFINED__ */
  44. #ifndef __IStats_FWD_DEFINED__
  45. #define __IStats_FWD_DEFINED__
  46. typedef interface IStats IStats;
  47. #endif  /* __IStats_FWD_DEFINED__ */
  48. /* header files for imported files */
  49. #include "unknwn.h"
  50. #ifdef __cplusplus
  51. extern "C"{
  52. #endif 
  53. void * __RPC_USER MIDL_user_allocate(size_t);
  54. void __RPC_USER MIDL_user_free( void * ); 
  55. /* interface __MIDL_itf_netmon_0000 */
  56. /* [local] */ 
  57. //=============================================================================
  58. //  Microsoft (R) Network Monitor (tm). 
  59. //  Copyright (C) Microsoft Corporation. All rights reserved.
  60. //
  61. //  MODULE: netmon.h
  62. //
  63. //  This is the consolidated include file for all Network Monitor components.
  64. //
  65. //  It contains the contents of these files from previous SDKs:
  66. //
  67. //      NPPTypes.h
  68. //      NMEvent.h       (previously Event.h)
  69. //      NMmcs.h         (previously mcs.h)
  70. //      NMmonitor.h     (previously monitor.h)
  71. //      Finder.h
  72. //      NMSupp.h
  73. //      BHTypes.h
  74. //      NMErr.h
  75. //      BHFilter.h
  76. //      Frame.h
  77. //      Parser.h
  78. //      IniLib.h
  79. //      NMExpert.h      (previously Expert.h)
  80. //      Netmon.h        (previously bh.h)
  81. //      NMBlob.h        (previously blob.h)
  82. //      NMRegHelp.h     (previously reghelp.h)
  83. //      NMIpStructs.h   (previously IpStructs.h)
  84. //      NMIcmpStructs.h (previously IcmpStructs.h)
  85. //      NMIpxStructs.h  (previously IpxStructs.h)
  86. //      NMTcpStructs.h  (previously TcpStructs.h)
  87. //
  88. //      IDelaydC.idl
  89. //      IESP.idl
  90. //      IRTC.idl
  91. //      IStats.idl
  92. //
  93. //=============================================================================
  94. #include <winerror.h>
  95. #pragma pack(1)
  96. // For backward compatability with old SDK versions, all structures within this header
  97. // file will be byte packed on x86 platforms. All other platforms will only have those
  98. // structures that will be used to decode network data packed.
  99. #ifdef _X86_
  100. #pragma pack(1)
  101. #else
  102. #pragma pack()
  103. #endif
  104. // yes we know that many of our structures have:
  105. // warning C4200: nonstandard extension used : zero-sized array in struct/union
  106. // this is OK and intended
  107. #pragma warning(disable:4200)
  108. //=============================================================================
  109. //=============================================================================
  110. //  (NPPTypes.h)
  111. //=============================================================================
  112. //=============================================================================
  113. typedef BYTE *LPBYTE;
  114. typedef const void *HBLOB;
  115. //=============================================================================
  116. // General constants.
  117. //=============================================================================
  118. #define MAC_TYPE_UNKNOWN ( 0 )
  119. #define MAC_TYPE_ETHERNET ( 1 )
  120. #define MAC_TYPE_TOKENRING ( 2 )
  121. #define MAC_TYPE_FDDI ( 3 )
  122. #define MAC_TYPE_ATM ( 4 )
  123. #define MAC_TYPE_1394 ( 5 )
  124. #define MACHINE_NAME_LENGTH ( 16 )
  125. #define USER_NAME_LENGTH ( 32 )
  126. #define ADAPTER_COMMENT_LENGTH ( 32 )
  127. #define CONNECTION_FLAGS_WANT_CONVERSATION_STATS ( 0x1 )
  128. //=============================================================================
  129. //  Transmit statistics structure.
  130. //=============================================================================
  131. typedef struct _TRANSMITSTATS
  132.     {
  133.     DWORD TotalFramesSent;
  134.     DWORD TotalBytesSent;
  135.     DWORD TotalTransmitErrors;
  136.     }  TRANSMITSTATS;
  137. typedef TRANSMITSTATS *LPTRANSMITSTATS;
  138. #define TRANSMITSTATS_SIZE ( sizeof( TRANSMITSTATS  ) )
  139. //=============================================================================
  140. //  Statistics structure.
  141. //=============================================================================
  142. typedef struct _STATISTICS
  143.     {
  144.     __int64 TimeElapsed;
  145.     DWORD TotalFramesCaptured;
  146.     DWORD TotalBytesCaptured;
  147.     DWORD TotalFramesFiltered;
  148.     DWORD TotalBytesFiltered;
  149.     DWORD TotalMulticastsFiltered;
  150.     DWORD TotalBroadcastsFiltered;
  151.     DWORD TotalFramesSeen;
  152.     DWORD TotalBytesSeen;
  153.     DWORD TotalMulticastsReceived;
  154.     DWORD TotalBroadcastsReceived;
  155.     DWORD TotalFramesDropped;
  156.     DWORD TotalFramesDroppedFromBuffer;
  157.     DWORD MacFramesReceived;
  158.     DWORD MacCRCErrors;
  159.     __int64 MacBytesReceivedEx;
  160.     DWORD MacFramesDropped_NoBuffers;
  161.     DWORD MacMulticastsReceived;
  162.     DWORD MacBroadcastsReceived;
  163.     DWORD MacFramesDropped_HwError;
  164.     }  STATISTICS;
  165. typedef STATISTICS *LPSTATISTICS;
  166. #define STATISTICS_SIZE ( sizeof( STATISTICS  ) )
  167. //=============================================================================
  168. //  Address structures
  169. //=============================================================================
  170. // These structures are used to decode network data and so need to be packed
  171. #pragma pack(push, 1)
  172. #define MAX_NAME_SIZE ( 32 )
  173. #define IP_ADDRESS_SIZE ( 4 )
  174. #define MAC_ADDRESS_SIZE ( 6 )
  175. // Q: What is the maximum address size that we could have to copy?
  176. // A: IPX == DWORD + 6 bytes == 10
  177. #define MAX_ADDRESS_SIZE ( 10 )
  178. #define ADDRESS_TYPE_ETHERNET ( 0 )
  179. #define ADDRESS_TYPE_IP ( 1 )
  180. #define ADDRESS_TYPE_IPX ( 2 )
  181. #define ADDRESS_TYPE_TOKENRING ( 3 )
  182. #define ADDRESS_TYPE_FDDI ( 4 )
  183. #define ADDRESS_TYPE_XNS ( 5 )
  184. #define ADDRESS_TYPE_ANY ( 6 )
  185. #define ADDRESS_TYPE_ANY_GROUP ( 7 )
  186. #define ADDRESS_TYPE_FIND_HIGHEST ( 8 )
  187. #define ADDRESS_TYPE_VINES_IP ( 9 )
  188. #define ADDRESS_TYPE_LOCAL_ONLY ( 10 )
  189. #define ADDRESS_TYPE_ATM ( 11 )
  190. #define ADDRESS_TYPE_1394 ( 12 )
  191. #define ADDRESSTYPE_FLAGS_NORMALIZE ( 0x1 )
  192. #define ADDRESSTYPE_FLAGS_BIT_REVERSE ( 0x2 )
  193. // Vines IP Address Structure
  194. typedef struct _VINES_IP_ADDRESS
  195.     {
  196.     DWORD NetID;
  197.     WORD SubnetID;
  198.     }  VINES_IP_ADDRESS;
  199. typedef VINES_IP_ADDRESS *LPVINES_IP_ADDRESS;
  200. #define VINES_IP_ADDRESS_SIZE ( sizeof( VINES_IP_ADDRESS  ) )
  201. // IPX Address Structure
  202. typedef struct _IPX_ADDR
  203.     {
  204.     BYTE Subnet[ 4 ];
  205.     BYTE Address[ 6 ];
  206.     }  IPX_ADDR;
  207. typedef IPX_ADDR *LPIPX_ADDR;
  208. #define IPX_ADDR_SIZE ( sizeof( IPX_ADDR  ) )
  209. // XNS Address Structure
  210. typedef IPX_ADDR XNS_ADDRESS;
  211. typedef IPX_ADDR *LPXNS_ADDRESS;
  212. // ETHERNET SOURCE ADDRESS
  213. typedef struct _ETHERNET_SRC_ADDRESS
  214. {
  215.     BYTE    RoutingBit:     1;
  216.     BYTE    LocalBit:       1;
  217.     BYTE    Byte0:          6;
  218.     BYTE    Reserved[5];
  219. } ETHERNET_SRC_ADDRESS;
  220. typedef ETHERNET_SRC_ADDRESS *LPETHERNET_SRC_ADDRESS;
  221. // ETHERNET DESTINATION ADDRESS
  222. typedef struct _ETHERNET_DST_ADDRESS
  223. {
  224.     BYTE    GroupBit:       1;
  225.     BYTE    AdminBit:       1;
  226.     BYTE    Byte0:          6;
  227.     BYTE    Reserved[5];
  228. } ETHERNET_DST_ADDRESS;
  229. typedef ETHERNET_DST_ADDRESS *LPETHERNET_DST_ADDRESS;
  230. // FDDI addresses
  231. typedef ETHERNET_SRC_ADDRESS FDDI_SRC_ADDRESS;
  232. typedef ETHERNET_DST_ADDRESS FDDI_DST_ADDRESS;
  233. typedef FDDI_SRC_ADDRESS *LPFDDI_SRC_ADDRESS;
  234. typedef FDDI_DST_ADDRESS *LPFDDI_DST_ADDRESS;
  235. // TOKENRING Source Address
  236. typedef struct _TOKENRING_SRC_ADDRESS
  237. {
  238.     BYTE    Byte0:          6;
  239.     BYTE    LocalBit:       1;
  240.     BYTE    RoutingBit:     1;
  241.     BYTE    Byte1;
  242.     BYTE    Byte2:          7;
  243.     BYTE    Functional:     1;
  244.     BYTE    Reserved[3];
  245. } TOKENRING_SRC_ADDRESS;
  246. typedef TOKENRING_SRC_ADDRESS *LPTOKENRING_SRC_ADDRESS;
  247. // TOKENRING Destination Address
  248. typedef struct _TOKENRING_DST_ADDRESS
  249. {
  250.     BYTE    Byte0:          6;
  251.     BYTE    AdminBit:       1;
  252.     BYTE    GroupBit:       1;
  253.     BYTE    Reserved[5];
  254. } TOKENRING_DST_ADDRESS;
  255. typedef TOKENRING_DST_ADDRESS *LPTOKENRING_DST_ADDRESS;
  256. // Address Structure
  257. typedef struct _ADDRESS
  258. {
  259.     DWORD                       Type;
  260.     union
  261.     {
  262.         // ADDRESS_TYPE_ETHERNET
  263.         // ADDRESS_TYPE_TOKENRING
  264.         // ADDRESS_TYPE_FDDI
  265.         BYTE                    MACAddress[MAC_ADDRESS_SIZE];
  266.         // IP
  267.         BYTE                    IPAddress[IP_ADDRESS_SIZE];
  268.         // raw IPX
  269.         BYTE                    IPXRawAddress[IPX_ADDR_SIZE];
  270.         // real IPX
  271.         IPX_ADDR                IPXAddress;
  272.         // raw Vines IP
  273.         BYTE                    VinesIPRawAddress[VINES_IP_ADDRESS_SIZE];
  274.         // real Vines IP
  275.         VINES_IP_ADDRESS        VinesIPAddress;
  276.         // ethernet with bits defined
  277.         ETHERNET_SRC_ADDRESS    EthernetSrcAddress;
  278.         // ethernet with bits defined
  279.         ETHERNET_DST_ADDRESS    EthernetDstAddress;
  280.         // tokenring with bits defined
  281.         TOKENRING_SRC_ADDRESS   TokenringSrcAddress;
  282.         // tokenring with bits defined
  283.         TOKENRING_DST_ADDRESS   TokenringDstAddress;
  284.         // fddi with bits defined
  285.         FDDI_SRC_ADDRESS        FddiSrcAddress;
  286.         // fddi with bits defined
  287.         FDDI_DST_ADDRESS        FddiDstAddress;
  288.     };
  289.     
  290.     WORD                        Flags;
  291. } ADDRESS;
  292. typedef ADDRESS *LPADDRESS;
  293. #define ADDRESS_SIZE   sizeof(ADDRESS)
  294. #pragma pack(pop)
  295. //=============================================================================
  296. //  Address Pair Structure
  297. //=============================================================================
  298. #define ADDRESS_FLAGS_MATCH_DST ( 0x1 )
  299. #define ADDRESS_FLAGS_MATCH_SRC ( 0x2 )
  300. #define ADDRESS_FLAGS_EXCLUDE ( 0x4 )
  301. #define ADDRESS_FLAGS_DST_GROUP_ADDR ( 0x8 )
  302. #define ADDRESS_FLAGS_MATCH_BOTH ( 0x3 )
  303. typedef struct _ADDRESSPAIR
  304. {
  305.     WORD        AddressFlags;
  306.     WORD        NalReserved;
  307.     ADDRESS     DstAddress;
  308.     ADDRESS     SrcAddress;
  309. } ADDRESSPAIR;
  310. typedef ADDRESSPAIR *LPADDRESSPAIR;
  311. #define ADDRESSPAIR_SIZE  sizeof(ADDRESSPAIR)
  312. //=============================================================================
  313. //  Address table.
  314. //=============================================================================
  315. #define MAX_ADDRESS_PAIRS ( 8 )
  316. typedef struct _ADDRESSTABLE
  317. {
  318.     DWORD           nAddressPairs;
  319.     DWORD           nNonMacAddressPairs;
  320.     ADDRESSPAIR     AddressPair[MAX_ADDRESS_PAIRS];
  321. } ADDRESSTABLE;
  322. typedef ADDRESSTABLE *LPADDRESSTABLE;
  323. #define ADDRESSTABLE_SIZE sizeof(ADDRESSTABLE)
  324. //=============================================================================
  325. //  Network information.
  326. //=============================================================================
  327. #define NETWORKINFO_FLAGS_PMODE_NOT_SUPPORTED ( 0x1 )
  328. #define NETWORKINFO_FLAGS_REMOTE_NAL ( 0x4 )
  329. #define NETWORKINFO_FLAGS_REMOTE_NAL_CONNECTED ( 0x8 )
  330. #define NETWORKINFO_FLAGS_REMOTE_CARD ( 0x10 )
  331. #define NETWORKINFO_FLAGS_RAS ( 0x20 )
  332. typedef struct _NETWORKINFO
  333. {
  334.     BYTE            PermanentAddr[6];       //... Permanent MAC address
  335.     BYTE            CurrentAddr[6];         //... Current  MAC address
  336.     ADDRESS         OtherAddress;           //... Other address supported (IP, IPX, etc...)
  337.     DWORD           LinkSpeed;              //... Link speed in Mbits.
  338.     DWORD           MacType;                //... Media type.
  339.     DWORD           MaxFrameSize;           //... Max frame size allowed.
  340.     DWORD           Flags;                  //... Informational flags.
  341.     DWORD           TimestampScaleFactor;   //... 1 = 1/1 ms, 10 = 1/10 ms, 100 = 1/100 ms, etc.
  342.     BYTE            NodeName[32];           //... Name of remote workstation.
  343.     BOOL            PModeSupported;         //... Card claims to support P-Mode
  344.     BYTE            Comment[ADAPTER_COMMENT_LENGTH]; // Adapter comment field.
  345. } NETWORKINFO;
  346. typedef NETWORKINFO *LPNETWORKINFO;
  347. #define NETWORKINFO_SIZE    sizeof(NETWORKINFO)
  348. #define MINIMUM_FRAME_SIZE ( 32 )
  349. //=============================================================================
  350. //  Pattern structure.
  351. //=============================================================================
  352. #define MAX_PATTERN_LENGTH ( 16 )
  353. // When set this flag will cause those frames which do NOT have the specified pattern
  354. // in the proper stop to be kept.
  355. #define PATTERN_MATCH_FLAGS_NOT ( 0x1 )
  356. #define PATTERN_MATCH_FLAGS_RESERVED_1 ( 0x2 )
  357. // When set this flag indicates that the user is not interested in a pattern match within 
  358. // IP or IPX, but in the protocol that follows.  The driver will ensure that the protocol
  359. // given in OffsetBasis is there and then that the port in the fram matches the port given.
  360. // It will then calculate the offset from the beginning of the protocol that follows IP or IPX.
  361. // NOTE: This flag is ignored if it is used with any OffsetBasis other than 
  362. // OFFSET_BASIS_RELATIVE_TO_IPX or OFFSET_BASIS_RELATIVE_TO_IP
  363. #define PATTERN_MATCH_FLAGS_PORT_SPECIFIED ( 0x8 )
  364. // The offset given is relative to the beginning of the frame. The 
  365. // PATTERN_MATCH_FLAGS_PORT_SPECIFIED flag is ignored.
  366. #define OFFSET_BASIS_RELATIVE_TO_FRAME ( 0 )
  367. // The offset given is relative to the beginning of the Effective Protocol.
  368. // The Effective Protocol is defined as the protocol that follows
  369. // the last protocol that determines Etype/SAP. In normal terms this means 
  370. // that the Effective Protocol will be IP, IPX, XNS, or any of their ilk.
  371. // The PATTERN_MATCH_FLAGS_PORT_SPECIFIED flag is ignored.
  372. #define OFFSET_BASIS_RELATIVE_TO_EFFECTIVE_PROTOCOL ( 1 )
  373. // The offset given is relative to the beginning of IPX. If IPX is not present
  374. // then the frame does not match. If the PATTERN_MATCH_FLAGS_PORT_SPECIFIED
  375. // flag is set then the offset is relative to the beginning of the protocol
  376. // which follows IPX.
  377. #define OFFSET_BASIS_RELATIVE_TO_IPX ( 2 )
  378. // The offset given is relative to the beginning of IP. If IP is not present
  379. // then the frame does not match. If the PATTERN_MATCH_FLAGS_PORT_SPECIFIED
  380. // flag is set then the offset is relative to the beginning of the protocol
  381. // which follows IP.
  382. #define OFFSET_BASIS_RELATIVE_TO_IP ( 3 )
  383. typedef /* [public][public][public][public][public][public][public][public][public] */ union __MIDL___MIDL_itf_netmon_0000_0001
  384.     {
  385.     BYTE IPPort;
  386.     WORD ByteSwappedIPXPort;
  387.     }  GENERIC_PORT;
  388. typedef struct _PATTERNMATCH
  389.     {
  390.     DWORD Flags;
  391.     BYTE OffsetBasis;
  392.     GENERIC_PORT Port;
  393.     WORD Offset;
  394.     WORD Length;
  395.     BYTE PatternToMatch[ 16 ];
  396.     }  PATTERNMATCH;
  397. typedef PATTERNMATCH *LPPATTERNMATCH;
  398. #define PATTERNMATCH_SIZE ( sizeof( PATTERNMATCH  ) )
  399. //=============================================================================
  400. //  Expression structure.
  401. //=============================================================================
  402. #define MAX_PATTERNS ( 4 )
  403. typedef struct _ANDEXP
  404.     {
  405.     DWORD nPatternMatches;
  406.     PATTERNMATCH PatternMatch[ 4 ];
  407.     }  ANDEXP;
  408. typedef ANDEXP *LPANDEXP;
  409. #define ANDEXP_SIZE ( sizeof( ANDEXP  ) )
  410. typedef struct _EXPRESSION
  411.     {
  412.     DWORD nAndExps;
  413.     ANDEXP AndExp[ 4 ];
  414.     }  EXPRESSION;
  415. typedef EXPRESSION *LPEXPRESSION;
  416. #define EXPRESSION_SIZE ( sizeof( EXPRESSION  ) )
  417. //=============================================================================
  418. //  Trigger.
  419. //=============================================================================
  420. #define TRIGGER_TYPE_PATTERN_MATCH ( 1 )
  421. #define TRIGGER_TYPE_BUFFER_CONTENT ( 2 )
  422. #define TRIGGER_TYPE_PATTERN_MATCH_THEN_BUFFER_CONTENT ( 3 )
  423. #define TRIGGER_TYPE_BUFFER_CONTENT_THEN_PATTERN_MATCH ( 4 )
  424. #define TRIGGER_FLAGS_FRAME_RELATIVE ( 0 )
  425. #define TRIGGER_FLAGS_DATA_RELATIVE ( 0x1 )
  426. #define TRIGGER_ACTION_NOTIFY ( 0 )
  427. #define TRIGGER_ACTION_STOP ( 0x2 )
  428. #define TRIGGER_ACTION_PAUSE ( 0x3 )
  429. #define TRIGGER_BUFFER_FULL_25_PERCENT ( 0 )
  430. #define TRIGGER_BUFFER_FULL_50_PERCENT ( 1 )
  431. #define TRIGGER_BUFFER_FULL_75_PERCENT ( 2 )
  432. #define TRIGGER_BUFFER_FULL_100_PERCENT ( 3 )
  433. typedef struct _TRIGGER
  434.     {
  435.     BOOL TriggerActive;
  436.     BYTE TriggerType;
  437.     BYTE TriggerAction;
  438.     DWORD TriggerFlags;
  439.     PATTERNMATCH TriggerPatternMatch;
  440.     DWORD TriggerBufferSize;
  441.     DWORD TriggerReserved;
  442.     char TriggerCommandLine[ 260 ];
  443.     }  TRIGGER;
  444. typedef TRIGGER *LPTRIGGER;
  445. #define TRIGGER_SIZE ( sizeof( TRIGGER  ) )
  446. //=============================================================================
  447. //  Capture filter.
  448. //=============================================================================
  449. //  Capture filter flags. By default all frames are rejected and
  450. //  Network Monitor enables them based on the CAPTUREFILTER flags
  451. //  defined below.
  452. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_SAPS ( 0x1 )
  453. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_ETYPES ( 0x2 )
  454. #define CAPTUREFILTER_FLAGS_TRIGGER ( 0x4 )
  455. #define CAPTUREFILTER_FLAGS_LOCAL_ONLY ( 0x8 )
  456. // throw away our internal comment frames
  457. #define CAPTUREFILTER_FLAGS_DISCARD_COMMENTS ( 0x10 )
  458. // Keep SMT and Token Ring MAC frames
  459. #define CAPTUREFILTER_FLAGS_KEEP_RAW ( 0x20 )
  460. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL ( 0x3 )
  461. #define BUFFER_FULL_25_PERCENT ( 0 )
  462. #define BUFFER_FULL_50_PERCENT ( 1 )
  463. #define BUFFER_FULL_75_PERCENT ( 2 )
  464. #define BUFFER_FULL_100_PERCENT ( 3 )
  465. typedef struct _CAPTUREFILTER
  466. {
  467.     DWORD           FilterFlags;      
  468.     LPBYTE          lpSapTable;       
  469.     LPWORD          lpEtypeTable;     
  470.     WORD            nSaps;            
  471.     WORD            nEtypes;          
  472.     LPADDRESSTABLE  AddressTable;     
  473.     EXPRESSION      FilterExpression; 
  474.     TRIGGER         Trigger;          
  475.     DWORD           nFrameBytesToCopy;
  476.     DWORD           Reserved;
  477. } CAPTUREFILTER;
  478. typedef CAPTUREFILTER *LPCAPTUREFILTER;
  479. #define CAPTUREFILTER_SIZE    sizeof(CAPTUREFILTER)
  480. //=============================================================================
  481. //  Frame type.
  482. //=============================================================================
  483. //  TimeStamp is in 1/1,000,000th seconds.
  484. typedef struct _FRAME
  485.     {
  486.     __int64 TimeStamp;
  487.     DWORD FrameLength;
  488.     DWORD nBytesAvail;
  489.     /* [size_is] */ BYTE MacFrame[ 1 ];
  490.     }  FRAME;
  491. typedef FRAME *LPFRAME;
  492. typedef FRAME UNALIGNED *ULPFRAME;
  493. #define FRAME_SIZE ( sizeof( FRAME  ) )
  494. //=============================================================================
  495. //  Frame descriptor type.
  496. //=============================================================================
  497. #define LOW_PROTOCOL_IPX ( OFFSET_BASIS_RELATIVE_TO_IPX )
  498. #define LOW_PROTOCOL_IP ( OFFSET_BASIS_RELATIVE_TO_IP )
  499. #define LOW_PROTOCOL_UNKNOWN ( ( BYTE  )-1 )
  500. typedef struct _FRAME_DESCRIPTOR
  501.     {
  502.     /* [size_is] */ LPBYTE FramePointer;
  503.     __int64 TimeStamp;
  504.     DWORD FrameLength;
  505.     DWORD nBytesAvail;
  506.     WORD Etype;
  507.     BYTE Sap;
  508.     BYTE LowProtocol;
  509.     WORD LowProtocolOffset;
  510.     /* [switch_is] */ /* [switch_type] */ union 
  511.         {
  512.         /* [default] */ WORD Reserved;
  513.         /* [case()] */ BYTE IPPort;
  514.         /* [case()] */ WORD ByteSwappedIPXPort;
  515.         }  HighPort;
  516.     WORD HighProtocolOffset;
  517.     }  FRAME_DESCRIPTOR;
  518. typedef FRAME_DESCRIPTOR *LPFRAME_DESCRIPTOR;
  519. #define FRAME_DESCRIPTOR_SIZE ( sizeof( FRAME_DESCRIPTOR  ) )
  520. //=============================================================================
  521. //  Frame descriptor table.
  522. //=============================================================================
  523. typedef struct _FRAMETABLE
  524.     {
  525.     DWORD FrameTableLength;
  526.     DWORD StartIndex;
  527.     DWORD EndIndex;
  528.     DWORD FrameCount;
  529.     /* [size_is] */ FRAME_DESCRIPTOR Frames[ 1 ];
  530.     }  FRAMETABLE;
  531. typedef FRAMETABLE *LPFRAMETABLE;
  532. //=============================================================================
  533. //  Station statistics.
  534. //=============================================================================
  535. #define STATIONSTATS_FLAGS_INITIALIZED ( 0x1 )
  536. #define STATIONSTATS_FLAGS_EVENTPOSTED ( 0x2 )
  537. #define STATIONSTATS_POOL_SIZE ( 100 )
  538. typedef struct _STATIONSTATS
  539.     {
  540.     DWORD NextStationStats;
  541.     DWORD SessionPartnerList;
  542.     DWORD Flags;
  543.     BYTE StationAddress[ 6 ];
  544.     WORD Pad;
  545.     DWORD TotalPacketsReceived;
  546.     DWORD TotalDirectedPacketsSent;
  547.     DWORD TotalBroadcastPacketsSent;
  548.     DWORD TotalMulticastPacketsSent;
  549.     DWORD TotalBytesReceived;
  550.     DWORD TotalBytesSent;
  551.     }  STATIONSTATS;
  552. typedef STATIONSTATS *LPSTATIONSTATS;
  553. #define STATIONSTATS_SIZE ( sizeof( STATIONSTATS  ) )
  554. //=============================================================================
  555. //  Session statistics.
  556. //=============================================================================
  557. #define SESSION_FLAGS_INITIALIZED ( 0x1 )
  558. #define SESSION_FLAGS_EVENTPOSTED ( 0x2 )
  559. #define SESSION_POOL_SIZE ( 100 )
  560. typedef struct _SESSIONSTATS
  561.     {
  562.     DWORD NextSession;
  563.     DWORD StationOwner;
  564.     DWORD StationPartner;
  565.     DWORD Flags;
  566.     DWORD TotalPacketsSent;
  567.     }  SESSIONSTATS;
  568. typedef SESSIONSTATS *LPSESSIONSTATS;
  569. #define SESSIONSTATS_SIZE ( sizeof( SESSIONSTATS  ) )
  570. //=============================================================================
  571. //  Station Query
  572. //=============================================================================
  573. // These structures are used to decode network data and so need to be packed
  574. #pragma pack(push, 1)
  575. #define STATIONQUERY_FLAGS_LOADED ( 0x1 )
  576. #define STATIONQUERY_FLAGS_RUNNING ( 0x2 )
  577. #define STATIONQUERY_FLAGS_CAPTURING ( 0x4 )
  578. #define STATIONQUERY_FLAGS_TRANSMITTING ( 0x8 )
  579. #define STATIONQUERY_VERSION_MINOR ( 0x1 )
  580. #define STATIONQUERY_VERSION_MAJOR ( 0x2 )
  581. typedef struct _OLDSTATIONQUERY
  582.     {
  583.     DWORD Flags;
  584.     BYTE BCDVerMinor;
  585.     BYTE BCDVerMajor;
  586.     DWORD LicenseNumber;
  587.     BYTE MachineName[ 16 ];
  588.     BYTE UserName[ 32 ];
  589.     BYTE Reserved[ 32 ];
  590.     BYTE AdapterAddress[ 6 ];
  591.     }  OLDSTATIONQUERY;
  592. typedef OLDSTATIONQUERY *LPOLDSTATIONQUERY;
  593. #define OLDSTATIONQUERY_SIZE ( sizeof( OLDSTATIONQUERY  ) )
  594. typedef struct _STATIONQUERY
  595.     {
  596.     DWORD Flags;
  597.     BYTE BCDVerMinor;
  598.     BYTE BCDVerMajor;
  599.     DWORD LicenseNumber;
  600.     BYTE MachineName[ 16 ];
  601.     BYTE UserName[ 32 ];
  602.     BYTE Reserved[ 32 ];
  603.     BYTE AdapterAddress[ 6 ];
  604.     WCHAR WMachineName[ 16 ];
  605.     WCHAR WUserName[ 32 ];
  606.     }  STATIONQUERY;
  607. typedef STATIONQUERY *LPSTATIONQUERY;
  608. #define STATIONQUERY_SIZE ( sizeof( STATIONQUERY  ) )
  609. #pragma pack(pop)
  610. //=============================================================================
  611. //   structure.
  612. //=============================================================================
  613. typedef struct _QUERYTABLE
  614.     {
  615.     DWORD nStationQueries;
  616.     /* [size_is] */ STATIONQUERY StationQuery[ 1 ];
  617.     }  QUERYTABLE;
  618. typedef QUERYTABLE *LPQUERYTABLE;
  619. #define QUERYTABLE_SIZE ( sizeof( QUERYTABLE  ) )
  620. //=============================================================================
  621. //  The LINK structure is used to chain structures together into a list.
  622. //=============================================================================
  623. typedef struct _LINK *LPLINK;
  624. typedef struct _LINK
  625.     {
  626.     LPLINK PrevLink;
  627.     LPLINK NextLink;
  628.     }  LINK;
  629. //=============================================================================
  630. //  Security Request packet
  631. //=============================================================================
  632. // This structure is used to decode network data and so needs to be packed
  633. #pragma pack(push, 1)
  634. typedef struct _SECURITY_PERMISSION_CHECK
  635.     {
  636.     UINT Version;
  637.     DWORD RandomNumber;
  638.     BYTE MachineName[ 16 ];
  639.     BYTE UserName[ 32 ];
  640.     UINT MacType;
  641.     BYTE PermanentAdapterAddress[ 6 ];
  642.     BYTE CurrentAdapterAddress[ 6 ];
  643.     WCHAR WMachineName[ 16 ];
  644.     WCHAR WUserName[ 32 ];
  645.     }  SECURITY_PERMISSION_CHECK;
  646. typedef SECURITY_PERMISSION_CHECK *LPSECURITY_PERMISSION_CHECK;
  647. typedef SECURITY_PERMISSION_CHECK UNALIGNED * ULPSECURITY_PERMISSION_CHECK;
  648. #define SECURITY_PERMISSION_CHECK_SIZE ( sizeof( SECURITY_PERMISSION_CHECK  ) )
  649. #pragma pack(pop)
  650. //=============================================================================
  651. //  Security Response packet
  652. //=============================================================================
  653. // This structure is used to decode network data and so needs to be packed
  654. #pragma pack(push, 1)
  655. #define MAX_SECURITY_BREACH_REASON_SIZE ( 100 )
  656. #define MAX_SIGNATURE_LENGTH ( 128 )
  657. #define MAX_USER_NAME_LENGTH ( 256 )
  658. typedef struct _SECURITY_PERMISSION_RESPONSE
  659.     {
  660.     UINT Version;
  661.     DWORD RandomNumber;
  662.     BYTE MachineName[ 16 ];
  663.     BYTE Address[ 6 ];
  664.     BYTE UserName[ 256 ];
  665.     BYTE Reason[ 100 ];
  666.     DWORD SignatureLength;
  667.     BYTE Signature[ 128 ];
  668.     }  SECURITY_PERMISSION_RESPONSE;
  669. typedef SECURITY_PERMISSION_RESPONSE *LPSECURITY_PERMISSION_RESPONSE;
  670. typedef SECURITY_PERMISSION_RESPONSE UNALIGNED * ULPSECURITY_PERMISSION_RESPONSE;
  671. #define SECURITY_PERMISSION_RESPONSE_SIZE ( sizeof( SECURITY_PERMISSION_RESPONSE  ) )
  672. #pragma pack(pop)
  673. //=============================================================================
  674. //  Callback type
  675. //=============================================================================
  676. // generic events
  677. #define UPDATE_EVENT_TERMINATE_THREAD ( 0 )
  678. #define UPDATE_EVENT_NETWORK_STATUS ( 0x1 )
  679. // rtc events
  680. #define UPDATE_EVENT_RTC_INTERVAL_ELAPSED ( 0x2 )
  681. #define UPDATE_EVENT_RTC_FRAME_TABLE_FULL ( 0x3 )
  682. #define UPDATE_EVENT_RTC_BUFFER_FULL ( 0x4 )
  683. // delayed events
  684. #define UPDATE_EVENT_TRIGGER_BUFFER_CONTENT ( 0x5 )
  685. #define UPDATE_EVENT_TRIGGER_PATTERN_MATCH ( 0x6 )
  686. #define UPDATE_EVENT_TRIGGER_BUFFER_PATTERN ( 0x7 )
  687. #define UPDATE_EVENT_TRIGGER_PATTERN_BUFFER ( 0x8 )
  688. // transmit events
  689. #define UPDATE_EVENT_TRANSMIT_STATUS ( 0x9 )
  690. // Security events
  691. #define UPDATE_EVENT_SECURITY_BREACH ( 0xa )
  692. // Remote failure event
  693. #define UPDATE_EVENT_REMOTE_FAILURE ( 0xb )
  694. // actions
  695. #define UPDATE_ACTION_TERMINATE_THREAD ( 0 )
  696. #define UPDATE_ACTION_NOTIFY ( 0x1 )
  697. #define UPDATE_ACTION_STOP_CAPTURE ( 0x2 )
  698. #define UPDATE_ACTION_PAUSE_CAPTURE ( 0x3 )
  699. #define UPDATE_ACTION_RTC_BUFFER_SWITCH ( 0x4 )
  700. typedef struct _UPDATE_EVENT
  701.     {
  702.     USHORT Event;
  703.     DWORD Action;
  704.     DWORD Status;
  705.     DWORD Value;
  706.     __int64 TimeStamp;
  707.     DWORD_PTR lpUserContext;
  708.     DWORD_PTR lpReserved;
  709.     UINT FramesDropped;
  710.     /* [switch_is] */ /* [switch_type] */ union 
  711.         {
  712.         /* [default] */ DWORD Reserved;
  713.         /* [case()] */ LPFRAMETABLE lpFrameTable;
  714.         /* [case()] */ DWORD_PTR lpPacketQueue;
  715.         /* [case()] */ SECURITY_PERMISSION_RESPONSE SecurityResponse;
  716.         }  ;
  717.     LPSTATISTICS lpFinalStats;
  718.     }  UPDATE_EVENT;
  719. typedef UPDATE_EVENT *PUPDATE_EVENT;
  720. // note for c++ users:
  721. // the declaration for this callback should be in the public part of the header file:
  722. // static WINAPI DWORD NetworkCallback( UPDATE_EVENT events);
  723. // and the implementation should be, in the protected section of the cpp file:
  724. // DWORD WINAPI ClassName::NetworkCallback( UPDATE_EVENT events) {};
  725. //typedef DWORD (WINAPI *LPNETWORKCALLBACKPROC)( UPDATE_EVENT);
  726. typedef DWORD (WINAPI *LPNETWORKCALLBACKPROC)( UPDATE_EVENT);
  727. //=============================================================================
  728. //  NETWORKSTATUS data structure.
  729. //=============================================================================
  730. typedef struct _NETWORKSTATUS
  731.     {
  732.     DWORD State;
  733.     DWORD Flags;
  734.     }  NETWORKSTATUS;
  735. typedef NETWORKSTATUS *LPNETWORKSTATUS;
  736. #define NETWORKSTATUS_SIZE ( sizeof( NETWORKSTATUS  ) )
  737. #define NETWORKSTATUS_STATE_VOID ( 0 )
  738. #define NETWORKSTATUS_STATE_INIT ( 1 )
  739. #define NETWORKSTATUS_STATE_CAPTURING ( 2 )
  740. #define NETWORKSTATUS_STATE_PAUSED ( 3 )
  741. #define NETWORKSTATUS_FLAGS_TRIGGER_PENDING ( 0x1 )
  742. //=============================================================================
  743. //  BONEPACKET structure.
  744. //=============================================================================
  745. // This structure is used to decode network data and so needs to be packed
  746. #pragma pack(push, 1)
  747. #define BONE_COMMAND_STATION_QUERY_REQUEST ( 0 )
  748. #define BONE_COMMAND_STATION_QUERY_RESPONSE ( 1 )
  749. #define BONE_COMMAND_ALERT ( 2 )
  750. #define BONE_COMMAND_PERMISSION_CHECK ( 3 )
  751. #define BONE_COMMAND_PERMISSION_RESPONSE ( 4 )
  752. #define BONE_COMMAND_SECURITY_MONITOR_EVENT ( 5 )
  753. typedef struct _BONEPACKET
  754.     {
  755.     DWORD Signature;
  756.     BYTE Command;
  757.     BYTE Flags;
  758.     DWORD Reserved;
  759.     WORD Length;
  760.     }  BONEPACKET;
  761. typedef BONEPACKET *LPBONEPACKET;
  762. typedef BONEPACKET UNALIGNED* ULPBONEPACKET;
  763. #define BONEPACKET_SIZE ( sizeof( BONEPACKET  ) )
  764. #pragma pack(pop)
  765. //=============================================================================
  766. //  BONE alert packet.
  767. //=============================================================================
  768. // This structure is used to decode network data and so needs to be packed
  769. #pragma pack(push, 1)
  770. #define ALERT_CODE_BEGIN_TRANSMIT ( 0 )
  771. typedef struct _ALERT
  772.     {
  773.     DWORD AlertCode;
  774.     WCHAR WMachineName[ 16 ];
  775.     WCHAR WUserName[ 32 ];
  776.     union 
  777.         {
  778.         BYTE Pad[ 32 ];
  779.         DWORD nFramesToSend;
  780.         }  ;
  781.     }  ALERT;
  782. typedef ALERT *LPALERT;
  783. #define ALERT_SIZE ( sizeof( ALERT  ) )
  784. #pragma pack(pop)
  785. //=============================================================================
  786. //  BONEPACKET signature.
  787. //=============================================================================
  788. #define MAKE_WORD(l, h)         (((WORD) (l)) | (((WORD) (h)) << 8))
  789. #define MAKE_LONG(l, h)         (((DWORD) (l)) | (((DWORD) (h)) << 16L))
  790. #define MAKE_SIG(a, b, c, d)    MAKE_LONG(MAKE_WORD(a, b), MAKE_WORD(c, d))
  791. #define BONE_PACKET_SIGNATURE   MAKE_SIG('R', 'T', 'S', 'S')
  792. //=============================================================================
  793. //  STATISTICS parameter structure.
  794. //=============================================================================
  795. #define MAX_SESSIONS ( 100 )
  796. #define MAX_STATIONS ( 100 )
  797. typedef struct _STATISTICSPARAM
  798.     {
  799.     DWORD StatisticsSize;
  800.     STATISTICS Statistics;
  801.     DWORD StatisticsTableEntries;
  802.     STATIONSTATS StatisticsTable[ 100 ];
  803.     DWORD SessionTableEntries;
  804.     SESSIONSTATS SessionTable[ 100 ];
  805.     }  STATISTICSPARAM;
  806. typedef STATISTICSPARAM *LPSTATISTICSPARAM;
  807. #define STATISTICSPARAM_SIZE ( sizeof( STATISTICSPARAM  ) )
  808. //=============================================================================
  809. //  Capture file header.
  810. //=============================================================================
  811. // This structure is used to decode file data and so needs to be packed
  812. #pragma pack(push, 1)
  813. #define CAPTUREFILE_VERSION_MAJOR ( 2 )
  814. #define CAPTUREFILE_VERSION_MINOR ( 0 )
  815. #define MakeVersion(Major, Minor)   ((DWORD) MAKEWORD(Minor, Major))
  816. #define GetCurrentVersion()         MakeVersion(CAPTUREFILE_VERSION_MAJOR, CAPTUREFILE_VERSION_MINOR)
  817. #define NETMON_1_0_CAPTUREFILE_SIGNATURE     MAKE_IDENTIFIER('R', 'T', 'S', 'S')
  818. #define NETMON_2_0_CAPTUREFILE_SIGNATURE     MAKE_IDENTIFIER('G', 'M', 'B', 'U')
  819. typedef struct _CAPTUREFILE_HEADER_VALUES
  820.     {
  821.     DWORD Signature;
  822.     BYTE BCDVerMinor;
  823.     BYTE BCDVerMajor;
  824.     WORD MacType;
  825.     SYSTEMTIME TimeStamp;
  826.     DWORD FrameTableOffset;
  827.     DWORD FrameTableLength;
  828.     DWORD UserDataOffset;
  829.     DWORD UserDataLength;
  830.     DWORD CommentDataOffset;
  831.     DWORD CommentDataLength;
  832.     DWORD StatisticsOffset;
  833.     DWORD StatisticsLength;
  834.     DWORD NetworkInfoOffset;
  835.     DWORD NetworkInfoLength;
  836.     DWORD ConversationStatsOffset;
  837.     DWORD ConversationStatsLength;
  838.     }  CAPTUREFILE_HEADER_VALUES;
  839. typedef CAPTUREFILE_HEADER_VALUES *LPCAPTUREFILE_HEADER_VALUES;
  840. #define CAPTUREFILE_HEADER_VALUES_SIZE ( sizeof( CAPTUREFILE_HEADER_VALUES  ) )
  841. #pragma pack(pop)
  842. //=============================================================================
  843. //  Capture file.
  844. //=============================================================================
  845. // This structure is used to decode file data and so needs to be packed
  846. #pragma pack(push, 1)
  847. typedef struct _CAPTUREFILE_HEADER
  848.     {
  849.     union 
  850.         {
  851.         CAPTUREFILE_HEADER_VALUES ActualHeader;
  852.         BYTE Buffer[ 72 ];
  853.         }  ;
  854.     BYTE Reserved[ 56 ];
  855.     }  CAPTUREFILE_HEADER;
  856. typedef CAPTUREFILE_HEADER *LPCAPTUREFILE_HEADER;
  857. #define CAPTUREFILE_HEADER_SIZE ( sizeof( CAPTUREFILE_HEADER  ) )
  858. #pragma pack(pop)
  859. //=============================================================================
  860. //  Stats Frame definitions.
  861. //=============================================================================
  862. // These structures are used to create network data and so need to be packed
  863. #pragma pack(push, 1)
  864. typedef struct _EFRAMEHDR
  865.     {
  866.     BYTE SrcAddress[ 6 ];
  867.     BYTE DstAddress[ 6 ];
  868.     WORD Length;
  869.     BYTE DSAP;
  870.     BYTE SSAP;
  871.     BYTE Control;
  872.     BYTE ProtocolID[ 3 ];
  873.     WORD EtherType;
  874.     }  EFRAMEHDR;
  875. typedef struct _TRFRAMEHDR
  876.     {
  877.     BYTE AC;
  878.     BYTE FC;
  879.     BYTE SrcAddress[ 6 ];
  880.     BYTE DstAddress[ 6 ];
  881.     BYTE DSAP;
  882.     BYTE SSAP;
  883.     BYTE Control;
  884.     BYTE ProtocolID[ 3 ];
  885.     WORD EtherType;
  886.     }  TRFRAMEHDR;
  887. #define DEFAULT_TR_AC ( 0 )
  888. #define DEFAULT_TR_FC ( 0x40 )
  889. #define DEFAULT_SAP ( 0xaa )
  890. #define DEFAULT_CONTROL ( 0x3 )
  891. #define DEFAULT_ETHERTYPE ( 0x8419 )
  892. typedef struct _FDDIFRAMEHDR
  893.     {
  894.     BYTE FC;
  895.     BYTE SrcAddress[ 6 ];
  896.     BYTE DstAddress[ 6 ];
  897.     BYTE DSAP;
  898.     BYTE SSAP;
  899.     BYTE Control;
  900.     BYTE ProtocolID[ 3 ];
  901.     WORD EtherType;
  902.     }  FDDIFRAMEHDR;
  903. #define DEFAULT_FDDI_FC ( 0x10 )
  904. typedef struct _FDDISTATFRAME
  905.     {
  906.     __int64 TimeStamp;
  907.     DWORD FrameLength;
  908.     DWORD nBytesAvail;
  909.     FDDIFRAMEHDR FrameHeader;
  910.     BYTE FrameID[ 4 ];
  911.     DWORD Flags;
  912.     DWORD FrameType;
  913.     WORD StatsDataLen;
  914.     DWORD StatsVersion;
  915.     STATISTICS Statistics;
  916.     }  FDDISTATFRAME;
  917. typedef FDDISTATFRAME *LPFDDISTATFRAME;
  918. typedef FDDISTATFRAME UNALIGNED *ULPFDDISTATFRAME;
  919. #define FDDISTATFRAME_SIZE ( sizeof( FDDISTATFRAME  ) )
  920. typedef struct _ATMFRAMEHDR
  921.     {
  922.     BYTE SrcAddress[ 6 ];
  923.     BYTE DstAddress[ 6 ];
  924.     WORD Vpi;
  925.     WORD Vci;
  926.     }  ATMFRAMEHDR;
  927. typedef struct _ATMSTATFRAME
  928.     {
  929.     __int64 TimeStamp;
  930.     DWORD FrameLength;
  931.     DWORD nBytesAvail;
  932.     ATMFRAMEHDR FrameHeader;
  933.     BYTE FrameID[ 4 ];
  934.     DWORD Flags;
  935.     DWORD FrameType;
  936.     WORD StatsDataLen;
  937.     DWORD StatsVersion;
  938.     STATISTICS Statistics;
  939.     }  ATMSTATFRAME;
  940. typedef ATMSTATFRAME *LPATMSTATFRAME;
  941. typedef ATMSTATFRAME UNALIGNED *ULPATMSTATFRAME;
  942. #define ATMSTATFRAME_SIZE ( sizeof( ATMSTATFRAME  ) )
  943. typedef struct _TRSTATFRAME
  944.     {
  945.     __int64 TimeStamp;
  946.     DWORD FrameLength;
  947.     DWORD nBytesAvail;
  948.     TRFRAMEHDR FrameHeader;
  949.     BYTE FrameID[ 4 ];
  950.     DWORD Flags;
  951.     DWORD FrameType;
  952.     WORD StatsDataLen;
  953.     DWORD StatsVersion;
  954.     STATISTICS Statistics;
  955.     }  TRSTATFRAME;
  956. typedef TRSTATFRAME *LPTRSTATFRAME;
  957. typedef TRSTATFRAME UNALIGNED *ULPTRSTATFRAME;
  958. #define TRSTATFRAME_SIZE ( sizeof( TRSTATFRAME  ) )
  959. typedef struct _ESTATFRAME
  960.     {
  961.     __int64 TimeStamp;
  962.     DWORD FrameLength;
  963.     DWORD nBytesAvail;
  964.     EFRAMEHDR FrameHeader;
  965.     BYTE FrameID[ 4 ];
  966.     DWORD Flags;
  967.     DWORD FrameType;
  968.     WORD StatsDataLen;
  969.     DWORD StatsVersion;
  970.     STATISTICS Statistics;
  971.     }  ESTATFRAME;
  972. typedef ESTATFRAME *LPESTATFRAME;
  973. typedef ESTATFRAME UNALIGNED *ULPESTATFRAME;
  974. #define ESTATFRAME_SIZE ( sizeof( ESTATFRAME  ) )
  975. #define STATISTICS_VERSION_1_0 ( 0 )
  976. #define STATISTICS_VERSION_2_0 ( 0x20 )
  977. #define MAX_STATSFRAME_SIZE ( sizeof( TRSTATFRAME  ) )
  978. #define STATS_FRAME_TYPE ( 103 )
  979. #pragma pack(pop)
  980. //=============================================================================
  981. //=============================================================================
  982. //  (NMEvent.h)
  983. //=============================================================================
  984. //=============================================================================
  985. // NMCOLUMNTYPE
  986. typedef /* [public][public][public][public][public][public] */ 
  987. enum __MIDL___MIDL_itf_netmon_0000_0006
  988.     { NMCOLUMNTYPE_UINT8 = 0,
  989. NMCOLUMNTYPE_SINT8 = NMCOLUMNTYPE_UINT8 + 1,
  990. NMCOLUMNTYPE_UINT16 = NMCOLUMNTYPE_SINT8 + 1,
  991. NMCOLUMNTYPE_SINT16 = NMCOLUMNTYPE_UINT16 + 1,
  992. NMCOLUMNTYPE_UINT32 = NMCOLUMNTYPE_SINT16 + 1,
  993. NMCOLUMNTYPE_SINT32 = NMCOLUMNTYPE_UINT32 + 1,
  994. NMCOLUMNTYPE_FLOAT64 = NMCOLUMNTYPE_SINT32 + 1,
  995. NMCOLUMNTYPE_FRAME = NMCOLUMNTYPE_FLOAT64 + 1,
  996. NMCOLUMNTYPE_YESNO = NMCOLUMNTYPE_FRAME + 1,
  997. NMCOLUMNTYPE_ONOFF = NMCOLUMNTYPE_YESNO + 1,
  998. NMCOLUMNTYPE_TRUEFALSE = NMCOLUMNTYPE_ONOFF + 1,
  999. NMCOLUMNTYPE_MACADDR = NMCOLUMNTYPE_TRUEFALSE + 1,
  1000. NMCOLUMNTYPE_IPXADDR = NMCOLUMNTYPE_MACADDR + 1,
  1001. NMCOLUMNTYPE_IPADDR = NMCOLUMNTYPE_IPXADDR + 1,
  1002. NMCOLUMNTYPE_VARTIME = NMCOLUMNTYPE_IPADDR + 1,
  1003. NMCOLUMNTYPE_STRING = NMCOLUMNTYPE_VARTIME + 1
  1004.     }  NMCOLUMNTYPE;
  1005. // NMCOLUMNVARIANT
  1006. typedef struct _NMCOLUMNVARIANT
  1007.     {
  1008.     NMCOLUMNTYPE Type;
  1009.     union 
  1010.         {
  1011.         BYTE Uint8Val;
  1012.         char Sint8Val;
  1013.         WORD Uint16Val;
  1014.         short Sint16Val;
  1015.         DWORD Uint32Val;
  1016.         long Sint32Val;
  1017.         DOUBLE Float64Val;
  1018.         DWORD FrameVal;
  1019.         BOOL YesNoVal;
  1020.         BOOL OnOffVal;
  1021.         BOOL TrueFalseVal;
  1022.         BYTE MACAddrVal[ 6 ];
  1023.         IPX_ADDR IPXAddrVal;
  1024.         DWORD IPAddrVal;
  1025.         DOUBLE VarTimeVal;
  1026.         LPCSTR pStringVal;
  1027.         }  Value;
  1028.     }  NMCOLUMNVARIANT;
  1029. // COLUMNINFO
  1030. typedef struct _NMCOLUMNINFO
  1031.     {
  1032.     LPSTR szColumnName;
  1033.     NMCOLUMNVARIANT VariantData;
  1034.     }  NMCOLUMNINFO;
  1035. typedef NMCOLUMNINFO *PNMCOLUMNINFO;
  1036. // JTYPE
  1037. typedef LPSTR JTYPE;
  1038. // EVENTDATA
  1039. typedef struct _NMEVENTDATA
  1040.     {
  1041.     LPSTR pszReserved;
  1042.     BYTE Version;
  1043.     DWORD EventIdent;
  1044.     DWORD Flags;
  1045.     DWORD Severity;
  1046.     BYTE NumColumns;
  1047.     LPSTR szSourceName;
  1048.     LPSTR szEventName;
  1049.     LPSTR szDescription;
  1050.     LPSTR szMachine;
  1051.     JTYPE Justification;
  1052.     LPSTR szUrl;
  1053.     SYSTEMTIME SysTime;
  1054.     /* [size_is] */ NMCOLUMNINFO Column[ 1 ];
  1055.     }  NMEVENTDATA;
  1056. typedef NMEVENTDATA *PNMEVENTDATA;
  1057. // EVENT FLAGS
  1058. #define NMEVENTFLAG_MONITOR ( 0 )
  1059. #define NMEVENTFLAG_EXPERT ( 0x1 )
  1060. #define NMEVENTFLAG_DO_NOT_DISPLAY_SEVERITY ( 0x80000000 )
  1061. #define NMEVENTFLAG_DO_NOT_DISPLAY_SOURCE ( 0x40000000 )
  1062. #define NMEVENTFLAG_DO_NOT_DISPLAY_EVENT_NAME ( 0x20000000 )
  1063. #define NMEVENTFLAG_DO_NOT_DISPLAY_DESCRIPTION ( 0x10000000 )
  1064. #define NMEVENTFLAG_DO_NOT_DISPLAY_MACHINE ( 0x8000000 )
  1065. #define NMEVENTFLAG_DO_NOT_DISPLAY_TIME ( 0x4000000 )
  1066. #define NMEVENTFLAG_DO_NOT_DISPLAY_DATE ( 0x2000000 )
  1067. //#define NMEVENTFLAG_DO_NOT_DISPLAY_FIXED_COLUMNS (NMEVENTFLAG_DO_NOT_DISPLAY_SEVERITY   | 
  1068. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_SOURCE     | 
  1069. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_EVENT_NAME | 
  1070. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_DESCRIPTION| 
  1071. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_MACHINE    | 
  1072. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_TIME       | 
  1073. //                                                  NMEVENTFLAG_DO_NOT_DISPLAY_DATE )
  1074. #define NMEVENTFLAG_DO_NOT_DISPLAY_FIXED_COLUMNS ( 0xfe000000 )
  1075. enum _NMEVENT_SEVERITIES
  1076.     { NMEVENT_SEVERITY_INFORMATIONAL = 0,
  1077. NMEVENT_SEVERITY_WARNING = NMEVENT_SEVERITY_INFORMATIONAL + 1,
  1078. NMEVENT_SEVERITY_STRONG_WARNING = NMEVENT_SEVERITY_WARNING + 1,
  1079. NMEVENT_SEVERITY_ERROR = NMEVENT_SEVERITY_STRONG_WARNING + 1,
  1080. NMEVENT_SEVERITY_SEVERE_ERROR = NMEVENT_SEVERITY_ERROR + 1,
  1081. NMEVENT_SEVERITY_CRITICAL_ERROR = NMEVENT_SEVERITY_SEVERE_ERROR + 1
  1082.     } ;
  1083. //=============================================================================
  1084. //=============================================================================
  1085. //  (NMmcs.h)
  1086. //=============================================================================
  1087. //=============================================================================
  1088. //=============================================================================
  1089. // Monitor status values returned from call to GetMonitorStatus
  1090. //=============================================================================
  1091. #define MONITOR_STATUS_ERROR ( -1 )
  1092. #define MONITOR_STATUS_ENABLED ( 4 )
  1093. #define MONITOR_STATUS_CONFIGURED ( 5 )
  1094. #define MONITOR_STATUS_RUNNING ( 6 )
  1095. #define MONITOR_STATUS_RUNNING_FAULTED ( 9 )
  1096. #define MONITOR_STATUS_DELETED ( 10 )
  1097. #define MCS_COMMAND_ENABLE ( 13 )
  1098. #define MCS_COMMAND_DISABLE ( 14 )
  1099. #define MCS_COMMAND_SET_CONFIG ( 15 )
  1100. #define MCS_COMMAND_GET_CONFIG ( 16 )
  1101. #define MCS_COMMAND_START ( 17 )
  1102. #define MCS_COMMAND_STOP ( 18 )
  1103. #define MCS_COMMAND_CONNECT ( 19 )
  1104. #define MCS_COMMAND_RENAME ( 20 )
  1105. #define MCS_COMMAND_REFRESH_STATUS ( 21 )
  1106. //=============================================================================
  1107. // Monitor Creation Flags
  1108. //=============================================================================
  1109. #define MCS_CREATE_ONE_PER_NETCARD ( 0x1 )
  1110. #define MCS_CREATE_CONFIGS_BY_DEFAULT ( 0x10 )
  1111. #define MCS_CREATE_PMODE_NOT_REQUIRED ( 0x100 )
  1112. typedef __int64 HNMMONITOR;
  1113. //=============================================================================
  1114. // NPP_INFO
  1115. //=============================================================================
  1116. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0008
  1117.     {
  1118.     DWORD ListIndex;
  1119.     /* [string] */ char *ShortName;
  1120.     /* [string] */ char *LongName;
  1121.     }  NPP_INFO;
  1122. typedef NPP_INFO *PNPP_INFO;
  1123. //=============================================================================
  1124. // MONITOR_INFO
  1125. //=============================================================================
  1126. typedef struct _MONITOR_INFO
  1127.     {
  1128.     HNMMONITOR MonitorInstance;
  1129.     HNMMONITOR MonitorClass;
  1130.     DWORD CreateFlags;
  1131.     DWORD Status;
  1132.     DWORD ListIndex;
  1133.     /* [string] */ char *pDescription;
  1134.     /* [string] */ char *pScript;
  1135.     /* [string] */ char *pConfiguration;
  1136.     /* [string] */ char *pName;
  1137.     }  MONITOR_INFO;
  1138. typedef MONITOR_INFO *PMONITOR_INFO;
  1139. //=============================================================================
  1140. // MONITOR_MESSAGE
  1141. //=============================================================================
  1142. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0009
  1143.     {
  1144.     HNMMONITOR Monitor;
  1145.     DWORD ListIndex;
  1146.     /* [string] */ char *pszMessage;
  1147.     }  MONITOR_MESSAGE;
  1148. typedef MONITOR_MESSAGE *PMONITOR_MESSAGE;
  1149. //=============================================================================
  1150. // COMMAND_FAILED_EVENT
  1151. //=============================================================================
  1152. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0010
  1153.     {
  1154.     HNMMONITOR Monitor;
  1155.     DWORD Command;
  1156.     DWORD FailureCode;
  1157.     DWORD ListIndex;
  1158.     DWORD Status;
  1159.     }  COMMAND_FAILED_EVENT;
  1160. typedef COMMAND_FAILED_EVENT *PCOMMAND_FAILED_EVENT;
  1161. //=============================================================================
  1162. // MONITOR_STATUS_EVENT
  1163. //=============================================================================
  1164. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0011
  1165.     {
  1166.     HNMMONITOR Monitor;
  1167.     DWORD LastCommand;
  1168.     DWORD ListIndex;
  1169.     DWORD Status;
  1170.     DWORD FramesProcessed;
  1171.     }  MONITOR_STATUS_EVENT;
  1172. typedef MONITOR_STATUS_EVENT *PMONITOR_STATUS_EVENT;
  1173. //=============================================================================
  1174. // MCS_CLIENT
  1175. //=============================================================================
  1176. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0012
  1177.     {
  1178.     /* [string] */ OLECHAR *pwszName;
  1179.     FILETIME FileTime;
  1180.     DWORD pXMCS;
  1181.     BOOL bCurrent;
  1182.     }  MCS_CLIENT;
  1183. typedef MCS_CLIENT *PMCS_CLIENT;
  1184. //=============================================================================
  1185. //=============================================================================
  1186. // (Finder.h)
  1187. //=============================================================================
  1188. //=============================================================================
  1189. //=============================================================================
  1190. // Structures use by NPPs, the Finder, and monitors
  1191. //=============================================================================
  1192. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0013
  1193.     {
  1194.     DWORD dwNumBlobs;
  1195.     /* [size_is] */ HBLOB hBlobs[ 1 ];
  1196.     }  BLOB_TABLE;
  1197. typedef BLOB_TABLE *PBLOB_TABLE;
  1198. typedef /* [public][public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0014
  1199.     {
  1200.     DWORD size;
  1201.     /* [size_is] */ BYTE *pBytes;
  1202.     }  MBLOB;
  1203. typedef /* [public][public] */ struct __MIDL___MIDL_itf_netmon_0000_0015
  1204.     {
  1205.     DWORD dwNumBlobs;
  1206.     /* [size_is] */ MBLOB mBlobs[ 1 ];
  1207.     }  MBLOB_TABLE;
  1208. typedef MBLOB_TABLE *PMBLOB_TABLE;
  1209. //=============================================================================
  1210. // Functions called by monitors, tools, netmon
  1211. //=============================================================================
  1212. DWORD _cdecl GetNPPBlobTable(HBLOB          hFilterBlob,  
  1213.                       PBLOB_TABLE*   ppBlobTable);
  1214. DWORD _cdecl GetNPPBlobFromUI(HWND          hwnd,
  1215.                        HBLOB         hFilterBlob,
  1216.                        HBLOB*        phBlob);          
  1217. DWORD _cdecl GetNPPBlobFromUIExU(HWND          hwnd,
  1218.                           HBLOB         hFilterBlob,
  1219.                           HBLOB*        phBlob,
  1220.                           char*         szHelpFileName);          
  1221. DWORD _cdecl SelectNPPBlobFromTable( HWND   hwnd,
  1222.                               PBLOB_TABLE    pBlobTable,
  1223.                               HBLOB*         hBlob);
  1224. DWORD _cdecl SelectNPPBlobFromTableExU( HWND   hwnd,
  1225.                                  PBLOB_TABLE    pBlobTable,
  1226.                                  HBLOB*         hBlob,
  1227.                                  char*          szHelpFileName);
  1228. //=============================================================================
  1229. // Helper functions provided by the Finder
  1230. //=============================================================================
  1231. __inline DWORD BLOB_TABLE_SIZE(DWORD dwNumBlobs)
  1232. {
  1233.     return (DWORD) (sizeof(BLOB_TABLE)+dwNumBlobs*sizeof(HBLOB));
  1234. }
  1235. __inline PBLOB_TABLE  AllocBlobTable(DWORD dwNumBlobs)
  1236. {
  1237.     DWORD size = BLOB_TABLE_SIZE(dwNumBlobs);
  1238.     return (PBLOB_TABLE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
  1239. }
  1240. __inline DWORD MBLOB_TABLE_SIZE(DWORD dwNumBlobs)
  1241. {
  1242.     return (DWORD) (sizeof(MBLOB_TABLE)+dwNumBlobs*sizeof(MBLOB));
  1243. }
  1244. __inline PMBLOB_TABLE  AllocMBlobTable(DWORD dwNumBlobs)
  1245. {
  1246.     DWORD size = MBLOB_TABLE_SIZE(dwNumBlobs);
  1247.     return (PMBLOB_TABLE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
  1248. }
  1249. //=============================================================================
  1250. // Functions provided by NPPs, called by the Finder
  1251. //=============================================================================
  1252. // For NPP's that can return a Blob table without additional configuration.
  1253. DWORD _cdecl GetNPPBlobs(PBLOB_TABLE*       ppBlobTable);
  1254. typedef DWORD (_cdecl FAR* BLOBSPROC) (PBLOB_TABLE*       ppBlobTable);
  1255. // For NPP's that need additional information to return a Blob table.
  1256. DWORD _cdecl GetConfigBlob(HBLOB*      phBlob);
  1257. typedef DWORD (_cdecl FAR* GETCFGBLOB) (HBLOB, HBLOB*);
  1258. typedef DWORD (_cdecl FAR* CFGPROC) (HWND               hwnd,
  1259.                               HBLOB              SpecialBlob,
  1260.                               PBLOB_TABLE*       ppBlobTable);
  1261. //=============================================================================
  1262. // Handy functions
  1263. //=============================================================================
  1264. BOOL  _cdecl FilterNPPBlob(HBLOB hBlob, HBLOB FilterBlob);
  1265. BOOL  _cdecl RaiseNMEvent(HINSTANCE    hInstance,
  1266.                    WORD         EventType, 
  1267.                    DWORD        EventID,
  1268.                    WORD         nStrings, 
  1269.                    const char** aInsertStrs,
  1270.                    LPVOID       lpvData,
  1271.                    DWORD        dwDataSize);
  1272. //=============================================================================
  1273. //=============================================================================
  1274. //  (NMmonitor.h)
  1275. //=============================================================================
  1276. //=============================================================================
  1277. #ifdef __cplusplus
  1278. struct MONITOR;
  1279. typedef MONITOR* PMONITOR;
  1280. typedef void (WINAPI* MCSALERTPROC) (PMONITOR pMonitor, TCHAR* alert);
  1281. //****************************************************************************
  1282. // Our exported Monitor functions, that must be supported by ALL monitors 
  1283. //****************************************************************************
  1284. // Create the Monitor, function called "CreateMonitor". The
  1285. // argument is a potential configuration structure
  1286. typedef DWORD (WINAPI* CREATEMONITOR)(PMONITOR*     ppMonitor, 
  1287.                                       HBLOB         hInputNPPBlob,
  1288.                                       char*         pConfiguration,
  1289.                                       MCSALERTPROC  McsAlertProc);
  1290. // Destroy the Monitor, function called "DestroyMonitor"
  1291. typedef DWORD (WINAPI* DESTROYMONITOR)(PMONITOR);
  1292. // We need the monitor's NPP filter blob: "GetMonitorFilter"
  1293. typedef DWORD (WINAPI* GETMONITORFILTER) (HBLOB* pFilterBlob);
  1294. // Get the monitor configuration "GetMonitorConfig"
  1295. // The pMonitor argument can not be null
  1296. typedef DWORD (WINAPI* GETMONITORCONFIG) (PMONITOR pMonitor,
  1297.                                           char**   ppScript,
  1298.                                           char**   ppConfiguration);
  1299. // Set the monitor configuration "SetMonitorConfig"
  1300. // The pMonitor argument can not be null
  1301. typedef DWORD (WINAPI* SETMONITORCONFIG) (PMONITOR pMonitor, 
  1302.                                           char* pConfiguration);
  1303. // The monitor's connect function: "ConnectMonitor"
  1304. typedef DWORD (WINAPI* CONNECTMONITOR) (PMONITOR pMonitor);
  1305. // The monitor's start function: "StartMonitor"
  1306. typedef DWORD (WINAPI* STARTMONITOR) (PMONITOR pMonitor, char** ppResponse);
  1307. // The monitor's stop function: "StopMonitor"
  1308. typedef DWORD (WINAPI* STOPMONITOR) (PMONITOR pMonitor);
  1309. // Get the monitor status: "GetMonitorStatus"
  1310. typedef DWORD (WINAPI* GETMONITORSTATUS) (PMONITOR pMonitor, DWORD* pStatus);
  1311. //****************************************************************************
  1312. // Optional function that allows the monitor dll to do specific functions
  1313. // prior to the creation of any monitors. "OneTimeSetup"
  1314. typedef DWORD (WINAPI* ONETIMESETUP) (void);
  1315. //****************************************************************************
  1316. //****************************************************************************
  1317. // Optional function that provides a description of the monitor
  1318. //****************************************************************************
  1319. // For current display porpoises, we could use this: "DescribeSelf"
  1320. typedef DWORD (WINAPI* DESCRIBESELF) (const char** ppName,
  1321.                                       const char** ppDescription);
  1322. #endif // __cplusplus
  1323. //=============================================================================
  1324. //=============================================================================
  1325. //  (NMSupp.h)
  1326. //=============================================================================
  1327. //=============================================================================
  1328. #ifndef __cplusplus
  1329. #ifndef try
  1330. #define try                         __try
  1331. #endif // try
  1332. #ifndef except
  1333. #define except                      __except
  1334. #endif // except
  1335. #endif // __cplusplus
  1336. //=============================================================================
  1337. //  Windows version constants.
  1338. //=============================================================================
  1339. #define WINDOWS_VERSION_UNKNOWN ( 0 )
  1340. #define WINDOWS_VERSION_WIN32S ( 1 )
  1341. #define WINDOWS_VERSION_WIN32C ( 2 )
  1342. #define WINDOWS_VERSION_WIN32 ( 3 )
  1343. //=============================================================================
  1344. //  Frame masks.
  1345. //=============================================================================
  1346. #define FRAME_MASK_ETHERNET ( ( BYTE  )~0x1 )
  1347. #define FRAME_MASK_TOKENRING ( ( BYTE  )~0x80 )
  1348. #define FRAME_MASK_FDDI ( ( BYTE  )~0x1 )
  1349. //=============================================================================
  1350. //  ACCESSRIGHTS
  1351. //=============================================================================
  1352. typedef 
  1353. enum _ACCESSRIGHTS
  1354.     { AccessRightsNoAccess = 0,
  1355. AccessRightsMonitoring = AccessRightsNoAccess + 1,
  1356. AccessRightsUserAccess = AccessRightsMonitoring + 1,
  1357. AccessRightsAllAccess = AccessRightsUserAccess + 1
  1358.     }  ACCESSRIGHTS;
  1359. typedef ACCESSRIGHTS *PACCESSRIGHTS;
  1360. typedef LPVOID HPASSWORD;
  1361. #define HANDLE_TYPE_PASSWORD            MAKE_IDENTIFIER('P', 'W', 'D', '$')
  1362. //=============================================================================
  1363. //  Object heap type.
  1364. //=============================================================================
  1365. typedef LPVOID HOBJECTHEAP;
  1366. //=============================================================================
  1367. //  Object cleanup procedure.
  1368. //=============================================================================
  1369. typedef VOID (WINAPI *OBJECTPROC)(HOBJECTHEAP, LPVOID);
  1370. //=============================================================================
  1371. //  Network Monitor timers.
  1372. //=============================================================================
  1373. typedef struct _TIMER *HTIMER;
  1374. typedef VOID (WINAPI *BHTIMERPROC)(LPVOID);
  1375. HTIMER WINAPI BhSetTimer(BHTIMERPROC TimerProc, LPVOID InstData, DWORD TimeOut);
  1376. VOID   WINAPI BhKillTimer(HTIMER hTimer);
  1377. //=============================================================================
  1378. //  Network Monitor global error API.
  1379. //=============================================================================
  1380. DWORD  WINAPI BhGetLastError(VOID);
  1381. DWORD  WINAPI BhSetLastError(DWORD Error);
  1382. //=============================================================================
  1383. //  Object manager function prototypes.
  1384. //=============================================================================
  1385. HOBJECTHEAP WINAPI CreateObjectHeap(DWORD ObjectSize, OBJECTPROC ObjectProc);
  1386. HOBJECTHEAP WINAPI DestroyObjectHeap(HOBJECTHEAP hObjectHeap);
  1387. LPVOID      WINAPI AllocObject(HOBJECTHEAP hObjectHeap);
  1388. LPVOID      WINAPI FreeObject(HOBJECTHEAP hObjectHeap, LPVOID ObjectMemory);
  1389. DWORD       WINAPI GrowObjectHeap(HOBJECTHEAP hObjectHeap, DWORD nObjects);
  1390. DWORD       WINAPI GetObjectHeapSize(HOBJECTHEAP hObjectHeap);
  1391. VOID        WINAPI PurgeObjectHeap(HOBJECTHEAP hObjectHeap);
  1392. //=============================================================================
  1393. //  Memory functions.
  1394. //=============================================================================
  1395. LPVOID     WINAPI AllocMemory(SIZE_T size);
  1396. LPVOID     WINAPI ReallocMemory(LPVOID ptr, SIZE_T NewSize);
  1397. VOID       WINAPI FreeMemory(LPVOID ptr);
  1398. VOID       WINAPI TestMemory(LPVOID ptr);
  1399. SIZE_T     WINAPI MemorySize(LPVOID ptr);
  1400. HANDLE     WINAPI MemoryHandle(LPBYTE ptr);
  1401. //=============================================================================
  1402. //  Password API's.
  1403. //=============================================================================
  1404. HPASSWORD    WINAPI CreatePassword(LPSTR password);
  1405. VOID         WINAPI DestroyPassword(HPASSWORD hPassword);
  1406. ACCESSRIGHTS WINAPI ValidatePassword(HPASSWORD hPassword);
  1407. //=============================================================================
  1408. //  EXPRESSION API's
  1409. //=============================================================================
  1410. LPEXPRESSION         WINAPI InitializeExpression(LPEXPRESSION Expression);
  1411. LPPATTERNMATCH       WINAPI InitializePattern(LPPATTERNMATCH Pattern, LPVOID ptr, DWORD offset, DWORD length);
  1412. LPEXPRESSION         WINAPI AndExpression(LPEXPRESSION Expression, LPPATTERNMATCH Pattern);
  1413. LPEXPRESSION         WINAPI OrExpression(LPEXPRESSION Expression, LPPATTERNMATCH Pattern);
  1414. LPPATTERNMATCH       WINAPI NegatePattern(LPPATTERNMATCH Pattern);
  1415. LPADDRESSTABLE       WINAPI AdjustOperatorPrecedence(LPADDRESSTABLE AddressTable);
  1416. LPADDRESS            WINAPI NormalizeAddress(LPADDRESS Address);
  1417. LPADDRESSTABLE       WINAPI NormalizeAddressTable(LPADDRESSTABLE AddressTable);
  1418. //=============================================================================
  1419. //  MISC. API's
  1420. //=============================================================================
  1421. DWORD                WINAPI BhGetWindowsVersion(VOID);
  1422. BOOL                 WINAPI IsDaytona(VOID);
  1423. VOID                 _cdecl dprintf(LPSTR format, ...);
  1424. //=============================================================================
  1425. //=============================================================================
  1426. //  (BHTypes.h)
  1427. //=============================================================================
  1428. //=============================================================================
  1429. //=============================================================================
  1430. //  Unaligned base type definitions.
  1431. //=============================================================================
  1432. typedef VOID        UNALIGNED   *ULPVOID;
  1433. typedef BYTE        UNALIGNED   *ULPBYTE;
  1434. typedef WORD        UNALIGNED   *ULPWORD;
  1435. typedef DWORD       UNALIGNED   *ULPDWORD;
  1436. typedef CHAR        UNALIGNED   *ULPSTR;
  1437. typedef SYSTEMTIME  UNALIGNED   *ULPSYSTEMTIME;
  1438. //=============================================================================
  1439. //  Handle definitions.
  1440. //=============================================================================
  1441. typedef struct _PARSER *HPARSER;
  1442. typedef struct _CAPFRAMEDESC *HFRAME;
  1443. typedef struct _CAPTURE *HCAPTURE;
  1444. typedef struct _FILTER *HFILTER;
  1445. typedef struct _ADDRESSDB *HADDRESSDB;
  1446. typedef struct _PROTOCOL *HPROTOCOL;
  1447. typedef DWORD_PTR HPROPERTY;
  1448. typedef HPROTOCOL *LPHPROTOCOL;
  1449. //=============================================================================
  1450. //  GetTableSize() -- The following macro is used to calculate the actual
  1451. //                    length of Network Monitor variable-length table structures.
  1452. //
  1453. //  EXAMPLE:
  1454. //
  1455. //  GetTableSize(PROTOCOLTABLESIZE, 
  1456. //               ProtocolTable->nProtocols, 
  1457. //               sizeof(HPROTOCOL))
  1458. //=============================================================================
  1459. #define GetTableSize(TableBaseSize, nElements, ElementSize) ((TableBaseSize) + ((nElements) * (ElementSize)))
  1460. //=============================================================================
  1461. //  Object type identifiers.
  1462. //=============================================================================
  1463. typedef DWORD OBJECTTYPE;
  1464. #ifndef MAKE_IDENTIFIER
  1465. #define MAKE_IDENTIFIER(a, b, c, d)     ((DWORD) MAKELONG(MAKEWORD(a, b), MAKEWORD(c, d)))
  1466. #endif // MAKE_IDENTIFIER
  1467. #define HANDLE_TYPE_INVALID             MAKE_IDENTIFIER(-1, -1, -1, -1)
  1468. #define HANDLE_TYPE_CAPTURE             MAKE_IDENTIFIER('C', 'A', 'P', '$')
  1469. #define HANDLE_TYPE_PARSER              MAKE_IDENTIFIER('P', 'S', 'R', '$')
  1470. #define HANDLE_TYPE_ADDRESSDB           MAKE_IDENTIFIER('A', 'D', 'R', '$')
  1471. #define HANDLE_TYPE_PROTOCOL            MAKE_IDENTIFIER('P', 'R', 'T', '$')
  1472. #define HANDLE_TYPE_BUFFER              MAKE_IDENTIFIER('B', 'U', 'F', '$')
  1473. //=============================================================================
  1474. //  Network Monitor constant definitions.
  1475. //=============================================================================
  1476. #define INLINE  __inline
  1477. #define BHAPI   WINAPI
  1478. #define MAX_NAME_LENGTH ( 16 )
  1479. #define MAX_ADDR_LENGTH ( 6 )
  1480. //=============================================================================
  1481. //  Ethernet type (ETYPE) constant definitions.
  1482. //=============================================================================
  1483. #define ETYPE_LOOP ( 0x9000 )
  1484. #define ETYPE_3COM_NETMAP1 ( 0x9001 )
  1485. #define ETYPE_3COM_NETMAP2 ( 0x9002 )
  1486. #define ETYPE_IBM_RT ( 0x80d5 )
  1487. #define ETYPE_NETWARE ( 0x8137 )
  1488. #define ETYPE_XNS1 ( 0x600 )
  1489. #define ETYPE_XNS2 ( 0x807 )
  1490. #define ETYPE_3COM_NBP0 ( 0x3c00 )
  1491. #define ETYPE_3COM_NBP1 ( 0x3c01 )
  1492. #define ETYPE_3COM_NBP2 ( 0x3c02 )
  1493. #define ETYPE_3COM_NBP3 ( 0x3c03 )
  1494. #define ETYPE_3COM_NBP4 ( 0x3c04 )
  1495. #define ETYPE_3COM_NBP5 ( 0x3c05 )
  1496. #define ETYPE_3COM_NBP6 ( 0x3c06 )
  1497. #define ETYPE_3COM_NBP7 ( 0x3c07 )
  1498. #define ETYPE_3COM_NBP8 ( 0x3c08 )
  1499. #define ETYPE_3COM_NBP9 ( 0x3c09 )
  1500. #define ETYPE_3COM_NBP10 ( 0x3c0a )
  1501. #define ETYPE_IP ( 0x800 )
  1502. #define ETYPE_ARP1 ( 0x806 )
  1503. #define ETYPE_ARP2 ( 0x807 )
  1504. #define ETYPE_RARP ( 0x8035 )
  1505. #define ETYPE_TRLR0 ( 0x1000 )
  1506. #define ETYPE_TRLR1 ( 0x1001 )
  1507. #define ETYPE_TRLR2 ( 0x1002 )
  1508. #define ETYPE_TRLR3 ( 0x1003 )
  1509. #define ETYPE_TRLR4 ( 0x1004 )
  1510. #define ETYPE_TRLR5 ( 0x1005 )
  1511. #define ETYPE_PUP ( 0x200 )
  1512. #define ETYPE_PUP_ARP ( 0x201 )
  1513. #define ETYPE_APPLETALK_ARP ( 0x80f3 )
  1514. #define ETYPE_APPLETALK_LAP ( 0x809b )
  1515. #define ETYPE_SNMP ( 0x814c )
  1516. //=============================================================================
  1517. //  LLC (802.2) SAP constant definitions.
  1518. //=============================================================================
  1519. #define SAP_SNAP ( 0xaa )
  1520. #define SAP_BPDU ( 0x42 )
  1521. #define SAP_IBM_NM ( 0xf4 )
  1522. #define SAP_IBM_NETBIOS ( 0xf0 )
  1523. #define SAP_SNA1 ( 0x4 )
  1524. #define SAP_SNA2 ( 0x5 )
  1525. #define SAP_SNA3 ( 0x8 )
  1526. #define SAP_SNA4 ( 0xc )
  1527. #define SAP_NETWARE1 ( 0x10 )
  1528. #define SAP_NETWARE2 ( 0xe0 )
  1529. #define SAP_NETWARE3 ( 0xfe )
  1530. #define SAP_IP ( 0x6 )
  1531. #define SAP_X25 ( 0x7e )
  1532. #define SAP_RPL1 ( 0xf8 )
  1533. #define SAP_RPL2 ( 0xfc )
  1534. #define SAP_UB ( 0xfa )
  1535. #define SAP_XNS ( 0x80 )
  1536. //=============================================================================
  1537. //  Property constants
  1538. //=============================================================================
  1539. // data types
  1540. #define PROP_TYPE_VOID ( 0 )
  1541. #define PROP_TYPE_SUMMARY ( 0x1 )
  1542. #define PROP_TYPE_BYTE ( 0x2 )
  1543. #define PROP_TYPE_WORD ( 0x3 )
  1544. #define PROP_TYPE_DWORD ( 0x4 )
  1545. #define PROP_TYPE_LARGEINT ( 0x5 )
  1546. #define PROP_TYPE_ADDR ( 0x6 )
  1547. #define PROP_TYPE_TIME ( 0x7 )
  1548. #define PROP_TYPE_STRING ( 0x8 )
  1549. #define PROP_TYPE_IP_ADDRESS ( 0x9 )
  1550. #define PROP_TYPE_IPX_ADDRESS ( 0xa )
  1551. #define PROP_TYPE_BYTESWAPPED_WORD ( 0xb )
  1552. #define PROP_TYPE_BYTESWAPPED_DWORD ( 0xc )
  1553. #define PROP_TYPE_TYPED_STRING ( 0xd )
  1554. #define PROP_TYPE_RAW_DATA ( 0xe )
  1555. #define PROP_TYPE_COMMENT ( 0xf )
  1556. #define PROP_TYPE_SRCFRIENDLYNAME ( 0x10 )
  1557. #define PROP_TYPE_DSTFRIENDLYNAME ( 0x11 )
  1558. #define PROP_TYPE_TOKENRING_ADDRESS ( 0x12 )
  1559. #define PROP_TYPE_FDDI_ADDRESS ( 0x13 )
  1560. #define PROP_TYPE_ETHERNET_ADDRESS ( 0x14 )
  1561. #define PROP_TYPE_OBJECT_IDENTIFIER ( 0x15 )
  1562. #define PROP_TYPE_VINES_IP_ADDRESS ( 0x16 )
  1563. #define PROP_TYPE_VAR_LEN_SMALL_INT ( 0x17 )
  1564. #define PROP_TYPE_ATM_ADDRESS ( 0x18 )
  1565. #define PROP_TYPE_1394_ADDRESS ( 0x19 )
  1566. // data qualifiers
  1567. #define PROP_QUAL_NONE ( 0 )
  1568. #define PROP_QUAL_RANGE ( 0x1 )
  1569. #define PROP_QUAL_SET ( 0x2 )
  1570. #define PROP_QUAL_BITFIELD ( 0x3 )
  1571. #define PROP_QUAL_LABELED_SET ( 0x4 )
  1572. #define PROP_QUAL_LABELED_BITFIELD ( 0x8 )
  1573. #define PROP_QUAL_CONST ( 0x9 )
  1574. #define PROP_QUAL_FLAGS ( 0xa )
  1575. #define PROP_QUAL_ARRAY ( 0xb )
  1576. //=============================================================================
  1577. //  LARGEINT structure defined in winnt.h
  1578. //=============================================================================
  1579. typedef LARGE_INTEGER *LPLARGEINT;
  1580. typedef LARGE_INTEGER UNALIGNED *ULPLARGEINT;
  1581. //=============================================================================
  1582. //  Range structure.
  1583. //=============================================================================
  1584. typedef struct _RANGE
  1585.     {
  1586.     DWORD MinValue;
  1587.     DWORD MaxValue;
  1588.     }  RANGE;
  1589. typedef RANGE *LPRANGE;
  1590. //=============================================================================
  1591. //  LABELED_BYTE structure
  1592. //=============================================================================
  1593. typedef struct _LABELED_BYTE
  1594.     {
  1595.     BYTE Value;
  1596.     LPSTR Label;
  1597.     }  LABELED_BYTE;
  1598. typedef LABELED_BYTE *LPLABELED_BYTE;
  1599. //=============================================================================
  1600. //  LABELED_WORD structure
  1601. //=============================================================================
  1602. typedef struct _LABELED_WORD
  1603.     {
  1604.     WORD Value;
  1605.     LPSTR Label;
  1606.     }  LABELED_WORD;
  1607. typedef LABELED_WORD *LPLABELED_WORD;
  1608. //=============================================================================
  1609. //  LABELED_DWORD structure
  1610. //=============================================================================
  1611. typedef struct _LABELED_DWORD
  1612.     {
  1613.     DWORD Value;
  1614.     LPSTR Label;
  1615.     }  LABELED_DWORD;
  1616. typedef LABELED_DWORD *LPLABELED_DWORD;
  1617. //=============================================================================
  1618. //  LABELED_LARGEINT structure
  1619. //=============================================================================
  1620. typedef struct _LABELED_LARGEINT
  1621.     {
  1622.     LARGE_INTEGER Value;
  1623.     LPSTR Label;
  1624.     }  LABELED_LARGEINT;
  1625. typedef LABELED_LARGEINT *LPLABELED_LARGEINT;
  1626. //=============================================================================
  1627. //  LABELED_SYSTEMTIME structure
  1628. //=============================================================================
  1629. typedef struct _LABELED_SYSTEMTIME
  1630.     {
  1631.     SYSTEMTIME Value;
  1632.     LPSTR Label;
  1633.     }  LABELED_SYSTEMTIME;
  1634. typedef LABELED_SYSTEMTIME *LPLABELED_SYSTEMTIME;
  1635. //=============================================================================
  1636. //  LABELED_BIT structure
  1637. //=============================================================================
  1638. // BitNumber starts at 0, up to 256 bits.
  1639. typedef struct _LABELED_BIT
  1640.     {
  1641.     BYTE BitNumber;
  1642.     LPSTR LabelOff;
  1643.     LPSTR LabelOn;
  1644.     }  LABELED_BIT;
  1645. typedef LABELED_BIT *LPLABELED_BIT;
  1646. //=============================================================================
  1647. //  TYPED_STRING structure
  1648. //=============================================================================
  1649. #define TYPED_STRING_NORMAL ( 1 )
  1650. #define TYPED_STRING_UNICODE ( 2 )
  1651. #define TYPED_STRING_EXFLAG ( 1 )
  1652. // Typed Strings are always Ex, so to actually Ex we set fStringEx and put the Ex data in Byte
  1653. typedef struct _TYPED_STRING
  1654. {
  1655.     BYTE    StringType:7;
  1656.     BYTE    fStringEx:1;
  1657.     LPSTR   lpString;
  1658.     BYTE    Byte[0];
  1659. } TYPED_STRING;
  1660. typedef TYPED_STRING *LPTYPED_STRING;
  1661. //=============================================================================
  1662. //  OBJECT_IDENTIFIER structure
  1663. //=============================================================================
  1664. typedef struct _OBJECT_IDENTIFIER
  1665.     {
  1666.     DWORD Length;
  1667.     LPDWORD lpIdentifier;
  1668.     }  OBJECT_IDENTIFIER;
  1669. typedef OBJECT_IDENTIFIER *LPOBJECT_IDENTIFIER;
  1670. //=============================================================================
  1671. //  Set structure.
  1672. //=============================================================================
  1673. typedef struct _SET
  1674.     {
  1675.     DWORD nEntries;
  1676.     union 
  1677.         {
  1678.         LPVOID lpVoidTable;
  1679.         LPBYTE lpByteTable;
  1680.         LPWORD lpWordTable;
  1681.         LPDWORD lpDwordTable;
  1682.         LPLARGEINT lpLargeIntTable;
  1683.         LPSYSTEMTIME lpSystemTimeTable;
  1684.         LPLABELED_BYTE lpLabeledByteTable;
  1685.         LPLABELED_WORD lpLabeledWordTable;
  1686.         LPLABELED_DWORD lpLabeledDwordTable;
  1687.         LPLABELED_LARGEINT lpLabeledLargeIntTable;
  1688.         LPLABELED_SYSTEMTIME lpLabeledSystemTimeTable;
  1689.         LPLABELED_BIT lpLabeledBit;
  1690.         }  ;
  1691.     }  SET;
  1692. typedef SET *LPSET;
  1693. //=============================================================================
  1694. //  String table.
  1695. //=============================================================================
  1696. typedef struct _STRINGTABLE
  1697. {
  1698.     DWORD           nStrings;
  1699.     LPSTR           String[0];
  1700. } STRINGTABLE;
  1701. typedef STRINGTABLE *LPSTRINGTABLE;
  1702. #define STRINGTABLE_SIZE    sizeof(STRINGTABLE)
  1703. //=============================================================================
  1704. //  RECOGNIZEDATA structure.
  1705. //
  1706. //  This structure to keep track of the start of each recognized protocol.
  1707. //=============================================================================
  1708. typedef struct _RECOGNIZEDATA
  1709.     {
  1710.     WORD ProtocolID;
  1711.     WORD nProtocolOffset;
  1712.     LPVOID InstData;
  1713.     }  RECOGNIZEDATA;
  1714. typedef RECOGNIZEDATA *LPRECOGNIZEDATA;
  1715. //=============================================================================
  1716. //  RECOGNIZEDATATABLE structure.
  1717. //
  1718. //  This structure to keep track of the start of each RECOGNIZEDATA structure
  1719. //=============================================================================
  1720. typedef struct _RECOGNIZEDATATABLE
  1721. {
  1722.     WORD            nRecognizeDatas;    //... number of RECOGNIZEDATA structures
  1723.     RECOGNIZEDATA   RecognizeData[0];   //... array of RECOGNIZEDATA structures follows
  1724. } RECOGNIZEDATATABLE;
  1725. typedef RECOGNIZEDATATABLE * LPRECOGNIZEDATATABLE;
  1726. //=============================================================================
  1727. //  Property information structure.
  1728. //=============================================================================
  1729. typedef struct _PROPERTYINFO
  1730.     {
  1731.     HPROPERTY hProperty;
  1732.     DWORD Version;
  1733.     LPSTR Label;
  1734.     LPSTR Comment;
  1735.     BYTE DataType;
  1736.     BYTE DataQualifier;
  1737.     union 
  1738.         {
  1739.         LPVOID lpExtendedInfo;
  1740.         LPRANGE lpRange;
  1741.         LPSET lpSet;
  1742.         DWORD Bitmask;
  1743.         DWORD Value;
  1744.         }  ;
  1745.     WORD FormatStringSize;
  1746.     LPVOID InstanceData;
  1747.     }  PROPERTYINFO;
  1748. typedef PROPERTYINFO *LPPROPERTYINFO;
  1749. #define PROPERTYINFO_SIZE ( sizeof( PROPERTYINFO  ) )
  1750. //=============================================================================
  1751. //  Property instance Extended structure.
  1752. //=============================================================================
  1753. typedef struct _PROPERTYINSTEX
  1754. {
  1755.     WORD        Length;         //... length of raw data in frame
  1756.     WORD        LengthEx;       //... number of bytes following
  1757.     ULPVOID     lpData;         //... pointer to raw data in frame
  1758.     union
  1759.     {
  1760.         BYTE            Byte[];     //... table of bytes follows
  1761.         WORD            Word[];     //... table of words follows
  1762.         DWORD           Dword[];    //... table of Dwords follows
  1763.         LARGE_INTEGER   LargeInt[]; //... table of LARGEINT structures to follow
  1764.         SYSTEMTIME      SysTime[];  //... table of SYSTEMTIME structures follows
  1765.         TYPED_STRING    TypedString;//... a typed_string that may have extended data
  1766.     };
  1767. } PROPERTYINSTEX;
  1768. typedef PROPERTYINSTEX *LPPROPERTYINSTEX;
  1769. typedef PROPERTYINSTEX UNALIGNED *ULPPROPERTYINSTEX;
  1770. #define PROPERTYINSTEX_SIZE     sizeof(PROPERTYINSTEX)
  1771. //=============================================================================
  1772. //  Property instance structure.
  1773. //=============================================================================
  1774. typedef struct _PROPERTYINST
  1775. {
  1776.     LPPROPERTYINFO          lpPropertyInfo;     // pointer to property info
  1777.     LPSTR                   szPropertyText;     // pointer to string description
  1778.     union
  1779.     {
  1780.         LPVOID              lpData;             // pointer to data
  1781.         ULPBYTE             lpByte;             // bytes
  1782.         ULPWORD             lpWord;             // words
  1783.         ULPDWORD            lpDword;            // dwords
  1784.         ULPLARGEINT         lpLargeInt;         // LargeInt
  1785.         ULPSYSTEMTIME       lpSysTime;          // pointer to SYSTEMTIME structures
  1786.         LPPROPERTYINSTEX    lpPropertyInstEx;   // pointer to propertyinstex (if DataLength = -1)
  1787.     };
  1788.     WORD                    DataLength;         // length of data, or flag for propertyinstex struct
  1789.     WORD                    Level   : 4  ;      // level information        ............1111
  1790.     WORD                    HelpID  : 12 ;      // context ID for helpfile  111111111111....
  1791.                      //    ---------------
  1792.                      // total of 16 bits == 1 WORD == DWORD ALIGNED structure
  1793.                             // Interpretation Flags:  Flags that define attach time information to the
  1794.                             // interpretation of the property.  For example, in RPC, the client can be
  1795.                             // Intel format and the server can be non-Intel format... thus the property
  1796.                             // database cannot describe the property at database creation time.
  1797.     DWORD                   IFlags;
  1798. } PROPERTYINST;
  1799. typedef PROPERTYINST *LPPROPERTYINST;
  1800. #define PROPERTYINST_SIZE   sizeof(PROPERTYINST)
  1801. // Flags passed at AttachPropertyInstance and AttachPropertyInstanceEx time in the IFlags field:
  1802. // flag for error condition ...............1
  1803. #define IFLAG_ERROR ( 0x1 )
  1804. // is the WORD or DWORD byte non-Intel format at attach time?
  1805. #define IFLAG_SWAPPED ( 0x2 )
  1806. // is the STRING UNICODE at attach time?
  1807. #define IFLAG_UNICODE ( 0x4 )
  1808. //=============================================================================
  1809. //  Property instance table structure.
  1810. //=============================================================================
  1811. typedef struct _PROPERTYINSTTABLE
  1812.     {
  1813.     WORD nPropertyInsts;
  1814.     WORD nPropertyInstIndex;
  1815.     }  PROPERTYINSTTABLE;
  1816. typedef PROPERTYINSTTABLE *LPPROPERTYINSTTABLE;
  1817. #define PROPERTYINSTTABLE_SIZE ( sizeof( PROPERTYINSTTABLE  ) )
  1818. //=============================================================================
  1819. //  Property table structure.
  1820. //=============================================================================
  1821. typedef struct _PROPERTYTABLE
  1822. {
  1823.     LPVOID                  lpFormatBuffer;             //... Opaque.                       (PRIVATE)
  1824.     DWORD                   FormatBufferLength;         //... Opaque.                       (PRIVATE)
  1825.     DWORD                   nTotalPropertyInsts;        //... total number of propertyinstances in array
  1826.     LPPROPERTYINST          lpFirstPropertyInst;        //... array of property instances
  1827.     BYTE                    nPropertyInstTables;        //... total PropertyIndexTables following
  1828.     PROPERTYINSTTABLE       PropertyInstTable[0];       //... array of propertyinstance index table structures
  1829. } PROPERTYTABLE;
  1830. typedef PROPERTYTABLE *LPPROPERTYTABLE;
  1831. #define PROPERTYTABLE_SIZE sizeof(PROPERTYTABLE)
  1832. //=============================================================================
  1833. //  Protocol entry points.
  1834. //=============================================================================
  1835. typedef VOID    (WINAPI *REGISTER)(HPROTOCOL);
  1836. typedef VOID    (WINAPI *DEREGISTER)(HPROTOCOL);
  1837. typedef LPBYTE  (WINAPI *RECOGNIZEFRAME)(HFRAME, ULPBYTE, ULPBYTE, DWORD, DWORD, HPROTOCOL, DWORD, LPDWORD, LPHPROTOCOL, PDWORD_PTR);
  1838. typedef LPBYTE  (WINAPI *ATTACHPROPERTIES)(HFRAME, ULPBYTE, ULPBYTE, DWORD, DWORD, HPROTOCOL, DWORD, DWORD_PTR);
  1839. typedef DWORD   (WINAPI *FORMATPROPERTIES)(HFRAME, ULPBYTE, ULPBYTE, DWORD, LPPROPERTYINST);
  1840. //=============================================================================
  1841. //  Protocol entry point structure.
  1842. //=============================================================================
  1843. typedef struct _ENTRYPOINTS
  1844. {
  1845.     REGISTER            Register;               //... Protocol Register() entry point.
  1846.     DEREGISTER          Deregister;             //... Protocol Deregister() entry point.
  1847.     RECOGNIZEFRAME      RecognizeFrame;         //... Protocol RecognizeFrame() entry point.
  1848.     ATTACHPROPERTIES    AttachProperties;       //... Protocol AttachProperties() entry point.
  1849.     FORMATPROPERTIES    FormatProperties;       //... Protocol FormatProperties() entry point.
  1850. } ENTRYPOINTS;
  1851. typedef ENTRYPOINTS *LPENTRYPOINTS;
  1852. #define ENTRYPOINTS_SIZE sizeof(ENTRYPOINTS)
  1853. //=============================================================================
  1854. //  Property database structure.
  1855. //=============================================================================
  1856. typedef struct _PROPERTYDATABASE
  1857. {
  1858.     DWORD           nProperties;                 //... Number of properties in database.
  1859.     LPPROPERTYINFO  PropertyInfo[0];             //... Array of property info pointers.
  1860. } PROPERTYDATABASE;
  1861. #define PROPERTYDATABASE_SIZE   sizeof(PROPERTYDATABASE)
  1862. typedef PROPERTYDATABASE *LPPROPERTYDATABASE;
  1863. //=============================================================================
  1864. //  Protocol info structure (PUBLIC portion of HPROTOCOL).
  1865. //=============================================================================
  1866. typedef struct _PROTOCOLINFO
  1867. {
  1868.     DWORD               ProtocolID;             //... Prootocol ID of owning protocol.
  1869.     LPPROPERTYDATABASE  PropertyDatabase;       //... Property database.
  1870.     BYTE                ProtocolName[16];       //... Protocol name.
  1871.     BYTE                HelpFile[16];           //... Optional helpfile name.
  1872.     BYTE                Comment[128];           //... Comment describing protocol.
  1873. } PROTOCOLINFO;
  1874. typedef PROTOCOLINFO *LPPROTOCOLINFO;
  1875. #define PROTOCOLINFO_SIZE   sizeof(PROTOCOLINFO)
  1876. //=============================================================================
  1877. //  Protocol Table.
  1878. //=============================================================================
  1879. typedef struct _PROTOCOLTABLE
  1880.     {
  1881.     DWORD nProtocols;
  1882.     HPROTOCOL hProtocol[ 1 ];
  1883.     }  PROTOCOLTABLE;
  1884. typedef PROTOCOLTABLE *LPPROTOCOLTABLE;
  1885. #define PROTOCOLTABLE_SIZE ( sizeof( PROTOCOLTABLE  ) - sizeof( HPROTOCOL  ) )
  1886. #define PROTOCOLTABLE_ACTUAL_SIZE(p) GetTableSize(PROTOCOLTABLE_SIZE, (p)->nProtocols, sizeof(HPROTOCOL))
  1887. //=============================================================================
  1888. //  AddressInfo structure
  1889. //=============================================================================
  1890. #define SORT_BYADDRESS ( 0 )
  1891. #define SORT_BYNAME ( 1 )
  1892. #define PERMANENT_NAME ( 0x100 )
  1893. typedef struct _ADDRESSINFO
  1894. {
  1895.     ADDRESS        Address;
  1896.     WCHAR          Name[MAX_NAME_SIZE];
  1897.     DWORD          Flags;
  1898.     LPVOID         lpAddressInstData;
  1899. } ADDRESSINFO;
  1900. typedef struct _ADDRESSINFO *LPADDRESSINFO;
  1901. #define ADDRESSINFO_SIZE    sizeof(ADDRESSINFO)
  1902. //=============================================================================
  1903. //  AddressInfoTable
  1904. //=============================================================================
  1905. typedef struct _ADDRESSINFOTABLE
  1906. {
  1907.     DWORD         nAddressInfos;
  1908.     LPADDRESSINFO lpAddressInfo[0];
  1909. } ADDRESSINFOTABLE;
  1910. typedef ADDRESSINFOTABLE *LPADDRESSINFOTABLE;
  1911. #define ADDRESSINFOTABLE_SIZE   sizeof(ADDRESSINFOTABLE)
  1912. //=============================================================================
  1913. //  callback procedures.
  1914. //=============================================================================
  1915. typedef DWORD (WINAPI *FILTERPROC)(HCAPTURE, HFRAME, LPVOID);
  1916. //=============================================================================
  1917. //=============================================================================
  1918. //  (NMErr.h)
  1919. //=============================================================================
  1920. //=============================================================================
  1921. //  The operation succeeded.
  1922. #define NMERR_SUCCESS ( 0 )
  1923. //  An error occured creating a memory-mapped file.
  1924. #define NMERR_MEMORY_MAPPED_FILE_ERROR ( 1 )
  1925. //  The handle to a filter is invalid.
  1926. #define NMERR_INVALID_HFILTER ( 2 )
  1927. //  Capturing has already been started.
  1928. #define NMERR_CAPTURING ( 3 )
  1929. //  Capturing has not been started.
  1930. #define NMERR_NOT_CAPTURING ( 4 )
  1931. //  The are no frames available.
  1932. #define NMERR_NO_MORE_FRAMES ( 5 )
  1933. //  The buffer is too small to complete the operation.
  1934. #define NMERR_BUFFER_TOO_SMALL ( 6 )
  1935. //  No protocol was able to recognize the frame.
  1936. #define NMERR_FRAME_NOT_RECOGNIZED ( 7 )
  1937. //  The file already exists.
  1938. #define NMERR_FILE_ALREADY_EXISTS ( 8 )
  1939. //  A needed device driver was not found or is not loaded.
  1940. #define NMERR_DRIVER_NOT_FOUND ( 9 )
  1941. //  This address aready exists in the database.
  1942. #define NMERR_ADDRESS_ALREADY_EXISTS ( 10 )
  1943. //  The frame handle is invalid.
  1944. #define NMERR_INVALID_HFRAME ( 11 )
  1945. //  The protocol handle is invalid.
  1946. #define NMERR_INVALID_HPROTOCOL ( 12 )
  1947. //  The property handle is invalid.
  1948. #define NMERR_INVALID_HPROPERTY ( 13 )
  1949. //  The the object has been locked.  
  1950. #define NMERR_LOCKED ( 14 )
  1951. //  A pop operation was attempted on an empty stack.
  1952. #define NMERR_STACK_EMPTY ( 15 )
  1953. //  A push operation was attempted on an full stack.
  1954. #define NMERR_STACK_OVERFLOW ( 16 )
  1955. //  There are too many protocols active.
  1956. #define NMERR_TOO_MANY_PROTOCOLS ( 17 )
  1957. //  The file was not found.
  1958. #define NMERR_FILE_NOT_FOUND ( 18 )
  1959. //  No memory was available.  Shut down windows to free up resources.
  1960. #define NMERR_OUT_OF_MEMORY ( 19 )
  1961. //  The capture is already in the paused state.
  1962. #define NMERR_CAPTURE_PAUSED ( 20 )
  1963. //  There are no buffers available or present.
  1964. #define NMERR_NO_BUFFERS ( 21 )
  1965. //  There are already buffers present.
  1966. #define NMERR_BUFFERS_ALREADY_EXIST ( 22 )
  1967. //  The object is not locked.
  1968. #define NMERR_NOT_LOCKED ( 23 )
  1969. //  A integer type was out of range.
  1970. #define NMERR_OUT_OF_RANGE ( 24 )
  1971. //  An object was locked too many times.
  1972. #define NMERR_LOCK_NESTING_TOO_DEEP ( 25 )
  1973. //  A parser failed to load.
  1974. #define NMERR_LOAD_PARSER_FAILED ( 26 )
  1975. //  A parser failed to unload.
  1976. #define NMERR_UNLOAD_PARSER_FAILED ( 27 )
  1977. //  The address database handle is invalid.
  1978. #define NMERR_INVALID_HADDRESSDB ( 28 )
  1979. //  The MAC address was not found in the database.
  1980. #define NMERR_ADDRESS_NOT_FOUND ( 29 )
  1981. //  The network software was not found in the system.
  1982. #define NMERR_NETWORK_NOT_PRESENT ( 30 )
  1983. //  There is no property database for a protocol.
  1984. #define NMERR_NO_PROPERTY_DATABASE ( 31 )
  1985. //  A property was not found in the database.
  1986. #define NMERR_PROPERTY_NOT_FOUND ( 32 )
  1987. //  The property database handle is in valid.
  1988. #define NMERR_INVALID_HPROPERTYDB ( 33 )
  1989. //  The protocol has not been enabled.
  1990. #define NMERR_PROTOCOL_NOT_ENABLED ( 34 )
  1991. //  The protocol DLL could not be found.
  1992. #define NMERR_PROTOCOL_NOT_FOUND ( 35 )
  1993. //  The parser DLL is not valid.
  1994. #define NMERR_INVALID_PARSER_DLL ( 36 )
  1995. //  There are no properties attached.
  1996. #define NMERR_NO_ATTACHED_PROPERTIES ( 37 )
  1997. //  There are no frames in the buffer.
  1998. #define NMERR_NO_FRAMES ( 38 )
  1999. //  The capture file format is not valid.
  2000. #define NMERR_INVALID_FILE_FORMAT ( 39 )
  2001. //  The OS could not create a temporary file.
  2002. #define NMERR_COULD_NOT_CREATE_TEMPFILE ( 40 )
  2003. //  There is not enough MS-DOS memory available.
  2004. #define NMERR_OUT_OF_DOS_MEMORY ( 41 )
  2005. //  There are no protocols enabled.
  2006. #define NMERR_NO_PROTOCOLS_ENABLED ( 42 )
  2007. //  The MAC type is invalid or unsupported.
  2008. #define NMERR_UNKNOWN_MACTYPE ( 46 )
  2009. //  There is no routing information present in the MAC frame.
  2010. #define NMERR_ROUTING_INFO_NOT_PRESENT ( 47 )
  2011. //  The network handle is invalid.
  2012. #define NMERR_INVALID_HNETWORK ( 48 )
  2013. //  The network is already open.
  2014. #define NMERR_NETWORK_ALREADY_OPENED ( 49 )
  2015. //  The network is not open.
  2016. #define NMERR_NETWORK_NOT_OPENED ( 50 )
  2017. //  The frame was not found in the buffer.
  2018. #define NMERR_FRAME_NOT_FOUND ( 51 )
  2019. //  There are no handles available.
  2020. #define NMERR_NO_HANDLES ( 53 )
  2021. //  The network ID is invalid.
  2022. #define NMERR_INVALID_NETWORK_ID ( 54 )
  2023. //  The capture handle is invalid.
  2024. #define NMERR_INVALID_HCAPTURE ( 55 )
  2025. //  The protocol has already been enabled.
  2026. #define NMERR_PROTOCOL_ALREADY_ENABLED ( 56 )
  2027. //  The filter expression is invalid.
  2028. #define NMERR_FILTER_INVALID_EXPRESSION ( 57 )
  2029. //  A transmit error occured.
  2030. #define NMERR_TRANSMIT_ERROR ( 58 )
  2031. //  The buffer handle is invalid.
  2032. #define NMERR_INVALID_HBUFFER ( 59 )
  2033. //  The specified data is unknown or invalid.
  2034. #define NMERR_INVALID_DATA ( 60 )
  2035. //  The MS-DOS/NDIS 2.0 network driver is not loaded.
  2036. #define NMERR_MSDOS_DRIVER_NOT_LOADED ( 61 )
  2037. //  The Windows VxD/NDIS 3.0 network driver is not loaded.
  2038. #define NMERR_WINDOWS_DRIVER_NOT_LOADED ( 62 )
  2039. //  The MS-DOS/NDIS 2.0 driver had an init-time failure.
  2040. #define NMERR_MSDOS_DRIVER_INIT_FAILURE ( 63 )
  2041. //  The Windows/NDIS 3.0 driver had an init-time failure.
  2042. #define NMERR_WINDOWS_DRIVER_INIT_FAILURE ( 64 )
  2043. //  The network driver is busy and cannot handle requests.
  2044. #define NMERR_NETWORK_BUSY ( 65 )
  2045. //  The capture is not paused.
  2046. #define NMERR_CAPTURE_NOT_PAUSED ( 66 )
  2047. //  The frame/packet length is not valid.
  2048. #define NMERR_INVALID_PACKET_LENGTH ( 67 )
  2049. //  An internal exception occured.
  2050. #define NMERR_INTERNAL_EXCEPTION ( 69 )
  2051. //  The MAC driver does not support promiscious mode.
  2052. #define NMERR_PROMISCUOUS_MODE_NOT_SUPPORTED ( 70 )
  2053. //  The MAC driver failed to open.
  2054. #define NMERR_MAC_DRIVER_OPEN_FAILURE ( 71 )
  2055. //  The protocol went off the end of the frame.
  2056. #define NMERR_RUNAWAY_PROTOCOL ( 72 )
  2057. //  An asynchronous operation is still pending.
  2058. #define NMERR_PENDING ( 73 )
  2059. //  Access is denied.
  2060. #define NMERR_ACCESS_DENIED ( 74 )
  2061. //  The password handle is invalid.
  2062. #define NMERR_INVALID_HPASSWORD ( 75 )
  2063. //  A bad parameter was detected.
  2064. #define NMERR_INVALID_PARAMETER ( 76 )
  2065. //  An error occured reading the file.
  2066. #define NMERR_FILE_READ_ERROR ( 77 )
  2067. //  An error occured writing to the file.
  2068. #define NMERR_FILE_WRITE_ERROR ( 78 )
  2069. //  The protocol has not been registered
  2070. #define NMERR_PROTOCOL_NOT_REGISTERED ( 79 )
  2071. //  The frame does not contain an IP address.
  2072. #define NMERR_IP_ADDRESS_NOT_FOUND ( 80 )
  2073. //  The transmit request was cancelled.
  2074. #define NMERR_TRANSMIT_CANCELLED ( 81 )
  2075. //  The operation cannot be performed on a capture with 1 or more locked frames.
  2076. #define NMERR_LOCKED_FRAMES ( 82 )
  2077. //  A cancel transmit request was submitted but there were no transmits pending.
  2078. #define NMERR_NO_TRANSMITS_PENDING ( 83 )
  2079. //  Path not found.
  2080. #define NMERR_PATH_NOT_FOUND ( 84 )
  2081. //  A windows error has occured.
  2082. #define NMERR_WINDOWS_ERROR ( 85 )
  2083. //  The handle to the frame has no frame number.
  2084. #define NMERR_NO_FRAME_NUMBER ( 86 )
  2085. //  The frame is not associated with any capture.
  2086. #define NMERR_FRAME_HAS_NO_CAPTURE ( 87 )
  2087. //  The frame is already associated with a capture.
  2088. #define NMERR_FRAME_ALREADY_HAS_CAPTURE ( 88 )
  2089. //  The NAL is not remotable.
  2090. #define NMERR_NAL_IS_NOT_REMOTE ( 89 )
  2091. //  The API is not supported
  2092. #define NMERR_NOT_SUPPORTED ( 90 )
  2093. //  Network Monitor should discard the current frame. 
  2094. //  This error code is only used during a filtered SaveCapture() API call.
  2095. #define NMERR_DISCARD_FRAME ( 91 )
  2096. //  Network Monitor should cancel the current save. 
  2097. //  This error code is only used during a filtered SaveCapture() API call.
  2098. #define NMERR_CANCEL_SAVE_CAPTURE ( 92 )
  2099. //  The connection to the remote machine has been lost
  2100. #define NMERR_LOST_CONNECTION ( 93 )
  2101. //  The media/mac type is not valid.
  2102. #define NMERR_INVALID_MEDIA_TYPE ( 94 )
  2103. //  The Remote Agent is currently in use
  2104. #define NMERR_AGENT_IN_USE ( 95 )
  2105. //  The request has timed out
  2106. #define NMERR_TIMEOUT ( 96 )
  2107. //  The remote agent has been disconnected
  2108. #define NMERR_DISCONNECTED ( 97 )
  2109. //  A timer required for operation failed creation
  2110. #define NMERR_SETTIMER_FAILED ( 98 )
  2111. //  A network error occured.
  2112. #define NMERR_NETWORK_ERROR ( 99 )
  2113. //  Frame callback procedure is not valid
  2114. #define NMERR_INVALID_FRAMESPROC ( 100 )
  2115. //  Capture type specified is unknown
  2116. #define NMERR_UNKNOWN_CAPTURETYPE ( 101 )
  2117. // The NPP is not connected to a network.
  2118. #define NMERR_NOT_CONNECTED ( 102 )
  2119. // The NPP is already connected to a network.
  2120. #define NMERR_ALREADY_CONNECTED ( 103 )
  2121. // The registry tag does not indicate a known configuration.
  2122. #define NMERR_INVALID_REGISTRY_CONFIGURATION ( 104 )
  2123. // The NPP is currently configured for delayed capturing.
  2124. #define NMERR_DELAYED ( 105 )
  2125. // The NPP is not currently configured for delayed capturing.
  2126. #define NMERR_NOT_DELAYED ( 106 )
  2127. // The NPP is currently configured for real time capturing.
  2128. #define NMERR_REALTIME ( 107 )
  2129. // The NPP is not currently configured for real time capturing.
  2130. #define NMERR_NOT_REALTIME ( 108 )
  2131. // The NPP is currently configured for stats only capturing.
  2132. #define NMERR_STATS_ONLY ( 109 )
  2133. // The NPP is not currently configured for stats only capturing.
  2134. #define NMERR_NOT_STATS_ONLY ( 110 )
  2135. // The NPP is currently configured for transmitting.
  2136. #define NMERR_TRANSMIT ( 111 )
  2137. // The NPP is not currently configured for transmitting.
  2138. #define NMERR_NOT_TRANSMIT ( 112 )
  2139. // The NPP is currently transmitting
  2140. #define NMERR_TRANSMITTING ( 113 )
  2141. // The specified capture file hard disk is not local
  2142. #define NMERR_DISK_NOT_LOCAL_FIXED ( 114 )
  2143. // Could not create the default capture directory on the given disk
  2144. #define NMERR_COULD_NOT_CREATE_DIRECTORY ( 115 )
  2145. // The default capture directory was not set in the registry:
  2146. // HKEY_LOCAL_MACHINESystemCurrentControlSetServicesnmParametersCapturePath
  2147. #define NMERR_NO_DEFAULT_CAPTURE_DIRECTORY ( 116 )
  2148. //  The capture file is an uplevel version that this netmon does not understand
  2149. #define NMERR_UPLEVEL_CAPTURE_FILE ( 117 )
  2150. //  An expert failed to load.
  2151. #define NMERR_LOAD_EXPERT_FAILED ( 118 )
  2152. //  An expert failed to report its EXPERT_INFO structs.
  2153. #define NMERR_EXPERT_REPORT_FAILED ( 119 )
  2154. //  Registry API call failed.
  2155. #define NMERR_REG_OPERATION_FAILED ( 120 )
  2156. //  Registry API call failed.
  2157. #define NMERR_NO_DLLS_FOUND ( 121 )
  2158. //  There are no conversation stats, they were not asked for.
  2159. #define NMERR_NO_CONVERSATION_STATS ( 122 )
  2160. //  We have received a security response packet from a security monitor.
  2161. #define NMERR_SECURITY_BREACH_CAPTURE_DELETED ( 123 )
  2162. //  The given frame failed the display filter.
  2163. #define NMERR_FRAME_FAILED_FILTER ( 124 )
  2164. //  Netmon wants the Expert to stop running.
  2165. #define NMERR_EXPERT_TERMINATE ( 125 )
  2166. //  Netmon needs the remote machine to be a server.
  2167. #define NMERR_REMOTE_NOT_A_SERVER ( 126 )
  2168. //  Netmon needs the remote machine to be a server.
  2169. #define NMERR_REMOTE_VERSION_OUTOFSYNC ( 127 )
  2170. //  The supplied group is an invalid handle
  2171. #define NMERR_INVALID_EXPERT_GROUP ( 128 )
  2172. //  The supplied expert name cannot be found
  2173. #define NMERR_INVALID_EXPERT_NAME ( 129 )
  2174. //  The supplied expert name cannot be found
  2175. #define NMERR_INVALID_EXPERT_HANDLE ( 130 )
  2176. //  The supplied group name already exists
  2177. #define NMERR_GROUP_NAME_ALREADY_EXISTS ( 131 )
  2178. //  The supplied group name is invalid
  2179. #define NMERR_INVALID_GROUP_NAME ( 132 )
  2180. //  The supplied Expert is already in the group.  
  2181. #define NMERR_EXPERT_ALREADY_IN_GROUP ( 133 )
  2182. //  The Expert cannot be deleted from the group because it is not in the group
  2183. #define NMERR_EXPERT_NOT_IN_GROUP ( 134 )
  2184. //  The COM object has not been initialized
  2185. #define NMERR_NOT_INITIALIZED ( 135 )
  2186. //  Cannot perform function to Root group
  2187. #define NMERR_INVALID_GROUP_ROOT ( 136 )
  2188. //  Potential data structure mismatch between NdisNpp and Driver.
  2189. #define NMERR_BAD_VERSION ( 137 )
  2190. // The NPP is currently configured for ESP capturing.
  2191. #define NMERR_ESP ( 138 )
  2192. // The NPP is not currently configured for ESP capturing.
  2193. #define NMERR_NOT_ESP ( 139 )
  2194. //=============================================================================
  2195. // Blob Errors
  2196. //=============================================================================
  2197. #define NMERR_BLOB_NOT_INITIALIZED ( 1000 )
  2198. #define NMERR_INVALID_BLOB ( 1001 )
  2199. #define NMERR_UPLEVEL_BLOB ( 1002 )
  2200. #define NMERR_BLOB_ENTRY_ALREADY_EXISTS ( 1003 )
  2201. #define NMERR_BLOB_ENTRY_DOES_NOT_EXIST ( 1004 )
  2202. #define NMERR_AMBIGUOUS_SPECIFIER ( 1005 )
  2203. #define NMERR_BLOB_OWNER_NOT_FOUND ( 1006 )
  2204. #define NMERR_BLOB_CATEGORY_NOT_FOUND ( 1007 )
  2205. #define NMERR_UNKNOWN_CATEGORY ( 1008 )
  2206. #define NMERR_UNKNOWN_TAG ( 1009 )
  2207. #define NMERR_BLOB_CONVERSION_ERROR ( 1010 )
  2208. #define NMERR_ILLEGAL_TRIGGER ( 1011 )
  2209. #define NMERR_BLOB_STRING_INVALID ( 1012 )
  2210. //=============================================================================
  2211. // FINDER errors
  2212. //=============================================================================
  2213. #define NMERR_UNABLE_TO_LOAD_LIBRARY ( 1013 )
  2214. #define NMERR_UNABLE_TO_GET_PROCADDR ( 1014 )
  2215. #define NMERR_CLASS_NOT_REGISTERED ( 1015 )
  2216. #define NMERR_INVALID_REMOTE_COMPUTERNAME ( 1016 )
  2217. #define NMERR_RPC_REMOTE_FAILURE ( 1017 )
  2218. #define NMERR_NO_NPPS ( 3016 )
  2219. #define NMERR_NO_MATCHING_NPPS ( 3017 )
  2220. #define NMERR_NO_NPP_SELECTED ( 3018 )
  2221. #define NMERR_NO_INPUT_BLOBS ( 3019 )
  2222. #define NMERR_NO_NPP_DLLS ( 3020 )
  2223. #define NMERR_NO_VALID_NPP_DLLS ( 3021 )
  2224. //=============================================================================
  2225. // Monitor errors
  2226. //=============================================================================
  2227. #define NMERR_INVALID_LIST_INDEX ( 2000 )
  2228. #define NMERR_INVALID_MONITOR ( 2001 )
  2229. #define NMERR_INVALID_MONITOR_DLL ( 2002 )
  2230. #define NMERR_UNABLE_TO_CREATE_MONITOR ( 2003 )
  2231. #define NMERR_INVALID_MONITOR_CONFIG ( 2005 )
  2232. #define NMERR_INVALID_INDEX ( 2006 )
  2233. #define NMERR_MONITOR_ENABLED ( 2007 )
  2234. #define NMERR_MONITOR_NOT_RUNNING ( 2008 )
  2235. #define NMERR_MONITOR_IS_BUSY ( 2009 )
  2236. #define NMERR_MCS_IS_BUSY ( 2010 )
  2237. #define NMERR_NO_MONITORS ( 2011 )
  2238. #define NMERR_ONE_MONITOR_PER_NETCARD ( 2012 )
  2239. #define NMERR_CONFIGURATION_REQUIRED ( 2013 )
  2240. #define NMERR_MONITOR_NOT_CONNECTED ( 2014 )
  2241. #define NMERR_MONITOR_NOT_CONFIGURED ( 2015 )
  2242. #define NMERR_MONITOR_CONFIG_FAILED ( 2016 )
  2243. #define NMERR_MONITOR_INIT_FAILED ( 2017 )
  2244. #define NMERR_MONITOR_FAULTED ( 2018 )
  2245. #define NMERR_SAVE_ALL_FAILED ( 2019 )
  2246. #define NMERR_SAVE_MONITOR_FAILED ( 2029 )
  2247. #define NMERR_MONITOR_CONNECT_FAILED ( 2021 )
  2248. #define NMERR_MONITOR_START_FAILED ( 2022 )
  2249. #define NMERR_MONITOR_STOP_FAILED ( 2023 )
  2250. //=============================================================================
  2251. // Error Macros
  2252. //=============================================================================
  2253. #ifndef INLINE
  2254. #define INLINE __inline
  2255. #endif // INLINE
  2256. typedef LONG HRESULT;
  2257. // normal Network Monitor errors will be put into the code portion of an hresult
  2258. // for return from OLE objects:
  2259. // these two macros will help to create and crack the scode
  2260. INLINE HRESULT NMERR_TO_HRESULT( DWORD nmerror )
  2261. {
  2262.     HRESULT hResult;
  2263.     if (nmerror == NMERR_SUCCESS)
  2264.         hResult = NOERROR;
  2265.     else
  2266.         hResult = MAKE_HRESULT( SEVERITY_ERROR,FACILITY_ITF, (WORD)nmerror) ;
  2267.     return hResult;
  2268. }
  2269. //We use to decide whether the first bit was set to 1 or 0, not regarding 
  2270. //whether the result passed with a warning set in the low word.  Now we 
  2271. //disregard the first bit and pass back the warning.
  2272. INLINE DWORD HRESULT_TO_NMERR( HRESULT hResult )
  2273. {
  2274.     return HRESULT_CODE(hResult);
  2275. }
  2276. //=============================================================================
  2277. //=============================================================================
  2278. //  (BHFilter.h)
  2279. //=============================================================================
  2280. //=============================================================================
  2281. //============================================================================
  2282. //  types
  2283. //============================================================================
  2284. typedef HFILTER *LPHFILTER;
  2285. typedef DWORD FILTERACTIONTYPE;
  2286. typedef DWORD VALUETYPE;
  2287. // check for protocols existing in the frame.
  2288. // ProtocolPart
  2289. // this is the raw data for a Protocol based expression
  2290. //
  2291. // WHAT             FIELD          DESCRIPTION                  EXAMPLE
  2292. // ----             -----          -----------                  -------
  2293. // Count of Protocol(nPropertyDBs) Number of protocols to pass  5
  2294. // PropertyDB Table (PropertyDB)    Table of HPROTOCOL        SMB, LLC, MAC
  2295. //
  2296. // NOTE: the nPropertyDBs field may also be the following, which implies that
  2297. // all are selected but that none have actually been put into the structure
  2298. #define PROTOCOL_NUM_ANY ( -1 )
  2299. typedef PROTOCOLTABLE PROTOCOLTABLETYPE;
  2300. typedef PROTOCOLTABLETYPE *LPPROTOCOLTABLETYPE;
  2301. // filter bits stores who passed what filter per frame to speed up
  2302. //  the filter process...  This is actually an array.
  2303. typedef DWORD FILTERBITS;
  2304. typedef FILTERBITS *LPFILTERBITS;
  2305. typedef SYSTEMTIME *LPTIME;
  2306. typedef SYSTEMTIME UNALIGNED * ULPTIME;
  2307. // The Filter Object is the basic unit of the postfix stack.
  2308. // I need to restart the convert property to value if the comparison does not match.
  2309. // To do this, I need the original pointer to the property.  Pull the hProperty out of
  2310. // the union so that the pointer to the property is saved.
  2311. typedef struct _FILTEROBJECT
  2312. {
  2313.     FILTERACTIONTYPE    Action;     // Object action, see codes below
  2314.     HPROPERTY           hProperty;  // property key
  2315.     union
  2316.     {
  2317.         VALUETYPE           Value;           // value of the object.
  2318.         HPROTOCOL           hProtocol;       // protocol key.
  2319.         LPVOID              lpArray;         // if array, length is ItemCount below.
  2320.         LPPROTOCOLTABLETYPE lpProtocolTable; // list of protocols to see if exist in frame.
  2321.         LPADDRESS           lpAddress;       // kernel type address, mac or ip
  2322.         ULPLARGEINT         lpLargeInt;      // Double DWORD used by NT
  2323.         ULPTIME             lpTime;          // pointer to SYSTEMTIME
  2324.         LPOBJECT_IDENTIFIER lpOID;           // pointer to OBJECT_IDENTIFIER
  2325.     };
  2326.     union
  2327.     {
  2328.         WORD            ByteCount;      // Number of BYTES!
  2329.         WORD            ByteOffset;     // offset for array compare
  2330.     };
  2331.     struct _FILTEROBJECT * pNext;   // reserved
  2332. } FILTEROBJECT;
  2333. typedef FILTEROBJECT * LPFILTEROBJECT;
  2334. #define FILTERINFO_SIZE (sizeof(FILTEROBJECT) )
  2335. typedef struct _FILTERDESC
  2336. {
  2337.     WORD            NumEntries;
  2338.     WORD            Flags;          // private
  2339.     LPFILTEROBJECT  lpStack;
  2340.     LPFILTEROBJECT  lpKeepLast;
  2341.     LPVOID          UIInstanceData; // UI specific information.
  2342.     LPFILTERBITS    lpFilterBits;   // cache who passed
  2343.     LPFILTERBITS    lpCheckBits;    // have we looked at it yet?
  2344.     
  2345. } FILTERDESC;
  2346. typedef FILTERDESC * LPFILTERDESC;
  2347. #define FILTERDESC_SIZE sizeof(FILTERDESC)
  2348. //============================================================================
  2349. //  Macros.
  2350. //============================================================================
  2351. #define FilterGetUIInstanceData(hfilt)         (((LPFILTERDESC)hfilt)->UIInstanceData)
  2352. #define FilterSetUIInstanceData(hfilt,inst)    (((LPFILTERDESC)hfilt)->UIInstanceData = (LPVOID)inst)
  2353. //============================================================================
  2354. //  defines
  2355. //============================================================================
  2356. #define FILTERFREEPOOLSTART ( 20 )
  2357. #define INVALIDELEMENT ( -1 )
  2358. #define INVALIDVALUE ( ( VALUETYPE  )-9999 )
  2359. // use filter failed to check the return code on FilterFrame.
  2360. #define FILTER_FAIL_WITH_ERROR ( -1 )
  2361. #define FILTER_PASSED ( TRUE )
  2362. #define FILTER_FAILED ( FALSE )
  2363. #define FILTERACTION_INVALID ( 0 )
  2364. #define FILTERACTION_PROPERTY ( 1 )
  2365. #define FILTERACTION_VALUE ( 2 )
  2366. #define FILTERACTION_STRING ( 3 )
  2367. #define FILTERACTION_ARRAY ( 4 )
  2368. #define FILTERACTION_AND ( 5 )
  2369. #define FILTERACTION_OR ( 6 )
  2370. #define FILTERACTION_XOR ( 7 )
  2371. #define FILTERACTION_PROPERTYEXIST ( 8 )
  2372. #define FILTERACTION_CONTAINSNC ( 9 )
  2373. #define FILTERACTION_CONTAINS ( 10 )
  2374. #define FILTERACTION_NOT ( 11 )
  2375. #define FILTERACTION_EQUALNC ( 12 )
  2376. #define FILTERACTION_EQUAL ( 13 )
  2377. #define FILTERACTION_NOTEQUALNC ( 14 )
  2378. #define FILTERACTION_NOTEQUAL ( 15 )
  2379. #define FILTERACTION_GREATERNC ( 16 )
  2380. #define FILTERACTION_GREATER ( 17 )
  2381. #define FILTERACTION_LESSNC ( 18 )
  2382. #define FILTERACTION_LESS ( 19 )
  2383. #define FILTERACTION_GREATEREQUALNC ( 20 )
  2384. #define FILTERACTION_GREATEREQUAL ( 21 )
  2385. #define FILTERACTION_LESSEQUALNC ( 22 )
  2386. #define FILTERACTION_LESSEQUAL ( 23 )
  2387. #define FILTERACTION_PLUS ( 24 )
  2388. #define FILTERACTION_MINUS ( 25 )
  2389. #define FILTERACTION_ADDRESS ( 26 )
  2390. #define FILTERACTION_ADDRESSANY ( 27 )
  2391. #define FILTERACTION_FROM ( 28 )
  2392. #define FILTERACTION_TO ( 29 )
  2393. #define FILTERACTION_FROMTO ( 30 )
  2394. #define FILTERACTION_AREBITSON ( 31 )
  2395. #define FILTERACTION_AREBITSOFF ( 32 )
  2396. #define FILTERACTION_PROTOCOLSEXIST ( 33 )
  2397. #define FILTERACTION_PROTOCOLEXIST ( 34 )
  2398. #define FILTERACTION_ARRAYEQUAL ( 35 )
  2399. #define FILTERACTION_DEREFPROPERTY ( 36 )
  2400. #define FILTERACTION_LARGEINT ( 37 )
  2401. #define FILTERACTION_TIME ( 38 )
  2402. #define FILTERACTION_ADDR_ETHER ( 39 )
  2403. #define FILTERACTION_ADDR_TOKEN ( 40 )
  2404. #define FILTERACTION_ADDR_FDDI ( 41 )
  2405. #define FILTERACTION_ADDR_IPX ( 42 )
  2406. #define FILTERACTION_ADDR_IP ( 43 )
  2407. #define FILTERACTION_OID ( 44 )
  2408. #define FILTERACTION_OID_CONTAINS ( 45 )
  2409. #define FILTERACTION_OID_BEGINS_WITH ( 46 )
  2410. #define FILTERACTION_OID_ENDS_WITH ( 47 )
  2411. #define FILTERACTION_ADDR_VINES ( 48 )
  2412. #define FILTERACTION_EXPRESSION ( 97 )
  2413. #define FILTERACTION_BOOL ( 98 )
  2414. #define FILTERACTION_NOEVAL ( 99 )
  2415. #define FILTER_NO_MORE_FRAMES ( 0xffffffff )
  2416. #define FILTER_CANCELED ( 0xfffffffe )
  2417. #define FILTER_DIRECTION_NEXT ( TRUE )
  2418. #define FILTER_DIRECTION_PREV ( FALSE )
  2419. //============================================================================
  2420. //  Helper functions.
  2421. //============================================================================
  2422. typedef BOOL (WINAPI *STATUSPROC)(DWORD, HCAPTURE, HFILTER, LPVOID);
  2423. //=============================================================================
  2424. //  FILTER API's.
  2425. //=============================================================================
  2426. HFILTER  WINAPI CreateFilter(VOID);
  2427. DWORD    WINAPI DestroyFilter(HFILTER hFilter);
  2428. HFILTER  WINAPI FilterDuplicate(HFILTER hFilter);
  2429. DWORD    WINAPI DisableParserFilter(HFILTER hFilter, HPARSER hParser);
  2430. DWORD    WINAPI EnableParserFilter(HFILTER hFilter, HPARSER hParser);
  2431. DWORD    WINAPI FilterAddObject(HFILTER hFilter, LPFILTEROBJECT lpFilterObject );
  2432. VOID     WINAPI FilterFlushBits(HFILTER hFilter);
  2433. DWORD    WINAPI FilterFrame(HFRAME hFrame, HFILTER hFilter, HCAPTURE hCapture);
  2434.     // returns -1 == check BH set last error
  2435.     //          0 == FALSE
  2436.     //          1 == TRUE
  2437. BOOL     WINAPI FilterAttachesProperties(HFILTER hFilter);
  2438. DWORD WINAPI FilterFindFrame (  HFILTER     hFilter,
  2439.                                 HCAPTURE    hCapture,
  2440.                                 DWORD       nFrame,
  2441.                                 STATUSPROC  StatusProc,
  2442.                                 LPVOID      UIInstance,
  2443.                                 DWORD       TimeDelta,
  2444.                                 BOOL        FilterDirection );
  2445. HFRAME FilterFindPropertyInstance ( HFRAME          hFrame, 
  2446.                                     HFILTER         hMasterFilter, 
  2447.                                     HCAPTURE        hCapture,
  2448.                                     HFILTER         hInstanceFilter,
  2449.                                     LPPROPERTYINST  *lpPropRestartKey,
  2450.                                     STATUSPROC      StatusProc,
  2451.                                     LPVOID          UIInstance,
  2452.                                     DWORD           TimeDelta,
  2453.                                     BOOL            FilterForward );
  2454. VOID WINAPI SetCurrentFilter(HFILTER);
  2455. HFILTER WINAPI GetCurrentFilter(VOID);
  2456. //=============================================================================
  2457. //=============================================================================
  2458. //  (Frame.h)
  2459. //=============================================================================
  2460. //=============================================================================
  2461. //=============================================================================
  2462. //  802.3 and ETHERNET MAC structure.
  2463. //=============================================================================
  2464. typedef struct _ETHERNET
  2465. {
  2466.     BYTE    DstAddr[MAX_ADDR_LENGTH];   //... destination address.
  2467.     BYTE    SrcAddr[MAX_ADDR_LENGTH];   //... source address.
  2468.     union
  2469.     {
  2470.         WORD    Length;                 //... 802.3 length field.
  2471.         WORD    Type;                   //... Ethernet type field.
  2472.     };
  2473.     BYTE    Info[0];                    //... information field.
  2474. } ETHERNET;
  2475. typedef ETHERNET *LPETHERNET;
  2476. typedef ETHERNET UNALIGNED *ULPETHERNET;
  2477. #define ETHERNET_SIZE   sizeof(ETHERNET)
  2478. #define ETHERNET_HEADER_LENGTH ( 14 )
  2479. #define ETHERNET_DATA_LENGTH ( 0x5dc )