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

  1.  
  2. //=============================================================================
  3. //  Microsoft (R) Bloodhound (tm). Copyright (C) 1991-1998.
  4. //
  5. //  MODULE: bh.h
  6. //
  7. //  This is the top-level include file for all Bloodhound components.
  8. //=============================================================================
  9.  
  10. #if !defined(_BH_)
  11.  
  12. #define _BH_
  13.  
  14. #include "naltypes.h"               //... Network types.
  15. #include "bhsupp.h"                 //... Supplemental API's.
  16. #include "nal.h"                    //... Network definitions.
  17. #include "bhtypes.h"                //... Type definitions for BH.
  18. #include "bherr.h"                  //... Error code definitions for BH.
  19. #include "bhfilter.h"               //... Filter definitions.
  20. #include "parser.h"                 //... Parser helper functions and structures.
  21. #include "inilib.h"
  22.  
  23. #pragma pack(1)
  24.  
  25. //=============================================================================
  26. //  A frame with no number contains this value as its frame number.
  27. //=============================================================================
  28.  
  29. #define INVALID_FRAME_NUMBER            ((DWORD) -1)
  30.  
  31. //=============================================================================
  32. //  Capture file flags.
  33. //=============================================================================
  34.  
  35. #define CAPTUREFILE_OPEN                OPEN_EXISTING
  36. #define CAPTUREFILE_CREATE              CREATE_NEW
  37.  
  38. //=============================================================================
  39. //  TRANSMIT API's.
  40. //=============================================================================
  41.  
  42. extern LPTRANSMITSTATS      WINAPI TransmitFrame(HNETWORK   hNetwork,
  43.                                                  HFRAME     hFrame,
  44.                                                  DWORD      Iterations,
  45.                                                  DWORD      TimeDelta,
  46.                                                  LPDWORD    TxCorrelator);
  47.  
  48. extern LPTRANSMITSTATS      WINAPI TransmitCapture(HNETWORK     hNetwork,
  49.                                                    HCAPTURE     hCapture,
  50.                                                    DWORD        StartingFrameNumber,
  51.                                                    DWORD        EndingFrameNumber,
  52.                                                    DWORD        Iterations,
  53.                                                    DWORD        IterationTimeDelta,
  54.                                                    DWORD        TimeDelta,
  55.                                                    FILTERPROC   FilterProc,
  56.                                                    LPVOID       FilterInstData,
  57.                                                    LPDWORD      TxCorrelator);
  58.  
  59. //=============================================================================
  60. //  CAPTURE CONTEXT API's.
  61. //=============================================================================
  62.  
  63. extern DWORD                WINAPI StationQuery(DWORD NetworkID,
  64.                                                LPADDRESS DestAddress,
  65.                                                LPQUERYTABLE QueryTable,
  66.                                                HPASSWORD hPassword);
  67.  
  68. extern HCAPTURE             WINAPI CreateCapture(HWND hWnd,
  69.                                                 HBUFFER hBuffer,
  70.                                                 HPASSWORD hPassword);
  71.  
  72. extern DWORD                WINAPI DestroyCapture(HCAPTURE hCapture);
  73.  
  74. extern LPVOID               WINAPI GetCaptureInstanceData(HCAPTURE hCapture);
  75.  
  76. extern HADDRESSDB           WINAPI GetCaptureAddressDB(HCAPTURE hCapture);
  77.  
  78. extern LPSYSTEMTIME         WINAPI GetCaptureTimeStamp(HCAPTURE hCapture);
  79.  
  80. extern DWORD                WINAPI GetCaptureTotalFrames(HCAPTURE hCapture);
  81.  
  82. extern HBUFFER              WINAPI GetCaptureBuffer(HCAPTURE hCapture);
  83.  
  84. extern LPSTR                WINAPI GetCaptureComment(HCAPTURE hCapture);
  85.  
  86. extern DWORD                WINAPI LoadCapture(HCAPTURE hCapture, LPSTR FileName);
  87.  
  88. extern DWORD                WINAPI SaveCapture(HCAPTURE   hCapture,
  89.                                               LPSTR      FileName,
  90.                                               LPSTR      lpComment,
  91.                                               LPVOID     UserData,
  92.                                               DWORD      UserDataLength,
  93.                                               FILTERPROC FilterProc,
  94.                                               LPVOID     FilterInstData,
  95.                                               DWORD      nFirstFrame,
  96.                                               DWORD      nLastFrame);
  97.  
  98. extern LPVOID               WINAPI SetCaptureInstanceData(HCAPTURE hCapture, LPVOID InstData);
  99.  
  100. extern HADDRESSDB           WINAPI SetCaptureAddressDB(HCAPTURE hCapture, HADDRESSDB);
  101.  
  102. //=============================================================================
  103. //  FRAME HELP API's.
  104. //=============================================================================
  105.  
  106. extern BOOL                 WINAPI ConvertMacAddress(LPADDRESS Address, DWORD NewAddressType);
  107.  
  108. extern DWORD                WINAPI MacTypeToAddressType(DWORD MacType);
  109.  
  110. extern DWORD                WINAPI AddressTypeToMacType(DWORD AddressType);
  111.  
  112. extern DWORD                WINAPI GetFrameDstAddressOffset(HFRAME hFrame, DWORD AddressType, LPDWORD AddressLength);
  113.  
  114. extern DWORD                WINAPI GetFrameSrcAddressOffset(HFRAME hFrame, DWORD AddressType, LPDWORD AddressLength);
  115.  
  116. extern HCAPTURE             WINAPI GetFrameCaptureHandle(HFRAME hFrame);
  117.  
  118.  
  119. extern DWORD                WINAPI GetFrameDestAddress(HFRAME       hFrame,
  120.                                                        LPADDRESS    lpAddress,
  121.                                                        DWORD        AddressType,
  122.                                                        DWORD        Flags);
  123.  
  124. extern DWORD                WINAPI GetFrameSourceAddress(HFRAME     hFrame,
  125.                                                          LPADDRESS  lpAddress,
  126.                                                          DWORD      AddressType,
  127.                                                          DWORD      Flags);
  128.  
  129. extern DWORD                WINAPI GetFrameMacHeaderLength(HFRAME hFrame);
  130.  
  131. extern BOOL                 WINAPI CompareFrameDestAddress(HFRAME hFrame, LPADDRESS lpAddress);
  132.  
  133. extern BOOL                 WINAPI CompareFrameSourceAddress(HFRAME hFrame, LPADDRESS lpAddress);
  134.  
  135. extern DWORD                WINAPI GetFrameLength(HFRAME hFrame);
  136.  
  137. extern DWORD                WINAPI GetFrameStoredLength(HFRAME hFrame);
  138.  
  139. extern DWORD                WINAPI GetFrameMacType(HFRAME hFrame);
  140.  
  141. extern DWORD                WINAPI GetFrameMacHeaderLength(HFRAME hFrame);
  142.  
  143. extern DWORD                WINAPI GetFrameNumber(HFRAME hFrame);
  144.  
  145. extern LPBYTE               WINAPI GetFrameRoutingInformation(HFRAME hFrame, LPDWORD lpRILength);
  146.  
  147. extern DWORD                WINAPI GetFrameTimeStamp(HFRAME hFrame);
  148.  
  149. extern int                  WINAPI CompareRawAddresses(LPBYTE Address1, LPBYTE Address2, UINT AddressType);
  150.  
  151. //=============================================================================
  152. //  FRAME API's.
  153. //=============================================================================
  154.  
  155. extern DWORD                WINAPI InsertFrame(HCAPTURE hCapture, HFRAME hFrame, DWORD FrameNumber);
  156.  
  157. extern DWORD                WINAPI DeleteFrame(HCAPTURE hCapture, DWORD FrameNumber);
  158.  
  159. extern HFRAME               WINAPI ModifyFrame(HCAPTURE hCapture,
  160.                                                DWORD    FrameNumber,
  161.                                                LPBYTE   FrameData,
  162.                                                DWORD    FrameLength,
  163.                                                DWORD    TimeStamp);
  164.  
  165. extern HFRAME               WINAPI CreateFrame(LPBYTE FrameData, DWORD FrameLength, DWORD TimeStamp);
  166.  
  167. extern DWORD                WINAPI DestroyFrame(HFRAME hFrame);
  168.  
  169. extern HFRAME               WINAPI FindNextFrame(HFRAME hCurrentFrame,
  170.                                                 LPSTR ProtocolName,
  171.                                                 LPADDRESS lpDesstAddress,
  172.                                                 LPADDRESS lpSrcAddress,
  173.                                                 LPWORD ProtocolOffset,
  174.                                                 DWORD  OriginalFrameNumber,
  175.                                                 DWORD  nHighestFrame);
  176.  
  177. extern HFRAME               WINAPI FindPreviousFrame(HFRAME hCurrentFrame,
  178.                                                     LPSTR ProtocolName,
  179.                                                     LPADDRESS lpDstAddress,
  180.                                                     LPADDRESS lpSrcAddress,
  181.                                                     LPWORD ProtocolOffset,
  182.                                                     DWORD  OriginalFrameNumber,
  183.                                                     DWORD  nLowestFrame );
  184.  
  185. extern DWORD                WINAPI FrameRecognize(HFRAME hFrame);
  186.  
  187. extern HCAPTURE             WINAPI GetFrameCaptureHandle(HFRAME);
  188.  
  189. extern HFRAME               WINAPI GetFrame(HCAPTURE hCapture, DWORD FrameNumber);
  190.  
  191. extern LPRECOGNIZEDATATABLE WINAPI GetFrameRecognizeData(HFRAME hFrame);
  192.  
  193. extern LPBYTE               WINAPI LockFrame(HFRAME hFrame);
  194.  
  195. extern LPPROPERTYTABLE      WINAPI LockFrameText(HFRAME hFrame);
  196.  
  197. extern LPPROPERTYTABLE      WINAPI LockFramePropertyTable(HFRAME hFrame);
  198.  
  199. extern DWORD                WINAPI UnlockFrame(HFRAME hFrame);
  200.  
  201. extern DWORD                WINAPI UnlockFrameText(HFRAME hFrame);
  202.  
  203. extern DWORD                WINAPI UnlockFramePropertyTable(HFRAME hFrame);
  204.  
  205.  
  206. //=============================================================================
  207. //  AddFrame() is a special form of insert frame, it add the frame to
  208. //  the end of the current capture.
  209. //=============================================================================
  210.  
  211. INLINE DWORD WINAPI AddFrame(HCAPTURE hCapture, HFRAME hFrame)
  212. {
  213.     return InsertFrame(hCapture, hFrame, INVALID_FRAME_NUMBER);
  214. }
  215.  
  216.  
  217. #ifdef DEBUG
  218. extern VOID                 WINAPI DebugShowLocks(HCAPTURE hCapture);
  219.  
  220. extern VOID                 WINAPI DebugGetFrameLocks(HFRAME hFrame, LPDWORD lpLocks, LPDWORD lpPropertyTableLocks);
  221.  
  222. extern BOOL                 WINAPI DebugIsRemote(HCAPTURE hCapture);
  223. #endif
  224.  
  225. //=============================================================================
  226. //  Protocol API's.
  227. //=============================================================================
  228.  
  229. extern HPROTOCOL            WINAPI CreateProtocol(LPSTR ProtocolName,
  230.                                                   LPENTRYPOINTS lpEntryPoints,
  231.                                                   DWORD cbEntryPoints);
  232.  
  233. extern VOID                 WINAPI DestroyProtocol(HPROTOCOL hProtocol);
  234.  
  235. extern DWORD                WINAPI DisableProtocol(HCAPTURE hCapture, HPROTOCOL hProtocol);
  236.  
  237. extern DWORD                WINAPI EnableProtocol(HCAPTURE hCapture, HPROTOCOL hProtocol);
  238.  
  239. extern LPPROTOCOLTABLE      WINAPI EnumProtocols(VOID);
  240.  
  241. extern LPPROTOCOLINFO       WINAPI GetProtocolInfo(HPROTOCOL hProtocol);
  242.  
  243. extern LPSTR                WINAPI GetProtocolDLLName(HPROTOCOL hProtocol);
  244.  
  245. extern HPROPERTY            WINAPI GetProperty(HPROTOCOL hProtocol, LPSTR PropertyName);
  246.  
  247. extern HPROTOCOL            WINAPI GetProtocolFromProperty(HPROPERTY hProperty);
  248.  
  249. extern HPROTOCOL            WINAPI GetProtocolFromName(LPSTR ProtocolName);
  250.  
  251. extern DWORD                WINAPI GetProtocolStartOffset(HFRAME hFrame, LPSTR ProtocolName);
  252.  
  253. extern DWORD                WINAPI GetProtocolStartOffsetHandle(HFRAME hFrame, HPROTOCOL hProtocol);
  254.  
  255. extern LPPROTOCOLTABLE      WINAPI GetEnabledProtocols(HCAPTURE hCapture);
  256.  
  257. extern HPROTOCOL            WINAPI GetProtocolFromProtocolID(DWORD dwProtocolID);
  258.  
  259. extern VOID                 WINAPI SetMaxAmountOfProtocols(DWORD dwAmountOfProtocols);
  260.  
  261. extern DWORD                WINAPI GetMaxAmountOfProtocols();
  262.  
  263. //=============================================================================
  264. //  Property API's.
  265. //=============================================================================
  266.  
  267. extern DWORD                WINAPI CreatePropertyDatabase(HPROTOCOL hProtocol, DWORD nProperties);
  268.  
  269. extern DWORD                WINAPI DestroyPropertyDatabase(HPROTOCOL hProtocol);
  270.  
  271. extern HPROPERTY            WINAPI AddProperty(HPROTOCOL hProtocol, LPPROPERTYINFO PropertyInfo);
  272.  
  273. extern LPPROPERTYINST       WINAPI AttachPropertyInstance(HFRAME    hFrame,
  274.                                                           HPROPERTY hProperty,
  275.                                                           DWORD     Length,
  276.                                                           ULPVOID   lpData,
  277.                                                           DWORD     HelpID,
  278.                                                           DWORD     Level,
  279.                                                           DWORD     IFlags);
  280.  
  281. extern LPPROPERTYINST       WINAPI AttachPropertyInstanceEx(HFRAME      hFrame,
  282.                                                             HPROPERTY   hProperty,
  283.                                                             DWORD       Length,
  284.                                                             ULPVOID     lpData,
  285.                                                             DWORD       ExLength,
  286.                                                             ULPVOID     lpExData,
  287.                                                             DWORD       HelpID,
  288.                                                             DWORD       Level,
  289.                                                             DWORD       IFlags);
  290.  
  291. extern LPPROPERTYINST       WINAPI FindPropertyInstance(HFRAME hFrame, HPROPERTY hProperty);
  292.  
  293. extern LPPROPERTYINFO       WINAPI GetPropertyInfo(HPROPERTY hProperty);
  294.  
  295. extern LPSTR                WINAPI GetPropertyText(HFRAME hFrame, LPPROPERTYINST lpPI, LPSTR szBuffer, DWORD BufferSize);
  296.  
  297. extern INT WINAPI QueryProtocolState(HCAPTURE hCapture, HPROTOCOL hProtocol);
  298.  
  299. //=============================================================================
  300. //  ADDRESS API's.
  301. //=============================================================================
  302.  
  303. extern LPADDRESSINFO        WINAPI AddAddress(HADDRESSDB hAddressDB,
  304.                                               LPADDRESS  lpAddress,
  305.                                               LPSTR      lpName,
  306.                                               LPVOID     InstData);
  307.  
  308. extern HADDRESSDB           WINAPI CreateAddressDatabase(VOID);
  309.  
  310. extern DWORD                WINAPI DeleteAddress(HADDRESSDB hAddressDB, LPADDRESS lpAddressToDelete);
  311.  
  312. extern DWORD                WINAPI DestroyAddressDatabase(HADDRESSDB hAddressDB);
  313.  
  314. extern DWORD                WINAPI EmptyAddressDatabase(HADDRESSDB hAddressDB);
  315.  
  316. extern LPADDRESSINFO        WINAPI GetAddressInfo(HADDRESSDB hAddressDB, LPADDRESS lpAddress);
  317.  
  318. extern LPADDRESSINFO        WINAPI GetAddressInfoByName(HADDRESSDB hAddressDB, LPSTR lpName);
  319.  
  320. extern LPADDRESSINFOTABLE   WINAPI EnumAddresses(HADDRESSDB hAddressDB, int SortByType);
  321.  
  322. extern LPVOID               WINAPI GetAddressDatabaseInstanceData(HADDRESSDB hAddressDB);
  323.  
  324. extern LPVOID               WINAPI SetAddressDatabaseInstanceData(HADDRESSDB hAddressDB, LPVOID InstData);
  325.  
  326. extern LPADDRESSINFO *      WINAPI FindAddressInfoByAddress(LPADDRESSINFOTABLE lpAddressInfoTable, LPADDRESS lpAddress);
  327.  
  328. extern LPADDRESSINFO *      WINAPI FindAddressInfoByName(LPADDRESSINFOTABLE lpAddressInfoTable, LPSTR lpName,
  329.                                                          LPADDRESS lpSpecificAddress );
  330.  
  331. //=============================================================================
  332. //  MISC. API's.
  333. //=============================================================================
  334.  
  335. extern LPSTR                WINAPI GetSystemPath(LPSTR Path, DWORD Length);
  336.  
  337. extern DWORD                WINAPI GetCaptureCommentFromFilename(LPSTR lpFilename, LPSTR lpComment, DWORD BufferSize);
  338.  
  339. extern int                  WINAPI CompareAddresses(LPADDRESS lpAddress1, LPADDRESS lpAddress2);
  340.  
  341. extern DWORD                WINAPIV FormatPropertyInstance(LPPROPERTYINST lpPropertyInst, ...);
  342.  
  343. extern SYSTEMTIME *         WINAPI AdjustSystemTime(SYSTEMTIME *SystemTime, DWORD TimeDelta);
  344.  
  345. //=============================================================================
  346. //  MISC. API's.
  347. //=============================================================================
  348.  
  349. extern VOID                 WINAPI eprintf(LPSTR format, ...);
  350.  
  351. extern VOID                 WINAPI CreateErrorLogEntry(VOID);
  352.  
  353. extern DWORD                WINAPI BHGetLastError(VOID);
  354.  
  355. extern DWORD                WINAPI BHSetLastError(DWORD Error);
  356.  
  357. extern DWORD                WINAPI ResetPropertyInstanceLength( LPPROPERTYINST lpProp,
  358.                                                                 WORD nOrgLen,
  359.                                                                 WORD nNewLen );
  360.  
  361. //=============================================================================
  362. //  DEBUG API's.
  363. //=============================================================================
  364.  
  365. #ifdef DEBUG
  366.  
  367. //=============================================================================
  368. //  BreakPoint() macro.
  369. //=============================================================================
  370.  
  371. #ifdef _X86_
  372. #define BreakPoint()        _asm { int 3h }
  373. #else
  374. #define BreakPoint()        DebugBreak()
  375. #endif
  376.  
  377. //=============================================================================
  378. //  FUNCTION: BhAssert()
  379. //=============================================================================
  380.  
  381. INLINE VOID BhAssert(
  382.     LPVOID  assert,
  383.     LPSTR   file,
  384.     UINT    line,
  385.     LPVOID  msg
  386.     )
  387. {
  388.     if ( msg == NULL )
  389.     {
  390.         dprintf("ASSERT -- %s occured on line %u of file %s.\n",
  391.                  assert,
  392.                  line,
  393.                  file);
  394.     }
  395.     else
  396.     {
  397.         dprintf("ASSERT -- %s occured on line %u of file %s: Message = %s.\n",
  398.                 assert,
  399.                 line,
  400.                 file,
  401.                 msg);
  402.     }
  403. }
  404.  
  405. //=============================================================================
  406. //  MACRO: ASSERT()
  407. //=============================================================================
  408.  
  409. #define ASSERT(exp)                                 \
  410. {                                                   \
  411.     if ( !(exp) )                                   \
  412.     {                                               \
  413.         BhAssert(#exp, __FILE__, __LINE__, NULL);   \
  414.         BreakPoint();                               \
  415.     }                                               \
  416. }                                                   \
  417.  
  418. #define ASSERTMSG(exp, msg)                         \
  419. {                                                   \
  420.     if ( !(exp) )                                   \
  421.     {                                               \
  422.         BhAssert(#exp, __FILE__, __LINE__, msg);    \
  423.         BreakPoint();                               \
  424.     }                                               \
  425. }                                                   \
  426.  
  427. #else   //... DEBUG
  428.  
  429. #define ASSERT(exp)
  430.  
  431. #define ASSERTMSG(exp, msg)
  432.  
  433. #define ASSERT_DWORD_ALIGNMENT(p)       (p)
  434.  
  435. #endif  //... DEBUG
  436.  
  437. //=============================================================================
  438. //  PanicPoint().
  439. //=============================================================================
  440.  
  441. extern VOID WINAPI PanicMessage(UINT line, LPSTR file, LPSTR msg);
  442.  
  443. #ifdef DEBUG
  444.  
  445. #define PanicPoint()                            \
  446.     {                                           \
  447.         PanicMessage(__LINE__, __FILE__, NULL); \
  448.         BreakPoint();                           \
  449.     }
  450.  
  451. #else
  452.  
  453. #define PanicPoint()                            \
  454.     {                                           \
  455.         PanicMessage(__LINE__, __FILE__, NULL); \
  456.     }
  457.  
  458. #endif
  459.  
  460. //=============================================================================
  461. //  Alignment macro.
  462. //=============================================================================
  463.  
  464. #ifndef _X86_
  465. #ifdef DEBUG
  466.  
  467. INLINE LPVOID WINAPI ASSERT_DWORD_ALIGNMENT(LPVOID p)
  468. {
  469.     if ( (((DWORD) (p)) & 0x00000003) != 0 )
  470.     {
  471.         dprintf("Fatal error on line %u of %s. Pointer is not DWORD aligned.", __LINE__, __FILE__);
  472.  
  473.         BreakPoint();
  474.     }
  475.  
  476.     return p;
  477. }
  478.  
  479. #endif
  480.  
  481. #else
  482. #define ASSERT_DWORD_ALIGNMENT(p)       (p)
  483. #endif
  484.  
  485. #pragma pack()
  486. #endif
  487.