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

模拟服务器

开发平台:

C/C++

  1. //=============================================================================
  2. //  Microsoft (R) Network Monitor (tm). 
  3. //  Copyright (C) 1991-1999. All rights reserved.
  4. //
  5. //  MODULE: bhTypes.h
  6. //
  7. //  This is the top-level include file for all Network Monitor struct 
  8. //  definitions.
  9. //=============================================================================
  10. #if !defined(_BHTYPE_)
  11. #define _BHTYPE_
  12. #ifdef __cplusplus
  13. extern "C"
  14. {
  15. #endif
  16. #pragma pack(1)
  17. // yes we know that the following structures have:
  18. // warning C4200: nonstandard extension used : zero-sized array in struct/union
  19. // this is OK and intended
  20. #pragma warning(disable:4200)
  21. //=============================================================================
  22. //  Unaligned base type definitions.
  23. //=============================================================================
  24. typedef VOID        UNALIGNED   *ULPVOID;
  25. typedef BYTE        UNALIGNED   *ULPBYTE;
  26. typedef WORD        UNALIGNED   *ULPWORD;
  27. typedef DWORD       UNALIGNED   *ULPDWORD;
  28. typedef CHAR        UNALIGNED   *ULPSTR;
  29. typedef SYSTEMTIME  UNALIGNED   *ULPSYSTEMTIME;
  30. //=============================================================================
  31. //  Handle definitions.
  32. //=============================================================================
  33. typedef struct _PARSER     *HPARSER;
  34. typedef struct _CAPFRAMEDESC  *HFRAME;
  35. typedef struct _CAPTURE    *HCAPTURE;
  36. typedef struct _FILTER     *HFILTER;
  37. typedef struct _ADDRESSDB  *HADDRESSDB;
  38. typedef struct _PROTOCOL   *HPROTOCOL;
  39. typedef DWORD               HPROPERTY;
  40. typedef HPROTOCOL          *LPHPROTOCOL;
  41. //=============================================================================
  42. //  GetTableSize() -- The following macro is used to calculate the actual
  43. //                    length of Network Monitor variable-length table structures.
  44. //
  45. //  EXAMPLE:
  46. //
  47. //  GetTableSize(PROTOCOLTABLESIZE, 
  48. //               ProtocolTable->nProtocols, 
  49. //               sizeof(HPROTOCOL))
  50. //=============================================================================
  51. #define GetTableSize(TableBaseSize, nElements, ElementSize) ((TableBaseSize) + ((nElements) * (ElementSize)))
  52. //=============================================================================
  53. //  Object type identifiers.
  54. //=============================================================================
  55. typedef DWORD OBJECTTYPE;
  56. #ifndef MAKE_IDENTIFIER
  57. #define MAKE_IDENTIFIER(a, b, c, d)     ((DWORD) MAKELONG(MAKEWORD(a, b), MAKEWORD(c, d)))
  58. #endif
  59. #define HANDLE_TYPE_INVALID             MAKE_IDENTIFIER(-1, -1, -1, -1)
  60. #define HANDLE_TYPE_CAPTURE             MAKE_IDENTIFIER('C', 'A', 'P', '$')
  61. #define HANDLE_TYPE_PARSER              MAKE_IDENTIFIER('P', 'S', 'R', '$')
  62. #define HANDLE_TYPE_ADDRESSDB           MAKE_IDENTIFIER('A', 'D', 'R', '$')
  63. #define HANDLE_TYPE_PROTOCOL            MAKE_IDENTIFIER('P', 'R', 'T', '$')
  64. #define HANDLE_TYPE_BUFFER              MAKE_IDENTIFIER('B', 'U', 'F', '$')
  65. //=============================================================================
  66. //  Network Monitor constant definitions.
  67. //=============================================================================
  68. #define INLINE  __inline
  69. #define BHAPI   WINAPI
  70. #define MAX_NAME_LENGTH                 16
  71. #define MAX_ADDR_LENGTH                 6
  72. //=============================================================================
  73. //  Ethernet type (ETYPE) constant definitions.
  74. //=============================================================================
  75. #define ETYPE_LOOP                      0x9000
  76. #define ETYPE_3COM_NETMAP1              0x9001
  77. #define ETYPE_3COM_NETMAP2              0x9002
  78. #define ETYPE_IBM_RT                    0x80D5
  79. #define ETYPE_NETWARE                   0x8137
  80. #define ETYPE_XNS1                      0x0600
  81. #define ETYPE_XNS2                      0x0807
  82. #define ETYPE_3COM_NBP0                 0x3C00
  83. #define ETYPE_3COM_NBP1                 0x3C01
  84. #define ETYPE_3COM_NBP2                 0x3C02
  85. #define ETYPE_3COM_NBP3                 0x3C03
  86. #define ETYPE_3COM_NBP4                 0x3C04
  87. #define ETYPE_3COM_NBP5                 0x3C05
  88. #define ETYPE_3COM_NBP6                 0x3C06
  89. #define ETYPE_3COM_NBP7                 0x3C07
  90. #define ETYPE_3COM_NBP8                 0x3C08
  91. #define ETYPE_3COM_NBP9                 0x3C09
  92. #define ETYPE_3COM_NBP10                0x3C0A
  93. #define ETYPE_IP                        0x0800
  94. #define ETYPE_ARP1                      0x0806
  95. #define ETYPE_ARP2                      0x0807
  96. #define ETYPE_RARP                      0x8035
  97. #define ETYPE_TRLR0                     0x1000
  98. #define ETYPE_TRLR1                     0x1001
  99. #define ETYPE_TRLR2                     0x1002
  100. #define ETYPE_TRLR3                     0x1003
  101. #define ETYPE_TRLR4                     0x1004
  102. #define ETYPE_TRLR5                     0x1005
  103. #define ETYPE_PUP                       0x0200
  104. #define ETYPE_PUP_ARP                   0x0201
  105. #define ETYPE_APPLETALK_ARP             0x80F3
  106. #define ETYPE_APPLETALK_LAP             0x809B
  107. #define ETYPE_SNMP                      0x814C
  108. //=============================================================================
  109. //  LLC (802.2) SAP constant definitions.
  110. //=============================================================================
  111. #define SAP_SNAP                        0xAA
  112. #define SAP_BPDU                        0x42
  113. #define SAP_IBM_NM                      0xF4
  114. #define SAP_IBM_NETBIOS                 0xF0
  115. #define SAP_SNA1                        0x04
  116. #define SAP_SNA2                        0x05
  117. #define SAP_SNA3                        0x08
  118. #define SAP_SNA4                        0x0C
  119. #define SAP_NETWARE1                    0x10
  120. #define SAP_NETWARE2                    0xE0
  121. #define SAP_NETWARE3                    0xFE
  122. #define SAP_IP                          0x06
  123. #define SAP_X25                         0x7E
  124. #define SAP_RPL1                        0xF8
  125. #define SAP_RPL2                        0xFC
  126. #define SAP_UB                          0xFA
  127. #define SAP_XNS                         0x80
  128. //=============================================================================
  129. //  Property constants
  130. //=============================================================================
  131. // data types
  132. #define PROP_TYPE_VOID              0x00
  133. #define PROP_TYPE_SUMMARY           0x01
  134. #define PROP_TYPE_BYTE              0x02
  135. #define PROP_TYPE_WORD              0x03
  136. #define PROP_TYPE_DWORD             0x04
  137. #define PROP_TYPE_LARGEINT          0x05
  138. #define PROP_TYPE_ADDR              0x06
  139. #define PROP_TYPE_TIME              0x07
  140. #define PROP_TYPE_STRING            0x08
  141. #define PROP_TYPE_IP_ADDRESS        0x09
  142. #define PROP_TYPE_IPX_ADDRESS       0x0A
  143. #define PROP_TYPE_BYTESWAPPED_WORD  0x0B
  144. #define PROP_TYPE_BYTESWAPPED_DWORD 0x0C
  145. #define PROP_TYPE_TYPED_STRING      0x0D
  146. #define PROP_TYPE_RAW_DATA          0x0E
  147. #define PROP_TYPE_COMMENT           0x0F
  148. #define PROP_TYPE_SRCFRIENDLYNAME   0x10
  149. #define PROP_TYPE_DSTFRIENDLYNAME   0x11
  150. #define PROP_TYPE_TOKENRING_ADDRESS 0x12
  151. #define PROP_TYPE_FDDI_ADDRESS      0x13
  152. #define PROP_TYPE_ETHERNET_ADDRESS  0x14
  153. #define PROP_TYPE_OBJECT_IDENTIFIER 0x15
  154. #define PROP_TYPE_VINES_IP_ADDRESS  0x16
  155. #define PROP_TYPE_VAR_LEN_SMALL_INT 0x17
  156. // data qualifiers
  157. #define PROP_QUAL_NONE              0x00
  158. #define PROP_QUAL_RANGE             0x01
  159. #define PROP_QUAL_SET               0x02
  160. #define PROP_QUAL_BITFIELD          0x03
  161. #define PROP_QUAL_LABELED_SET       0x04
  162. #define PROP_QUAL_LABELED_BITFIELD  0x08
  163. #define PROP_QUAL_CONST             0x09
  164. #define PROP_QUAL_FLAGS             0x0A
  165. #define PROP_QUAL_ARRAY             0x0B
  166. //=============================================================================
  167. //  LARGEINT structure defined in winnt.h
  168. //=============================================================================
  169. typedef LARGE_INTEGER *LPLARGEINT;
  170. typedef LARGE_INTEGER UNALIGNED *ULPLARGEINT;
  171. //=============================================================================
  172. //  Range structure.
  173. //=============================================================================
  174. typedef struct _RANGE
  175. {
  176.     DWORD   MinValue;
  177.     DWORD   MaxValue;
  178. } RANGE;
  179. typedef RANGE *LPRANGE;
  180. //=============================================================================
  181. //  LABELED_BYTE structure
  182. //=============================================================================
  183. typedef struct _LABELED_BYTE
  184. {
  185.     BYTE    Value;
  186.     LPSTR   Label;
  187. } LABELED_BYTE;
  188. typedef LABELED_BYTE *LPLABELED_BYTE;
  189. //=============================================================================
  190. //  LABELED_WORD structure
  191. //=============================================================================
  192. typedef struct _LABELED_WORD
  193. {
  194.     WORD    Value;
  195.     LPSTR   Label;
  196. } LABELED_WORD;
  197. typedef LABELED_WORD *LPLABELED_WORD;
  198. //=============================================================================
  199. //  LABELED_DWORD structure
  200. //=============================================================================
  201. typedef struct _LABELED_DWORD
  202. {
  203.     DWORD   Value;
  204.     LPSTR   Label;
  205. } LABELED_DWORD;
  206. typedef LABELED_DWORD *LPLABELED_DWORD;
  207. //=============================================================================
  208. //  LABELED_LARGEINT structure
  209. //=============================================================================
  210. typedef struct _LABELED_LARGEINT
  211. {
  212.     LARGE_INTEGER   Value;
  213.     LPSTR           Label;
  214. } LABELED_LARGEINT;
  215. typedef LABELED_LARGEINT *LPLABELED_LARGEINT;
  216. //=============================================================================
  217. //  LABELED_SYSTEMTIME structure
  218. //=============================================================================
  219. typedef struct _LABELED_SYSTEMTIME
  220. {
  221.     SYSTEMTIME      Value;
  222.     LPSTR           Label;
  223. } LABELED_SYSTEMTIME;
  224. typedef LABELED_SYSTEMTIME *LPLABELED_SYSTEMTIME;
  225. //=============================================================================
  226. //  LABELED_BIT structure
  227. //=============================================================================
  228. typedef struct _LABELED_BIT
  229. {
  230.     BYTE    BitNumber;          //... Bit number (starts at 0, upto 256 bits).
  231.     LPSTR   LabelOff;           //... Label for bit = 0
  232.     LPSTR   LabelOn;            //... Label for bit = 1
  233. } LABELED_BIT;
  234. typedef LABELED_BIT *LPLABELED_BIT;
  235. //=============================================================================
  236. //  TYPED_STRING structure
  237. //=============================================================================
  238. #define TYPED_STRING_NORMAL     1
  239. #define TYPED_STRING_UNICODE    2
  240. #define TYPED_STRING_EXFLAG     1
  241. typedef struct _TYPED_STRING
  242. {
  243.     BYTE    StringType:7;   // defined above
  244.     BYTE    fStringEx:1;    // we are always Ex... so this is how we ExEx
  245.     LPSTR   lpString;       // the actual string
  246.     BYTE    Byte[0];        // if instEx, then the data would go here.
  247. } TYPED_STRING;
  248. typedef TYPED_STRING *LPTYPED_STRING;
  249. //=============================================================================
  250. //  OBJECT_IDENTIFIER structure
  251. //=============================================================================
  252. typedef struct _OBJECT_IDENTIFIER
  253. {
  254.     DWORD   Length; // Number of identifiers in the OID
  255.     LPDWORD lpIdentifier; // Array of Identifiers
  256. } OBJECT_IDENTIFIER;
  257. typedef OBJECT_IDENTIFIER *LPOBJECT_IDENTIFIER;
  258. //=============================================================================
  259. //  Set structure.
  260. //=============================================================================
  261. typedef struct _SET
  262. {
  263.     DWORD   nEntries;
  264.     union
  265.     {
  266.         //... set of values
  267.         LPVOID                  lpVoidTable;                    // set of anything.
  268.         LPBYTE                  lpByteTable;                    // set of bytes
  269.         LPWORD                  lpWordTable;                    // set of words
  270.         LPDWORD                 lpDwordTable;                   // set of dwords
  271.         LPLARGEINT              lpLargeIntTable;                // set of LARGEINT structures
  272.         LPSYSTEMTIME            lpSystemTimeTable;              // set of SYSTEMTIME structures
  273.         //... set of labeled values
  274.         LPLABELED_BYTE          lpLabeledByteTable;             // set of labeled_byte structs
  275.         LPLABELED_WORD          lpLabeledWordTable;             // set of labeled_word structs
  276.         LPLABELED_DWORD         lpLabeledDwordTable;            // set of labeled_dword structs
  277.         LPLABELED_LARGEINT      lpLabeledLargeIntTable;         // set of Labeled_LARGEINT structs
  278.         LPLABELED_SYSTEMTIME    lpLabeledSystemTimeTable;       // set of labeled_systemtime structs
  279.         LPLABELED_BIT           lpLabeledBit;                   // set of labeled_bit structs.
  280.     };
  281. } SET;
  282. typedef SET *LPSET;
  283. //=============================================================================
  284. //  String table.
  285. //=============================================================================
  286. typedef struct _STRINGTABLE
  287. {
  288.     DWORD           nStrings;               // number LPSTR in table
  289.     LPSTR           String[0];
  290. } STRINGTABLE;
  291. typedef STRINGTABLE *LPSTRINGTABLE;
  292. #define STRINGTABLE_SIZE    sizeof(STRINGTABLE)
  293. //=============================================================================
  294. //  RECOGNIZEDATA structure.
  295. //
  296. //  This structure to keep track of the start of each recognized protocol.
  297. //=============================================================================
  298. typedef struct _RECOGNIZEDATA
  299. {
  300.     WORD        ProtocolID;         //... Protocol which was recognized
  301.     WORD        nProtocolOffset;    //... Offset from the start of the frame of the start of this protocol.
  302.     LPVOID      InstData;           //... Opaque, for protocol only.
  303. } RECOGNIZEDATA;
  304. typedef RECOGNIZEDATA * LPRECOGNIZEDATA;
  305. //=============================================================================
  306. //  RECOGNIZEDATATABLE structure.
  307. //
  308. //  This structure to keep track of the start of each RECOGNIZEDATA structure
  309. //=============================================================================
  310. typedef struct _RECOGNIZEDATATABLE
  311. {
  312.     WORD            nRecognizeDatas;    //... number of RECOGNIZEDATA structures
  313.     RECOGNIZEDATA   RecognizeData[0];   //... array of RECOGNIZEDATA structures follows
  314. } RECOGNIZEDATATABLE;
  315. typedef RECOGNIZEDATATABLE * LPRECOGNIZEDATATABLE;
  316. //=============================================================================
  317. //  Property information structure.
  318. //=============================================================================
  319. typedef struct _PROPERTYINFO
  320. {
  321.     HPROPERTY       hProperty;      //... Handle to the property.
  322.     DWORD           Version;        //... Version of property.
  323.     LPSTR           Label;          //... name of property
  324.     LPSTR           Comment;        //... description of property
  325.     BYTE            DataType;       //... data type of property
  326.     BYTE            DataQualifier;  //... data qualifier of property
  327.     union
  328.     {
  329.         LPVOID          lpExtendedInfo; //... generic pointer.
  330.         LPRANGE         lpRange;        //... pointer to range
  331.         LPSET           lpSet;          //... pointer to set
  332.         DWORD           Bitmask;        //... bitmask to apply
  333.         DWORD           Value;          //... constant value.
  334.     };
  335.     WORD            FormatStringSize;   //... max size to reserve for text description
  336.     LPVOID          InstanceData;       //... property-specific instance data.
  337. } PROPERTYINFO;
  338. typedef PROPERTYINFO *LPPROPERTYINFO;
  339. #define PROPERTYINFO_SIZE   sizeof(PROPERTYINFO)
  340. //=============================================================================
  341. //  Property instance Extended structure.
  342. //=============================================================================
  343. typedef struct _PROPERTYINSTEX
  344. {
  345.     WORD        Length;         //... length of raw data in frame
  346.     WORD        LengthEx;       //... number of bytes following
  347.     ULPVOID     lpData;         //... pointer to raw data in frame
  348.     union
  349.     {
  350.         BYTE            Byte[];     //... table of bytes follows
  351.         WORD            Word[];     //... table of words follows
  352.         DWORD           Dword[];    //... table of Dwords follows
  353.         LARGE_INTEGER   LargeInt[]; //... table of LARGEINT structures to follow
  354.         SYSTEMTIME      SysTime[];  //... table of SYSTEMTIME structures follows
  355.         TYPED_STRING    TypedString;//... a typed_string that may have extended data
  356.     };
  357. } PROPERTYINSTEX;
  358. typedef PROPERTYINSTEX *LPPROPERTYINSTEX;
  359. #define PROPERTYINSTEX_SIZE     sizeof(PROPERTYINSTEX)
  360. typedef PROPERTYINSTEX UNALIGNED *ULPPROPERTYINSTEX;
  361. //=============================================================================
  362. //  Property instance structure.
  363. //=============================================================================
  364. typedef struct _PROPERTYINST
  365. {
  366.     LPPROPERTYINFO          lpPropertyInfo;     // pointer to property info
  367.     LPSTR                   szPropertyText;     // pointer to string description
  368.     union
  369.     {
  370.         LPVOID              lpData;             // pointer to data
  371.         LPBYTE              lpByte;             // bytes
  372.         ULPWORD             lpWord;             // words
  373.         ULPDWORD            lpDword;            // dwords
  374.         ULPLARGEINT         lpLargeInt;         // LargeInt
  375.         ULPSYSTEMTIME       lpSysTime;          // pointer to SYSTEMTIME structures
  376.         LPPROPERTYINSTEX    lpPropertyInstEx;   // pointer to propertyinstex (if DataLength = -1)
  377.     };
  378.     WORD                    DataLength;         // length of data, or flag for propertyinstex struct
  379.     WORD                    Level   : 4  ;      // level information        ............1111
  380.     WORD                    HelpID  : 12 ;      // context ID for helpfile  111111111111....
  381.                      //    ---------------
  382.                      // total of 16 bits == 1 WORD == DWORD ALIGNED structure
  383.                             // Interpretation Flags:  Flags that define attach time information to the
  384.                             // interpretation of the property.  For example, in RPC, the client can be
  385.                             // Intel format and the server can be non-Intel format... thus the property
  386.                             // database cannot describe the property at database creation time.
  387.     DWORD                   IFlags;
  388. } PROPERTYINST;
  389. typedef PROPERTYINST *LPPROPERTYINST;
  390. #define PROPERTYINST_SIZE   sizeof(PROPERTYINST)
  391. // Flags passed at AttachPropertyInstance and AttachPropertyInstanceEx time in the IFlags field:
  392. // flag for error condition ...............1
  393. #define IFLAG_ERROR     0x00000001
  394. // is the WORD or DWORD byte non-Intel format at attach time?
  395. #define IFLAG_SWAPPED   0x00000002
  396. // is the STRING UNICODE at attach time?
  397. #define IFLAG_UNICODE   0x00000004
  398. //=============================================================================
  399. //  Property instance table structure.
  400. //=============================================================================
  401. typedef struct _PROPERTYINSTTABLE
  402. {
  403.     WORD                nPropertyInsts;     //... number of items
  404.     WORD                nPropertyInstIndex; //... index to first item
  405. } PROPERTYINSTTABLE;
  406. typedef PROPERTYINSTTABLE *LPPROPERTYINSTTABLE;
  407. #define PROPERTYINSTTABLE_SIZE  sizeof(PROPERTYINSTTABLE)
  408. //=============================================================================
  409. //  Property table structure.
  410. //=============================================================================
  411. typedef struct _PROPERTYTABLE
  412. {
  413.     LPVOID                  lpFormatBuffer;             //... Opaque.                       (PRIVATE)
  414.     DWORD                   FormatBufferLength;         //... Opaque.                       (PRIVATE)
  415.     DWORD                   nTotalPropertyInsts;        //... total number of propertyinstances in array
  416.     LPPROPERTYINST          lpFirstPropertyInst;        //... array of property instances
  417.     BYTE                    nPropertyInstTables;        //... total PropertyIndexTables following
  418.     PROPERTYINSTTABLE       PropertyInstTable[0];       //... array of propertyinstance index table structures
  419. } PROPERTYTABLE;
  420. typedef PROPERTYTABLE *LPPROPERTYTABLE;
  421. #define PROPERTYTABLE_SIZE  sizeof(PROPERTYTABLE)
  422. //=============================================================================
  423. //  Protocol entry points.
  424. //=============================================================================
  425. typedef VOID    (WINAPI *REGISTER)(HPROTOCOL);
  426. typedef VOID    (WINAPI *DEREGISTER)(HPROTOCOL);
  427. typedef LPBYTE  (WINAPI *RECOGNIZEFRAME)(HFRAME, LPBYTE, LPBYTE, DWORD, DWORD, HPROTOCOL, DWORD, LPDWORD, LPHPROTOCOL, PDWORD_PTR);
  428. typedef LPBYTE  (WINAPI *ATTACHPROPERTIES)(HFRAME, LPBYTE, LPBYTE, DWORD, DWORD, HPROTOCOL, DWORD, DWORD_PTR);
  429. typedef DWORD   (WINAPI *FORMATPROPERTIES)(HFRAME, LPBYTE, LPBYTE, DWORD, LPPROPERTYINST);
  430. //=============================================================================
  431. //  Protocol entry point structure.
  432. //=============================================================================
  433. typedef struct _ENTRYPOINTS
  434. {
  435.     REGISTER            Register;               //... Protocol Register() entry point.
  436.     DEREGISTER          Deregister;             //... Protocol Deregister() entry point.
  437.     RECOGNIZEFRAME      RecognizeFrame;         //... Protocol RecognizeFrame() entry point.
  438.     ATTACHPROPERTIES    AttachProperties;       //... Protocol AttachProperties() entry point.
  439.     FORMATPROPERTIES    FormatProperties;       //... Protocol FormatProperties() entry point.
  440. } ENTRYPOINTS;
  441. typedef ENTRYPOINTS *LPENTRYPOINTS;
  442. #define ENTRYPOINTS_SIZE    sizeof(ENTRYPOINTS)
  443. //=============================================================================
  444. //  Property database structure.
  445. //=============================================================================
  446. typedef struct _PROPERTYDATABASE
  447. {
  448.     DWORD           nProperties;                 //... Number of properties in database.
  449.     LPPROPERTYINFO  PropertyInfo[0];             //... Array of property info pointers.
  450. } PROPERTYDATABASE;
  451. #define PROPERTYDATABASE_SIZE   sizeof(PROPERTYDATABASE)
  452. typedef PROPERTYDATABASE *LPPROPERTYDATABASE;
  453. //=============================================================================
  454. //  Protocol info structure (PUBLIC portion of HPROTOCOL).
  455. //=============================================================================
  456. typedef struct _PROTOCOLINFO
  457. {
  458.     DWORD               ProtocolID;             //... Prootocol ID of owning protocol.
  459.     LPPROPERTYDATABASE  PropertyDatabase;       //... Property database.
  460.     BYTE                ProtocolName[16];       //... Protocol name.
  461.     BYTE                HelpFile[16];           //... Optional helpfile name.
  462.     BYTE                Comment[128];           //... Comment describing protocol.
  463. } PROTOCOLINFO;
  464. typedef PROTOCOLINFO *LPPROTOCOLINFO;
  465. #define PROTOCOLINFO_SIZE   sizeof(PROTOCOLINFO)
  466. //=============================================================================
  467. //  Protocol Table.
  468. //=============================================================================
  469. typedef struct _PROTOCOLTABLE
  470. {
  471.     DWORD       nProtocols;
  472.     HPROTOCOL   hProtocol[1];                       //... This must be the last member.
  473. } PROTOCOLTABLE;
  474. typedef PROTOCOLTABLE *LPPROTOCOLTABLE;
  475. #define PROTOCOLTABLE_SIZE  (sizeof(PROTOCOLTABLE) - sizeof(HPROTOCOL))
  476. #define PROTOCOLTABLE_ACTUAL_SIZE(p) GetTableSize(PROTOCOLTABLE_SIZE, (p)->nProtocols, sizeof(HPROTOCOL))
  477. //=============================================================================
  478. //  AddressInfo structure
  479. //=============================================================================
  480. #define SORT_BYADDRESS  0
  481. #define SORT_BYNAME     1
  482. #define PERMANENT_NAME  0x00000100
  483. typedef struct _ADDRESSINFO *LPADDRESSINFO;
  484. typedef struct _ADDRESSINFO
  485. {
  486.     ADDRESS        Address;
  487.     WCHAR          Name[MAX_NAME_SIZE];
  488. DWORD          Flags;
  489.     LPVOID         lpAddressInstData;
  490. } ADDRESSINFO;
  491. #define ADDRESSINFO_SIZE    sizeof(ADDRESSINFO)
  492. //=============================================================================
  493. //  AddressInfoTable
  494. //=============================================================================
  495. typedef struct _ADDRESSINFOTABLE
  496. {
  497.     DWORD         nAddressInfos;
  498.     LPADDRESSINFO lpAddressInfo[0];
  499. } ADDRESSINFOTABLE;
  500. typedef ADDRESSINFOTABLE *LPADDRESSINFOTABLE;
  501. #define ADDRESSINFOTABLE_SIZE   sizeof(ADDRESSINFOTABLE)
  502. //=============================================================================
  503. //  callback procedures.
  504. //=============================================================================
  505. typedef DWORD (WINAPI *FILTERPROC)(HCAPTURE, HFRAME, LPVOID);
  506. #pragma warning(default:4200)
  507. #pragma pack()
  508. #ifdef __cplusplus
  509. }
  510. #endif
  511. #endif