home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / bhtypes.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  25KB  |  646 lines

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