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

模拟服务器

开发平台:

C/C++

  1. //=============================================================================
  2. //  Microsoft (R) Network Monitor (tm). 
  3. //  Copyright (C) 1997-1999. All rights reserved.
  4. //
  5. //  MODULE: NPPTypes.h
  6. //
  7. //  The source of everything outsiders need to know about NPP
  8. //=============================================================================
  9. #ifndef __npptypes_h__
  10. #define __npptypes_h__
  11. #include <unknwn.h>
  12. #ifndef LPBYTE
  13. typedef BYTE *LPBYTE;
  14. #endif
  15. typedef const void * HBLOB;
  16. #pragma pack(1)
  17. //=============================================================================
  18. // DWORD  General constants.
  19. //=============================================================================
  20. #define MAC_TYPE_UNKNOWN                             0     //... not supported
  21. #define MAC_TYPE_ETHERNET                            1     //... ethernet and 802.3
  22. #define MAC_TYPE_TOKENRING                           2     //... tokenring (802.5)
  23. #define MAC_TYPE_FDDI                                3     //... fddi.
  24.                                                      
  25. #define MACHINE_NAME_LENGTH                         16 
  26. #define USER_NAME_LENGTH                            32 
  27. #define ADAPTER_COMMENT_LENGTH                      32 
  28.                                                 
  29. #define CONNECTION_FLAGS_WANT_CONVERSATION_STATS    0x00000001
  30. //=============================================================================
  31. //  Handle to a network
  32. //=============================================================================
  33. typedef DWORD HNETWORK;
  34. //=============================================================================
  35. //  Statistics structure.
  36. //=============================================================================
  37. // -----------
  38. // Structure
  39. // -----------
  40. typedef struct _STATISTICS
  41. {
  42.     __int64          TimeElapsed; // in millionths of a second
  43.     //...Buffer statistics
  44.     DWORD           TotalFramesCaptured;
  45.     DWORD           TotalBytesCaptured;
  46.     //...Filtered statistics
  47.     DWORD           TotalFramesFiltered;
  48.     DWORD           TotalBytesFiltered;
  49.     DWORD           TotalMulticastsFiltered;
  50.     DWORD           TotalBroadcastsFiltered;
  51.     //...Overall statistics.
  52.     DWORD           TotalFramesSeen;
  53.     DWORD           TotalBytesSeen;
  54.     DWORD           TotalMulticastsReceived;
  55.     DWORD           TotalBroadcastsReceived;
  56.     DWORD           TotalFramesDropped;
  57.     DWORD           TotalFramesDroppedFromBuffer;
  58.     
  59.     //... Statistics kept by MAC driver.
  60.     DWORD           MacFramesReceived;
  61.     DWORD           MacCRCErrors;
  62.     __int64         MacBytesReceivedEx;
  63.     DWORD           MacFramesDropped_NoBuffers;
  64.     DWORD           MacMulticastsReceived;
  65.     DWORD           MacBroadcastsReceived;
  66.     DWORD           MacFramesDropped_HwError;
  67. } STATISTICS;
  68. typedef STATISTICS *LPSTATISTICS;
  69. #define STATISTICS_SIZE    sizeof(STATISTICS)
  70. //=============================================================================
  71. //  Address structures
  72. //=============================================================================
  73. // -----------
  74. // Constants
  75. // -----------
  76. #define MAX_NAME_SIZE       32 
  77. #define IP_ADDRESS_SIZE     4  
  78. #define MAC_ADDRESS_SIZE    6  
  79. // Q: What is the maximum address size that we could have to copy?
  80. // A: IPX == DWORD + 6 bytes == 10
  81. #define MAX_ADDRESS_SIZE    10 
  82.                                     
  83. #define ADDRESS_TYPE_ETHERNET       0 
  84. #define ADDRESS_TYPE_IP             1 
  85. #define ADDRESS_TYPE_IPX            2 
  86. #define ADDRESS_TYPE_TOKENRING      3 
  87. #define ADDRESS_TYPE_FDDI           4 
  88. #define ADDRESS_TYPE_XNS            5 
  89. #define ADDRESS_TYPE_ANY            6   // NOTE: Special ANY and ANY_GROUP are placeholders, meaning, ignore this type
  90. #define ADDRESS_TYPE_ANY_GROUP      7   
  91. #define ADDRESS_TYPE_FIND_HIGHEST   8   
  92. #define ADDRESS_TYPE_VINES_IP       9   
  93. #define ADDRESS_TYPE_LOCAL_ONLY     10   
  94. #define ADDRESSTYPE_FLAGS_NORMALIZE     0x0001 
  95. #define ADDRESSTYPE_FLAGS_BIT_REVERSE   0x0002 
  96. // -----------
  97. // Structure
  98. // -----------
  99. // Vines IP Address Structure
  100. typedef struct _VINES_IP_ADDRESS
  101. {
  102.     DWORD   NetID;
  103.     WORD    SubnetID;
  104. } VINES_IP_ADDRESS;
  105. typedef VINES_IP_ADDRESS *LPVINES_IP_ADDRESS;
  106. #define VINES_IP_ADDRESS_SIZE sizeof(VINES_IP_ADDRESS)
  107. // IPX Address Structure
  108. typedef struct _IPX_ADDRESS
  109. {
  110.     BYTE    Subnet[4];
  111.     BYTE    Address[6];
  112. } IPX_ADDRESS;
  113. typedef IPX_ADDRESS *LPIPX_ADDRESS;
  114. #define IPX_ADDRESS_SIZE    sizeof(IPX_ADDRESS)
  115. // XNS Address Structure
  116. typedef IPX_ADDRESS XNS_ADDRESS;
  117. typedef IPX_ADDRESS *LPXNS_ADDRESS;
  118. // ETHERNET SOURCE ADDRESS
  119. typedef struct _ETHERNET_SRC_ADDRESS
  120. {
  121.     BYTE    RoutingBit:     1;
  122.     BYTE    LocalBit:       1;
  123.     BYTE    Byte0:          6;
  124.     BYTE    Reserved[5];
  125. } ETHERNET_SRC_ADDRESS;
  126. typedef ETHERNET_SRC_ADDRESS *LPETHERNET_SRC_ADDRESS;
  127. // ETHERNET DESTINATION ADDRESS
  128. typedef struct _ETHERNET_DST_ADDRESS
  129. {
  130.     BYTE    GroupBit:       1;
  131.     BYTE    AdminBit:       1;
  132.     BYTE    Byte0:          6;
  133.     BYTE    Reserved[5];
  134. } ETHERNET_DST_ADDRESS;
  135. typedef ETHERNET_DST_ADDRESS *LPETHERNET_DST_ADDRESS;
  136. // FDDI addresses
  137. typedef ETHERNET_SRC_ADDRESS FDDI_SRC_ADDRESS;
  138. typedef ETHERNET_DST_ADDRESS FDDI_DST_ADDRESS;
  139. typedef FDDI_SRC_ADDRESS *LPFDDI_SRC_ADDRESS;
  140. typedef FDDI_DST_ADDRESS *LPFDDI_DST_ADDRESS;
  141. // TOKENRING Source Address
  142. typedef struct _TOKENRING_SRC_ADDRESS
  143. {
  144.     BYTE    Byte0:          6;
  145.     BYTE    LocalBit:       1;
  146.     BYTE    RoutingBit:     1;
  147.     BYTE    Byte1;
  148.     BYTE    Byte2:          7;
  149.     BYTE    Functional:     1;
  150.     BYTE    Reserved[3];
  151. } TOKENRING_SRC_ADDRESS;
  152. typedef TOKENRING_SRC_ADDRESS *LPTOKENRING_SRC_ADDRESS;
  153. // TOKENRING Destination Address
  154. typedef struct _TOKENRING_DST_ADDRESS
  155. {
  156.     BYTE    Byte0:          6;
  157.     BYTE    AdminBit:       1;
  158.     BYTE    GroupBit:       1;
  159.     BYTE    Reserved[5];
  160. } TOKENRING_DST_ADDRESS;
  161. typedef TOKENRING_DST_ADDRESS *LPTOKENRING_DST_ADDRESS;
  162. // Address Structure
  163. typedef struct _ADDRESS
  164. {
  165.     DWORD                       Type;
  166.     union
  167.     {
  168.         // ADDRESS_TYPE_ETHERNET
  169.         // ADDRESS_TYPE_TOKENRING
  170.         // ADDRESS_TYPE_FDDI
  171.         BYTE                    MACAddress[MAC_ADDRESS_SIZE];
  172.         // IP
  173.         BYTE                    IPAddress[IP_ADDRESS_SIZE];
  174.         // raw IPX
  175.         BYTE                    IPXRawAddress[IPX_ADDRESS_SIZE];
  176.         // real IPX
  177.         IPX_ADDRESS             IPXAddress;
  178.         // raw Vines IP
  179.         BYTE                    VinesIPRawAddress[VINES_IP_ADDRESS_SIZE];
  180.         // real Vines IP
  181.         VINES_IP_ADDRESS        VinesIPAddress;
  182.         // ethernet with bits defined
  183.         ETHERNET_SRC_ADDRESS    EthernetSrcAddress;
  184.         // ethernet with bits defined
  185.         ETHERNET_DST_ADDRESS    EthernetDstAddress;
  186.         // tokenring with bits defined
  187.         TOKENRING_SRC_ADDRESS   TokenringSrcAddress;
  188.         // tokenring with bits defined
  189.         TOKENRING_DST_ADDRESS   TokenringDstAddress;
  190.         // fddi with bits defined
  191.         FDDI_SRC_ADDRESS        FddiSrcAddress;
  192.         // fddi with bits defined
  193.         FDDI_DST_ADDRESS        FddiDstAddress;
  194.     };
  195.     
  196.     WORD                        Flags;
  197. } ADDRESS;
  198. typedef ADDRESS *LPADDRESS;
  199. #define ADDRESS_SIZE   sizeof(ADDRESS)
  200. //=============================================================================
  201. //  Address Pair Structure
  202. //=============================================================================
  203. // -----------
  204. // Constants
  205. // -----------
  206. #define ADDRESS_FLAGS_MATCH_DST         0x0001 //... Match dest. address.
  207. #define ADDRESS_FLAGS_MATCH_SRC         0x0002 //... Match src. address.
  208. #define ADDRESS_FLAGS_EXCLUDE           0x0004 //... Perform logical XOR vs logical OR.
  209. #define ADDRESS_FLAGS_DST_GROUP_ADDR    0x0008 //... Match group bit only.
  210. #define ADDRESS_FLAGS_MATCH_BOTH        0x0003 //... 0x0001 | 0x0002.
  211. // -----------
  212. // Structure
  213. // -----------
  214. typedef struct _ADDRESSPAIR
  215. {
  216.     WORD        AddressFlags;
  217.     WORD        NalReserved;
  218.     ADDRESS     DstAddress;
  219.     ADDRESS     SrcAddress;
  220. } ADDRESSPAIR;
  221. typedef ADDRESSPAIR *LPADDRESSPAIR;
  222. #define ADDRESSPAIR_SIZE  sizeof(ADDRESSPAIR)
  223. //=============================================================================
  224. //  Address table.
  225. //=============================================================================
  226. // -----------
  227. // Constants
  228. // -----------
  229. #define MAX_ADDRESS_PAIRS   8
  230. // -----------
  231. // Structure
  232. // -----------
  233. typedef struct _ADDRESSTABLE
  234. {
  235.     DWORD           nAddressPairs;
  236.     DWORD           nNonMacAddressPairs;
  237.     ADDRESSPAIR     AddressPair[MAX_ADDRESS_PAIRS];
  238. } ADDRESSTABLE;
  239. typedef ADDRESSTABLE *LPADDRESSTABLE;
  240. #define ADDRESSTABLE_SIZE sizeof(ADDRESSTABLE)
  241. //=============================================================================
  242. //  Network information.
  243. //=============================================================================
  244. // -----------
  245. // Constants
  246. // -----------
  247. #define NETWORKINFO_FLAGS_PMODE_NOT_SUPPORTED           0x00000001 
  248. #define NETWORKINFO_FLAGS_REMOTE_NAL                    0x00000004 
  249. #define NETWORKINFO_FLAGS_REMOTE_NAL_CONNECTED          0x00000008 
  250. #define NETWORKINFO_FLAGS_REMOTE_CARD                   0x00000010 
  251. #define NETWORKINFO_FLAGS_RAS                           0x00000020 
  252. // -----------
  253. // Structure
  254. // -----------
  255. typedef struct _NETWORKINFO
  256. {
  257.     BYTE            PermanentAddr[6];       //... Permanent MAC address
  258.     BYTE            CurrentAddr[6];         //... Current  MAC address
  259.     ADDRESS         OtherAddress;           //... Other address supported (IP, IPX, etc...)
  260.     DWORD           LinkSpeed;              //... Link speed in Mbits.
  261.     DWORD           MacType;                //... Media type.
  262.     DWORD           MaxFrameSize;           //... Max frame size allowed.
  263.     DWORD           Flags;                  //... Informational flags.
  264.     DWORD           TimestampScaleFactor;   //... 1 = 1/1 ms, 10 = 1/10 ms, 100 = 1/100 ms, etc.
  265.     BYTE            NodeName[32];           //... Name of remote workstation.
  266.     BOOL            PModeSupported;         //... Card claims to support P-Mode
  267.     BYTE            Comment[ADAPTER_COMMENT_LENGTH]; // Adapter comment field.
  268. } NETWORKINFO;
  269. typedef NETWORKINFO *LPNETWORKINFO;
  270. #define NETWORKINFO_SIZE    sizeof(NETWORKINFO)
  271. #define MINIMUM_FRAME_SIZE   32
  272. //=============================================================================
  273. //  Pattern structure.
  274. //=============================================================================
  275. // -----------
  276. // Constants
  277. // -----------
  278. #define MAX_PATTERN_LENGTH  16 
  279. // When set this flag will cause those frames which do NOT have the specified pattern
  280. // in the proper stop to be kept.
  281. #define PATTERN_MATCH_FLAGS_NOT                 0x00000001
  282. // This flag was used in previous versions of Network Monitor and its value is therefore 
  283. // reserved for compatability reasons
  284. #define PATTERN_MATCH_FLAGS_RESERVED_1          0x00000002
  285. // When set this flag indicates that the user is not interested in a pattern match within 
  286. // IP or IPX, but in the protocol that follows.  The driver will ensure that the protocol
  287. // given in OffsetBasis is there and then that the port in the fram matches the port given.
  288. // It will then calculate the offset from the beginning of the protocol that follows IP or IPX.
  289. // NOTE: This flag is ignored if it is used with any OffsetBasis other than 
  290. // OFFSET_BASIS_RELATIVE_TO_IPX or OFFSET_BASIS_RELATIVE_TO_IP
  291. #define PATTERN_MATCH_FLAGS_PORT_SPECIFIED      0x00000008
  292. // The offset given is relative to the beginning of the frame. The 
  293. // PATTERN_MATCH_FLAGS_PORT_SPECIFIED flag is ignored.
  294. #define OFFSET_BASIS_RELATIVE_TO_FRAME                0
  295. // The offset given is relative to the beginning of the Effective Protocol.
  296. // The Effective Protocol is defined as the protocol that follows
  297. // the last protocol that determines Etype/SAP. In normal terms this means 
  298. // that the Effective Protocol will be IP, IPX, XNS, or any of their ilk.
  299. // The PATTERN_MATCH_FLAGS_PORT_SPECIFIED flag is ignored.
  300. #define OFFSET_BASIS_RELATIVE_TO_EFFECTIVE_PROTOCOL   1
  301. // The offset given is relative to the beginning of IPX. If IPX is not present
  302. // then the frame does not match. If the PATTERN_MATCH_FLAGS_PORT_SPECIFIED
  303. // flag is set then the offset is relative to the beginning of the protocol
  304. // which follows IPX.
  305. #define OFFSET_BASIS_RELATIVE_TO_IPX                  2
  306. // The offset given is relative to the beginning of IP. If IP is not present
  307. // then the frame does not match. If the PATTERN_MATCH_FLAGS_PORT_SPECIFIED
  308. // flag is set then the offset is relative to the beginning of the protocol
  309. // which follows IP.
  310. #define OFFSET_BASIS_RELATIVE_TO_IP                   3
  311. // -----------
  312. // Structure
  313. // -----------
  314. typedef union
  315. {
  316.     BYTE IPPort;
  317.     WORD ByteSwappedIPXPort;
  318. } GENERIC_PORT;
  319. typedef struct _PATTERNMATCH
  320. {
  321.     DWORD        Flags;
  322.     BYTE         OffsetBasis;
  323.     GENERIC_PORT Port;
  324.     WORD         Offset;
  325.     WORD         Length;
  326.     BYTE         PatternToMatch[MAX_PATTERN_LENGTH];//... Pattern to match.
  327. } PATTERNMATCH;
  328. typedef PATTERNMATCH *LPPATTERNMATCH;
  329. #define PATTERNMATCH_SIZE sizeof(PATTERNMATCH)
  330. //=============================================================================
  331. //  Expression structure.
  332. //=============================================================================
  333. // -----------
  334. // Constants
  335. // -----------
  336. #define MAX_PATTERNS    4
  337. // -----------
  338. // Structures
  339. // -----------
  340. typedef struct _ANDEXP
  341. {
  342.     DWORD            nPatternMatches;
  343.     PATTERNMATCH     PatternMatch[MAX_PATTERNS];
  344. } ANDEXP;
  345. typedef ANDEXP *LPANDEXP;
  346. #define ANDEXP_SIZE     sizeof(ANDEXP)
  347. typedef struct _EXPRESSION
  348. {
  349.     DWORD       nAndExps;
  350.     ANDEXP      AndExp[MAX_PATTERNS];
  351. } EXPRESSION;
  352. typedef EXPRESSION *LPEXPRESSION;
  353. #define EXPRESSION_SIZE    sizeof(EXPRESSION)
  354. //
  355. //  Trigger.
  356. //
  357. // -----------
  358. // Constants
  359. // -----------
  360. #define TRIGGER_TYPE_PATTERN_MATCH                       1  
  361. #define TRIGGER_TYPE_BUFFER_CONTENT                      2  
  362. #define TRIGGER_TYPE_PATTERN_MATCH_THEN_BUFFER_CONTENT   3  
  363. #define TRIGGER_TYPE_BUFFER_CONTENT_THEN_PATTERN_MATCH   4  
  364. #define TRIGGER_FLAGS_FRAME_RELATIVE                   0x00000000  
  365. #define TRIGGER_FLAGS_DATA_RELATIVE                    0x00000001  
  366. #define TRIGGER_ACTION_NOTIFY                          0x00  
  367. #define TRIGGER_ACTION_STOP                            0x02  
  368. #define TRIGGER_ACTION_PAUSE                           0x03  
  369. #define TRIGGER_BUFFER_FULL_25_PERCENT         0  
  370. #define TRIGGER_BUFFER_FULL_50_PERCENT         1  
  371. #define TRIGGER_BUFFER_FULL_75_PERCENT         2  
  372. #define TRIGGER_BUFFER_FULL_100_PERCENT        3  
  373. // -----------
  374. // Structure
  375. // -----------
  376. // this is just needed in the driver
  377. #ifndef MAX_PATH
  378. #define MAX_PATH 260
  379. #endif
  380. typedef struct _TRIGGER
  381. {
  382.     BOOL            TriggerActive;          //... Whether trigger is running
  383.     BYTE            TriggerType;            //... Opcode of trigger
  384.     BYTE            TriggerAction;          //... Action to take when trigger occurs.
  385.     DWORD           TriggerFlags;           //... Trigger flags.
  386.     PATTERNMATCH    TriggerPatternMatch;    //... Trigger pattern match.
  387.     DWORD           TriggerBufferSize;      //... Trigger buffer size.
  388.     DWORD           TriggerReserved;        //... Set to all zeros - do not use
  389.     char            TriggerCommandLine[MAX_PATH];
  390. } TRIGGER;
  391. typedef TRIGGER *LPTRIGGER;
  392. #define TRIGGER_SIZE    sizeof(TRIGGER)
  393. //
  394. //  Capture filter.
  395. //
  396. // -----------
  397. // Constants
  398. // -----------
  399. //  Capture filter flags. By default all frames are rejected and
  400. //  NalSetCaptureFilter enables them based on the CAPTUREFILTER flags
  401. //  defined below.
  402. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_SAPS    0x0001      //... include saps.
  403. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_ETYPES  0x0002      //... include etypes.
  404. #define CAPTUREFILTER_FLAGS_TRIGGER             0x0004      //... process trigger.
  405. #define CAPTUREFILTER_FLAGS_LOCAL_ONLY          0x0008      //... non-promiscuous.
  406. #define CAPTUREFILTER_FLAGS_DISCARD_COMMENTS    0x0010      //... throw away our internal comment frames
  407. #define CAPTUREFILTER_FLAGS_KEEP_RAW        0x0020      //... Keep SMT and Token Ring MAC frames
  408. //.. The following causes both saps and etypes to be included.
  409. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL         0x0003      //... 0x0001 | 0x0002
  410. #define BUFFER_FULL_25_PERCENT                  0 
  411. #define BUFFER_FULL_50_PERCENT                  1 
  412. #define BUFFER_FULL_75_PERCENT                  2 
  413. #define BUFFER_FULL_100_PERCENT                 3 
  414. // -----------
  415. // Structure
  416. // -----------
  417. typedef struct _CAPTUREFILTER
  418. {
  419.     DWORD           FilterFlags;            //... filter flags,
  420.     LPBYTE          lpSapTable;             //... sap table.
  421.     LPWORD          lpEtypeTable;           //... etype table.
  422.     WORD            nSaps;                  //... sap table length.
  423.     WORD            nEtypes;                //... Etype table length.
  424.     LPADDRESSTABLE  AddressTable;           //... Address table.
  425.     EXPRESSION      FilterExpression;       //... Filter expression.
  426.     TRIGGER         Trigger;                //... Trigger structure.
  427.     DWORD           nFrameBytesToCopy;      //... Number of byte of each frame to copy.
  428.     DWORD           Reserved;
  429. } CAPTUREFILTER;
  430. typedef CAPTUREFILTER *LPCAPTUREFILTER;
  431. #define CAPTUREFILTER_SIZE    sizeof(CAPTUREFILTER)
  432. //=============================================================================
  433. //  Frame type.
  434. //=============================================================================
  435. // -----------
  436. // Structure
  437. // -----------
  438. #pragma warning(disable:4200)
  439. typedef struct _FRAME
  440. {
  441.     __int64  TimeStamp;      //... Relative time in 1/1,000,000th seconds.
  442.     DWORD     FrameLength;  //... MAC frame length.
  443.     DWORD     nBytesAvail;  //... Actual frame length copied.
  444.     BYTE      MacFrame[0];  //... Frame data.
  445. } FRAME;
  446. #pragma warning(default:4200)
  447. typedef FRAME *LPFRAME;
  448. typedef FRAME UNALIGNED *ULPFRAME;
  449. #define FRAME_SIZE sizeof(FRAME)
  450. //=============================================================================
  451. //  Frame descriptor type.
  452. //=============================================================================
  453. // -----------
  454. // Constants
  455. // -----------
  456. #define LOW_PROTOCOL_IPX     OFFSET_BASIS_RELATIVE_TO_IPX  
  457. #define LOW_PROTOCOL_IP      OFFSET_BASIS_RELATIVE_TO_IP   
  458. #define LOW_PROTOCOL_UNKNOWN ((BYTE)-1)
  459.                                                             
  460. // -----------
  461. // Structure
  462. // -----------
  463. typedef struct _FRAME_DESCRIPTOR
  464. {
  465.     LPBYTE  FramePointer;       //... Pointer to frame data
  466.     __int64 TimeStamp;      //... Relative time in 1/1,000,000th seconds.
  467.     DWORD   FrameLength;    //... MAC frame length.
  468.     DWORD   nBytesAvail;    //... Actual frame length copied.
  469.     WORD    Etype;
  470.     BYTE    Sap;       
  471.     BYTE    LowProtocol;           //... Index of Protocol found
  472.     WORD    LowProtocolOffset;     //... Offset to protocol data
  473.     GENERIC_PORT HighPort;         //... Port of high protocol in low protocol
  474.     WORD    HighProtocolOffset;    //... Offset to protocol data
  475. } FRAME_DESCRIPTOR;
  476. typedef FRAME_DESCRIPTOR *LPFRAME_DESCRIPTOR;
  477. #define FRAME_DESCRIPTOR_SIZE sizeof(FRAME_DESCRIPTOR)
  478. //=============================================================================
  479. //  Frame descriptor table.
  480. //=============================================================================
  481. // -----------
  482. // Structure
  483. // -----------
  484. typedef struct _FRAMETABLE
  485. {
  486.     DWORD   FrameTableLength;
  487.     DWORD   StartIndex;
  488.     DWORD   EndIndex;
  489.     DWORD   FrameCount;
  490.     FRAME_DESCRIPTOR    Frames[1];
  491. } FRAMETABLE;
  492. typedef FRAMETABLE *LPFRAMETABLE;
  493. //=============================================================================
  494. //  Station statistics.
  495. //=============================================================================
  496. // -----------
  497. // Constants
  498. // -----------
  499. #define STATIONSTATS_FLAGS_INITIALIZED  0x0001      //... Structure has been initialized.
  500. #define STATIONSTATS_FLAGS_EVENTPOSTED  0x0002      //... Nal has posted an event for this entry.
  501. #define STATIONSTATS_POOL_SIZE      100
  502. // -----------
  503. // Structure
  504. // -----------
  505. typedef struct _STATIONSTATS
  506. {
  507.     DWORD           NextStationStats;       //... Index of next Station
  508.     DWORD           SessionPartnerList;     //... Index to the session table
  509.     DWORD           Flags;
  510.     BYTE            StationAddress[6];
  511.     WORD            Pad;                    //... DWORD alignment.
  512.     DWORD           TotalPacketsReceived;
  513.     DWORD           TotalDirectedPacketsSent;
  514.     DWORD           TotalBroadcastPacketsSent;
  515.     DWORD           TotalMulticastPacketsSent;
  516.     DWORD           TotalBytesReceived;
  517.     DWORD           TotalBytesSent;
  518. } STATIONSTATS;
  519. typedef STATIONSTATS * LPSTATIONSTATS;
  520. #define STATIONSTATS_SIZE sizeof(STATIONSTATS)
  521. //=============================================================================
  522. //  Session statistics.
  523. //=============================================================================
  524. // -----------
  525. // Constants
  526. // -----------
  527. #define SESSION_FLAGS_INITIALIZED  0x0001           //... Structure has been initialized.
  528. #define SESSION_FLAGS_EVENTPOSTED  0x0002           //... Nal has posted an event for this entry.
  529. #define SESSION_POOL_SIZE           100
  530. // -----------
  531. // Structure
  532. // -----------
  533. typedef struct _SESSIONSTATS
  534. {
  535.     DWORD           NextSession;            // Index of next session
  536.     DWORD           StationOwner;           // Index of one station
  537.     DWORD           StationPartner;         // Index of the other station
  538.     DWORD           Flags;
  539.     DWORD           TotalPacketsSent;
  540. } SESSIONSTATS;
  541. typedef SESSIONSTATS * LPSESSIONSTATS;
  542. #define SESSIONSTATS_SIZE  sizeof(SESSIONSTATS)
  543. //=============================================================================
  544. //  Station Query
  545. //=============================================================================
  546. // -----------
  547. // Constants
  548. // -----------
  549. #define STATIONQUERY_FLAGS_LOADED       0x0001      //... Driver is loaded but the kernel is not.
  550. #define STATIONQUERY_FLAGS_RUNNING      0x0002      //... Driver is loaded but not capturing.
  551. #define STATIONQUERY_FLAGS_CAPTURING    0x0004      //... Driver is actively capturing.
  552. #define STATIONQUERY_FLAGS_TRANSMITTING 0x0008      //... Driver is actively transmitting.
  553. // -----------
  554. // Structure
  555. // -----------
  556. #define STATIONQUERY_VERSION_MINOR      0x01
  557. #define STATIONQUERY_VERSION_MAJOR      0x02
  558. typedef struct _OLDSTATIONQUERY
  559. {
  560.     DWORD           Flags;                              //... Current state of Network Monitor.
  561.     BYTE            BCDVerMinor;                        //... Binary coded decimal (minor).
  562.     BYTE            BCDVerMajor;                        //... Binary coded decimal (major).
  563.     DWORD           LicenseNumber;                      //... Software license number.
  564.     BYTE            MachineName[MACHINE_NAME_LENGTH];   //... Machine name, if any.
  565.     BYTE            UserName[USER_NAME_LENGTH];         //... Username name, if any.
  566.     BYTE            Reserved[32];                       //... Reserved.
  567.     BYTE            AdapterAddress[6];                  //... NIC address.
  568. } OLDSTATIONQUERY;
  569. typedef OLDSTATIONQUERY *LPOLDSTATIONQUERY;
  570. #define OLDSTATIONQUERY_SIZE sizeof(OLDSTATIONQUERY)
  571. typedef struct _STATIONQUERY
  572. {
  573.     DWORD           Flags;                              //... Current state of Network Monitor.
  574.     BYTE            BCDVerMinor;                        //... Binary coded decimal (minor).
  575.     BYTE            BCDVerMajor;                        //... Binary coded decimal (major).
  576.     DWORD           LicenseNumber;                      //... Software license number.
  577.     BYTE            MachineName[MACHINE_NAME_LENGTH];   //... Machine name, if any.
  578.     BYTE            UserName[USER_NAME_LENGTH];         //... Username name, if any.
  579.     BYTE            Reserved[32];                       //... Reserved.
  580.     BYTE            AdapterAddress[6];                  //... NIC address.
  581.     WCHAR           WMachineName[MACHINE_NAME_LENGTH];  //... Wide Machine name, if any.
  582.     WCHAR           WUserName[USER_NAME_LENGTH];        //... Wide Username name, if any.
  583. } STATIONQUERY;
  584. typedef STATIONQUERY *LPSTATIONQUERY;
  585. #define STATIONQUERY_SIZE sizeof(STATIONQUERY)
  586. //=============================================================================
  587. //  QUERYTABLE structure.
  588. //=============================================================================
  589. // -----------
  590. // Structure
  591. // -----------
  592. typedef struct _QUERYTABLE
  593. {
  594.                                 DWORD           nStationQueries;
  595.                                 STATIONQUERY    StationQuery[1];
  596. } QUERYTABLE;
  597. typedef QUERYTABLE *LPQUERYTABLE;
  598. #define QUERYTABLE_SIZE sizeof(QUERYTABLE)
  599. //=============================================================================
  600. //  The LINK structure is used to chain structures together into a list.
  601. //=============================================================================
  602. #ifndef _LINK_
  603. #define _LINK_
  604. typedef struct _LINK *LPLINK;
  605. typedef struct _LINK
  606. {
  607.     LPLINK     PrevLink;                    //... Previous or back pointer.
  608.     LPLINK     NextLink;                    //... Next or forward pointer.
  609. } LINK;
  610. #endif //_LINK_
  611. //=============================================================================
  612. //  Security Request packet
  613. //=============================================================================
  614. typedef struct _SECURITY_PERMISSION_CHECK
  615. {
  616.     UINT        Version;
  617.     DWORD       RandomNumber;
  618.     BYTE        MachineName[MACHINE_NAME_LENGTH];
  619.     BYTE        UserName[USER_NAME_LENGTH];
  620.     UINT        MacType;                            //... Mac type.
  621.     BYTE        PermanentAdapterAddress[MAC_ADDRESS_SIZE];
  622.     BYTE        CurrentAdapterAddress[MAC_ADDRESS_SIZE];
  623.     WCHAR       WMachineName[MACHINE_NAME_LENGTH];
  624.     WCHAR       WUserName[USER_NAME_LENGTH];
  625. } SECURITY_PERMISSION_CHECK;
  626. typedef SECURITY_PERMISSION_CHECK * LPSECURITY_PERMISSION_CHECK;
  627. typedef SECURITY_PERMISSION_CHECK UNALIGNED * ULPSECURITY_PERMISSION_CHECK;
  628. #define SECURITY_PERMISSION_CHECK_SIZE     sizeof(SECURITY_PERMISSION_CHECK)
  629. //=============================================================================
  630. //  Security Response packet
  631. //=============================================================================
  632. #define MAX_SECURITY_BREACH_REASON_SIZE             100
  633. #define MAX_SIGNATURE_LENGTH                        128
  634. #define MAX_USER_NAME_LENGTH                        256
  635. typedef struct _SECURITY_PERMISSION_RESPONSE
  636. {
  637.     UINT        Version;
  638.     DWORD       RandomNumber;
  639.     BYTE        MachineName[MACHINE_NAME_LENGTH];
  640.     BYTE        Address[MAC_ADDRESS_SIZE];
  641.     BYTE        UserName[MAX_USER_NAME_LENGTH];
  642.     BYTE        Reason[MAX_SECURITY_BREACH_REASON_SIZE];
  643.     DWORD       SignatureLength;
  644.     BYTE        Signature[MAX_SIGNATURE_LENGTH];
  645. } SECURITY_PERMISSION_RESPONSE;
  646. typedef SECURITY_PERMISSION_RESPONSE * LPSECURITY_PERMISSION_RESPONSE;
  647. typedef SECURITY_PERMISSION_RESPONSE UNALIGNED * ULPSECURITY_PERMISSION_RESPONSE;
  648. #define SECURITY_PERMISSION_RESPONSE_SIZE     sizeof(SECURITY_PERMISSION_RESPONSE)
  649. //
  650. //  Callback type
  651. //
  652. //
  653. // An UpdateEvent structure is part of an open context (defined below).
  654. // As events occur, the update thread is released. While the thread
  655. // is processing events, we want to be sure we don't lose any events.
  656. // A queue of UpdateEvent structures is used for that purpose.
  657. //
  658. // -----------
  659. // Constants
  660. // -----------
  661. // generic events
  662. #define UPDATE_EVENT_TERMINATE_THREAD               0x00000000
  663. #define UPDATE_EVENT_NETWORK_STATUS                 0x00000001
  664. // rtc events
  665. #define UPDATE_EVENT_RTC_INTERVAL_ELAPSED           0x00000002
  666. #define UPDATE_EVENT_RTC_FRAME_TABLE_FULL           0x00000003
  667. #define UPDATE_EVENT_RTC_BUFFER_FULL                0x00000004
  668. // delayed events
  669. #define UPDATE_EVENT_TRIGGER_BUFFER_CONTENT         0x00000005
  670. #define UPDATE_EVENT_TRIGGER_PATTERN_MATCH          0x00000006
  671. #define UPDATE_EVENT_TRIGGER_BUFFER_PATTERN         0x00000007
  672. #define UPDATE_EVENT_TRIGGER_PATTERN_BUFFER         0x00000008
  673. // transmit events
  674. #define UPDATE_EVENT_TRANSMIT_STATUS                0x00000009
  675. // Security events
  676. #define UPDATE_EVENT_SECURITY_BREACH                0x0000000A
  677. // Remote failure event
  678. #define UPDATE_EVENT_REMOTE_FAILURE                 0x0000000B
  679. // actions
  680. #define UPDATE_ACTION_TERMINATE_THREAD              0x00000000
  681. #define UPDATE_ACTION_NOTIFY                        0x00000001
  682. #define UPDATE_ACTION_STOP_CAPTURE                  0x00000002
  683. #define UPDATE_ACTION_PAUSE_CAPTURE                 0x00000003
  684. #define UPDATE_ACTION_RTC_BUFFER_SWITCH             0x00000004
  685.                                                         
  686. // -----------
  687. // Structures
  688. // -----------
  689. typedef struct _UPDATE_EVENT 
  690. {
  691.     USHORT          Event;          //... Actual event being recorded
  692.     DWORD           Action;         //... What action was taken
  693.     DWORD           Status;         //... Usually network status
  694.     DWORD           Value;          //... Auxilary counter variable
  695.     __int64         TimeStamp;      //... Mark the events( in millionths of a second)
  696.     LPVOID          lpUserContext;  //... User context given by App
  697.     LPVOID          lpReserved;     //... Driver/NAL use
  698.     UINT            FramesDropped;  //... RTF frames dropped in this buffer
  699.     union
  700.     {
  701.         DWORD           Reserved;       //... No data comes back with this switch option.
  702.         LPFRAMETABLE    lpFrameTable;   //... RTF only
  703.         SECURITY_PERMISSION_RESPONSE SecurityResponse;// remote security monitor response
  704.     };
  705.     // this is only filled in on non-security related stops (ie. triggers)
  706.     LPSTATISTICS lpFinalStats;
  707. } UPDATE_EVENT;
  708. typedef UPDATE_EVENT *PUPDATE_EVENT;
  709. // note for c++ users:
  710. // the declaration for this callback should be in the public part of the header file:
  711. // static WINAPI DWORD NetworkCallback( UPDATE_EVENT events);
  712. // and the implementation should be, in the protected section of the cpp file:
  713. // DWORD WINAPI ClassName::NetworkCallback( UPDATE_EVENT events) {};
  714. //typedef DWORD (WINAPI *LPNETWORKCALLBACKPROC)( UPDATE_EVENT);
  715. typedef DWORD (WINAPI *LPNETWORKCALLBACKPROC)( UPDATE_EVENT);
  716.  
  717. //=============================================================================
  718. //  NETWORKSTATUS data structure.
  719. //=============================================================================
  720. typedef struct _NETWORKSTATUS
  721. {
  722.     DWORD       State;                                      //... Current state.
  723.     DWORD       Flags;                                      //... Current flags.
  724. //    DWORD       BufferSize;                                 //... Capture buffer size.
  725. } NETWORKSTATUS;
  726. typedef NETWORKSTATUS *LPNETWORKSTATUS;
  727. #define NETWORKSTATUS_SIZE   sizeof(NETWORKSTATUS)
  728. #define NETWORKSTATUS_STATE_VOID                0           //... Nothing state.
  729. #define NETWORKSTATUS_STATE_INIT                1           //... Initial state.
  730. #define NETWORKSTATUS_STATE_CAPTURING           2           //... Capturing state.
  731. #define NETWORKSTATUS_STATE_PAUSED              3           //... Paused state.
  732. #define NETWORKSTATUS_FLAGS_TRIGGER_PENDING     0x0001      //... Trigger pending.
  733. //
  734. //  BONEPACKET structure.
  735. //=============================================================================
  736. typedef struct _BONEPACKET
  737. {
  738.     DWORD       Signature;                  //... 'RTSS'
  739.     BYTE        Command;                    //... packet command field.
  740.     BYTE        Flags;                      //... flags.
  741.     DWORD       Reserved;                   //... reserved.
  742.     WORD        Length;                     //... length of data, if any.
  743. } BONEPACKET;
  744. typedef BONEPACKET *LPBONEPACKET;
  745. #define BONEPACKET_SIZE     sizeof(BONEPACKET)
  746. //=============================================================================
  747. //  BONE alert packet.
  748. //=============================================================================
  749. typedef struct _ALERT
  750. {
  751.     DWORD           AlertCode;                          //... Alert code.
  752.     WCHAR           WMachineName[MACHINE_NAME_LENGTH];   //... Machine name, if any.
  753.     WCHAR           WUserName[USER_NAME_LENGTH];         //... Username name, if any.
  754.     union
  755.     {
  756.         BYTE            Pad[32];                        //... Alert code-specific data.
  757.         DWORD           nFramesToSend;                  //... Transmit alert data.
  758.     };
  759. } ALERT;
  760. typedef ALERT *LPALERT;
  761. #define ALERT_SIZE sizeof(ALERT)
  762. //... Alert codes.
  763. #define ALERT_CODE_BEGIN_TRANSMIT           0
  764. //
  765. //  BONEPACKET signature.
  766. //
  767. #define MAKE_WORD(l, h)         (((WORD) (l)) | (((WORD) (h)) << 8))
  768. #define MAKE_LONG(l, h)         (((DWORD) (l)) | (((DWORD) (h)) << 16L))
  769. #define MAKE_SIG(a, b, c, d)    MAKE_LONG(MAKE_WORD(a, b), MAKE_WORD(c, d))
  770. #define BONE_PACKET_SIGNATURE   MAKE_SIG('R', 'T', 'S', 'S')
  771. //
  772. //  BONEPACKET commands.
  773. //
  774. #define BONE_COMMAND_STATION_QUERY_REQUEST      0
  775. #define BONE_COMMAND_STATION_QUERY_RESPONSE     1
  776. #define BONE_COMMAND_ALERT                      2
  777. #define BONE_COMMAND_PERMISSION_CHECK           3
  778. #define BONE_COMMAND_PERMISSION_RESPONSE        4
  779. #define BONE_COMMAND_SECURITY_MONITOR_EVENT     5
  780. //
  781. //  STATISTICS parameter structure return from OpenNetwork().
  782. //
  783. #define MAX_SESSIONS    100
  784. #define MAX_STATIONS    100
  785. typedef struct _STATISTICSPARAM
  786. {
  787.     DWORD           StatisticsSize;             //... Number of bytes.
  788.     STATISTICS      Statistics;
  789.     DWORD           StatisticsTableEntries;     //... Number of entries.
  790.     STATIONSTATS    StatisticsTable[MAX_STATIONS];
  791.     DWORD           SessionTableEntries;        //... Number of entries.
  792.     SESSIONSTATS    SessionTable[MAX_SESSIONS];
  793. } STATISTICSPARAM;
  794. typedef STATISTICSPARAM *LPSTATISTICSPARAM;
  795. #define STATISTICSPARAM_SIZE  sizeof(STATISTICSPARAM)
  796. //=============================================================================
  797. //  Capture file header.
  798. //=============================================================================
  799. #define CAPTUREFILE_VERSION_MAJOR   2
  800. #define CAPTUREFILE_VERSION_MINOR   0
  801. #define MakeVersion(Major, Minor)   ((DWORD) MAKEWORD(Minor, Major))
  802. #define GetCurrentVersion()         MakeVersion(CAPTUREFILE_VERSION_MAJOR, CAPTUREFILE_VERSION_MINOR)
  803. #define NETMON_1_0_CAPTUREFILE_SIGNATURE     MAKE_IDENTIFIER('R', 'T', 'S', 'S')
  804. #define NETMON_2_0_CAPTUREFILE_SIGNATURE     MAKE_IDENTIFIER('G', 'M', 'B', 'U')
  805. typedef struct _CAPTUREFILE_HEADER_VALUES
  806. {
  807.     DWORD      Signature;                //... Unique identifier: 'RTSS'.
  808.     BYTE       BCDVerMinor;              //... Binary coded decimal (minor).
  809.     BYTE       BCDVerMajor;              //... Binary coded decimal (major).
  810.     WORD       MacType;                  //... Topology type.
  811.     SYSTEMTIME TimeStamp;                //... time of capture.
  812.     DWORD      FrameTableOffset;         //... Frame index table.
  813.     DWORD      FrameTableLength;         //... Frame index table size.
  814.     DWORD      UserDataOffset;           //... User data offset.
  815.     DWORD      UserDataLength;           //... User data length.
  816.     DWORD      CommentDataOffset;        //... Comment Data offset
  817.     DWORD      CommentDataLength;        //... Length of comment data.
  818.     DWORD      StatisticsOffset;         //....offset to STATISTICS STRUCTURE
  819.     DWORD      StatisticsLength;         //....length of stats struct
  820.     DWORD      NetworkInfoOffset;        //....offset to network info structure
  821.     DWORD      NetworkInfoLength;        //....length of network info structure
  822.     DWORD      ConversationStatsOffset;  //....offset of conv stats structure
  823.     DWORD      ConversationStatsLength;  //....length of conv stats structure
  824. } CAPTUREFILE_HEADER_VALUES;
  825. typedef CAPTUREFILE_HEADER_VALUES  *LPCAPTUREFILE_HEADER_VALUES;
  826. #define CAPTUREFILE_HEADER_VALUES_SIZE sizeof(CAPTUREFILE_HEADER_VALUES)
  827. //=============================================================================
  828. //  Capture file.
  829. //=============================================================================
  830. typedef struct _CAPTUREFILE_HEADER
  831. {
  832.     union
  833.     {
  834.         CAPTUREFILE_HEADER_VALUES  ActualHeader;
  835.         BYTE  Buffer[CAPTUREFILE_HEADER_VALUES_SIZE];
  836.     };
  837.     BYTE                    Reserved[128 - CAPTUREFILE_HEADER_VALUES_SIZE];
  838. } CAPTUREFILE_HEADER;
  839. typedef CAPTUREFILE_HEADER         *LPCAPTUREFILE_HEADER;
  840. #define CAPTUREFILE_HEADER_SIZE     sizeof(CAPTUREFILE_HEADER)
  841. //=============================================================================
  842. //  Stats Frame definitions.
  843. //=============================================================================
  844. //=============================================================================
  845. //  Stats Frame definitions.
  846. //=============================================================================
  847. typedef struct _EFRAMEHDR
  848. {
  849.     BYTE    SrcAddress[6];
  850.     BYTE    DstAddress[6];
  851.     WORD    Length;
  852.     BYTE    DSAP;
  853.     BYTE    SSAP;
  854.     BYTE    Control;
  855.     BYTE    ProtocolID[3];
  856.     WORD    EtherType;
  857. } EFRAMEHDR;
  858.  
  859. typedef struct _TRFRAMEHDR
  860. {
  861.     BYTE    AC;
  862.     BYTE    FC;
  863.     BYTE    SrcAddress[6];
  864.     BYTE    DstAddress[6];
  865.     BYTE    DSAP;
  866.     BYTE    SSAP;
  867.     BYTE    Control;
  868.     BYTE    ProtocolID[3];
  869.     WORD    EtherType;
  870. } TRFRAMEHDR;
  871.  
  872. #define DEFAULT_TR_AC       0x00
  873. #define DEFAULT_TR_FC       0x40
  874. #define DEFAULT_SAP         0xAA
  875. #define DEFAULT_CONTROL     0x03
  876. #define DEFAULT_ETHERTYPE   0x8419
  877.  
  878. typedef struct _FDDIFRAMEHDR
  879. {
  880.     BYTE    FC;
  881.     BYTE    SrcAddress[6];
  882.     BYTE    DstAddress[6];
  883.     BYTE    DSAP;
  884.     BYTE    SSAP;
  885.     BYTE    Control;
  886.     BYTE    ProtocolID[3];
  887.     WORD    EtherType;
  888. } FDDIFRAMEHDR;
  889. #define DEFAULT_FDDI_FC      0x10
  890.  
  891. typedef struct _FDDISTATFRAME
  892. {
  893.     __int64     TimeStamp;          //... Relative time in milliseconds.
  894.     DWORD       FrameLength;        //... MAC frame length.
  895.     DWORD       nBytesAvail;        //... Actual frame length copied.
  896.     FDDIFRAMEHDR  FrameHeader;
  897.     BYTE        FrameID[4];         //... $MST
  898.     DWORD       Flags;              //... Flags
  899.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  900.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  901.     DWORD       StatsVersion;
  902.     STATISTICS  Statistics;
  903. } FDDISTATFRAME;
  904.  
  905. typedef FDDISTATFRAME *LPFDDISTATFRAME;
  906. typedef FDDISTATFRAME UNALIGNED *ULPFDDISTATFRAME;
  907.  
  908. #define FDDISTATFRAME_SIZE  sizeof(FDDISTATFRAME)
  909.  
  910. typedef struct _TRSTATFRAME
  911. {
  912.     __int64     TimeStamp;          //... Relative time in milliseconds.
  913.     DWORD       FrameLength;        //... MAC frame length.
  914.     DWORD       nBytesAvail;        //... Actual frame length copied.
  915.     TRFRAMEHDR  FrameHeader;
  916.     BYTE        FrameID[4];         //... $MST
  917.     DWORD       Flags;              //... Flags
  918.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  919.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  920.     DWORD       StatsVersion;
  921.     STATISTICS  Statistics;
  922. } TRSTATFRAME;
  923.  
  924. typedef TRSTATFRAME *LPTRSTATFRAME;
  925. typedef TRSTATFRAME UNALIGNED *ULPTRSTATFRAME;
  926.  
  927. #define TRSTATFRAME_SIZE  sizeof(TRSTATFRAME)
  928.  
  929. typedef struct _ESTATFRAME
  930. {
  931.     __int64     TimeStamp;          //... Relative time in milliseconds.
  932.     DWORD       FrameLength;        //... MAC frame length.
  933.     DWORD       nBytesAvail;        //... Actual frame length copied.
  934.     EFRAMEHDR   FrameHeader;
  935.     BYTE        FrameID[4];         //... $MST
  936.     DWORD       Flags;              //... Flags
  937.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  938.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  939.     DWORD       StatsVersion;
  940.     STATISTICS  Statistics;
  941. } ESTATFRAME;
  942.  
  943.  
  944. #define STATISTICS_VERSION_1_0  0x00000000
  945. #define STATISTICS_VERSION_2_0  0x00000020
  946.  
  947. typedef ESTATFRAME *LPESTATFRAME;
  948. typedef ESTATFRAME UNALIGNED *ULPESTATFRAME;
  949. #define ESTATFRAME_SIZE  sizeof(ESTATFRAME)
  950.  
  951. // this variable could change if any of the above sizes changed
  952. #define MAX_STATSFRAME_SIZE sizeof(TRSTATFRAME)
  953.  
  954. #define STATS_FRAME_TYPE   103
  955. #pragma pack()
  956. #endif //__npptypes_h__