489 lines
20 KiB
C
489 lines
20 KiB
C
|
|
//=============================================================================
|
|
// Microsoft (R) Bloodhound (tm). Copyright (C) 1991-1998.
|
|
//
|
|
// MODULE: bh.h
|
|
//
|
|
// This is the top-level include file for all Bloodhound components.
|
|
//=============================================================================
|
|
|
|
#if !defined(_BH_)
|
|
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
|
|
|
#define _BH_
|
|
|
|
#include "naltypes.h" //... Network types.
|
|
#include "bhsupp.h" //... Supplemental API's.
|
|
#include "nal.h" //... Network definitions.
|
|
#include "bhtypes.h" //... Type definitions for BH.
|
|
#include "bherr.h" //... Error code definitions for BH.
|
|
#include "bhfilter.h" //... Filter definitions.
|
|
#include "parser.h" //... Parser helper functions and structures.
|
|
#include "inilib.h"
|
|
|
|
#pragma pack(1)
|
|
|
|
//=============================================================================
|
|
// A frame with no number contains this value as its frame number.
|
|
//=============================================================================
|
|
|
|
#define INVALID_FRAME_NUMBER ((DWORD) -1)
|
|
|
|
//=============================================================================
|
|
// Capture file flags.
|
|
//=============================================================================
|
|
|
|
#define CAPTUREFILE_OPEN OPEN_EXISTING
|
|
#define CAPTUREFILE_CREATE CREATE_NEW
|
|
|
|
//=============================================================================
|
|
// TRANSMIT API's.
|
|
//=============================================================================
|
|
|
|
extern LPTRANSMITSTATS WINAPI TransmitFrame(HNETWORK hNetwork,
|
|
HFRAME hFrame,
|
|
DWORD Iterations,
|
|
DWORD TimeDelta,
|
|
LPDWORD TxCorrelator);
|
|
|
|
extern LPTRANSMITSTATS WINAPI TransmitCapture(HNETWORK hNetwork,
|
|
HCAPTURE hCapture,
|
|
DWORD StartingFrameNumber,
|
|
DWORD EndingFrameNumber,
|
|
DWORD Iterations,
|
|
DWORD IterationTimeDelta,
|
|
DWORD TimeDelta,
|
|
FILTERPROC FilterProc,
|
|
LPVOID FilterInstData,
|
|
LPDWORD TxCorrelator);
|
|
|
|
//=============================================================================
|
|
// CAPTURE CONTEXT API's.
|
|
//=============================================================================
|
|
|
|
extern DWORD WINAPI StationQuery(DWORD NetworkID,
|
|
LPADDRESS DestAddress,
|
|
LPQUERYTABLE QueryTable,
|
|
HPASSWORD hPassword);
|
|
|
|
extern HCAPTURE WINAPI CreateCapture(HWND hWnd,
|
|
HBUFFER hBuffer,
|
|
HPASSWORD hPassword);
|
|
|
|
extern DWORD WINAPI DestroyCapture(HCAPTURE hCapture);
|
|
|
|
extern LPVOID WINAPI GetCaptureInstanceData(HCAPTURE hCapture);
|
|
|
|
extern HADDRESSDB WINAPI GetCaptureAddressDB(HCAPTURE hCapture);
|
|
|
|
extern LPSYSTEMTIME WINAPI GetCaptureTimeStamp(HCAPTURE hCapture);
|
|
|
|
extern DWORD WINAPI GetCaptureTotalFrames(HCAPTURE hCapture);
|
|
|
|
extern HBUFFER WINAPI GetCaptureBuffer(HCAPTURE hCapture);
|
|
|
|
extern LPSTR WINAPI GetCaptureComment(HCAPTURE hCapture);
|
|
|
|
extern DWORD WINAPI LoadCapture(HCAPTURE hCapture, LPSTR FileName);
|
|
|
|
extern DWORD WINAPI SaveCapture(HCAPTURE hCapture,
|
|
LPSTR FileName,
|
|
LPSTR lpComment,
|
|
LPVOID UserData,
|
|
DWORD UserDataLength,
|
|
FILTERPROC FilterProc,
|
|
LPVOID FilterInstData,
|
|
DWORD nFirstFrame,
|
|
DWORD nLastFrame);
|
|
|
|
extern LPVOID WINAPI SetCaptureInstanceData(HCAPTURE hCapture, LPVOID InstData);
|
|
|
|
extern HADDRESSDB WINAPI SetCaptureAddressDB(HCAPTURE hCapture, HADDRESSDB);
|
|
|
|
//=============================================================================
|
|
// FRAME HELP API's.
|
|
//=============================================================================
|
|
|
|
extern BOOL WINAPI ConvertMacAddress(LPADDRESS Address, DWORD NewAddressType);
|
|
|
|
extern DWORD WINAPI MacTypeToAddressType(DWORD MacType);
|
|
|
|
extern DWORD WINAPI AddressTypeToMacType(DWORD AddressType);
|
|
|
|
extern DWORD WINAPI GetFrameDstAddressOffset(HFRAME hFrame, DWORD AddressType, LPDWORD AddressLength);
|
|
|
|
extern DWORD WINAPI GetFrameSrcAddressOffset(HFRAME hFrame, DWORD AddressType, LPDWORD AddressLength);
|
|
|
|
extern HCAPTURE WINAPI GetFrameCaptureHandle(HFRAME hFrame);
|
|
|
|
|
|
extern DWORD WINAPI GetFrameDestAddress(HFRAME hFrame,
|
|
LPADDRESS lpAddress,
|
|
DWORD AddressType,
|
|
DWORD Flags);
|
|
|
|
extern DWORD WINAPI GetFrameSourceAddress(HFRAME hFrame,
|
|
LPADDRESS lpAddress,
|
|
DWORD AddressType,
|
|
DWORD Flags);
|
|
|
|
extern DWORD WINAPI GetFrameMacHeaderLength(HFRAME hFrame);
|
|
|
|
extern BOOL WINAPI CompareFrameDestAddress(HFRAME hFrame, LPADDRESS lpAddress);
|
|
|
|
extern BOOL WINAPI CompareFrameSourceAddress(HFRAME hFrame, LPADDRESS lpAddress);
|
|
|
|
extern DWORD WINAPI GetFrameLength(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI GetFrameStoredLength(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI GetFrameMacType(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI GetFrameMacHeaderLength(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI GetFrameNumber(HFRAME hFrame);
|
|
|
|
extern LPBYTE WINAPI GetFrameRoutingInformation(HFRAME hFrame, LPDWORD lpRILength);
|
|
|
|
extern DWORD WINAPI GetFrameTimeStamp(HFRAME hFrame);
|
|
|
|
extern int WINAPI CompareRawAddresses(LPBYTE Address1, LPBYTE Address2, UINT AddressType);
|
|
|
|
//=============================================================================
|
|
// FRAME API's.
|
|
//=============================================================================
|
|
|
|
extern DWORD WINAPI InsertFrame(HCAPTURE hCapture, HFRAME hFrame, DWORD FrameNumber);
|
|
|
|
extern DWORD WINAPI DeleteFrame(HCAPTURE hCapture, DWORD FrameNumber);
|
|
|
|
extern HFRAME WINAPI ModifyFrame(HCAPTURE hCapture,
|
|
DWORD FrameNumber,
|
|
LPBYTE FrameData,
|
|
DWORD FrameLength,
|
|
DWORD TimeStamp);
|
|
|
|
extern HFRAME WINAPI CreateFrame(LPBYTE FrameData, DWORD FrameLength, DWORD TimeStamp);
|
|
|
|
extern DWORD WINAPI DestroyFrame(HFRAME hFrame);
|
|
|
|
extern HFRAME WINAPI FindNextFrame(HFRAME hCurrentFrame,
|
|
LPSTR ProtocolName,
|
|
LPADDRESS lpDesstAddress,
|
|
LPADDRESS lpSrcAddress,
|
|
LPWORD ProtocolOffset,
|
|
DWORD OriginalFrameNumber,
|
|
DWORD nHighestFrame);
|
|
|
|
extern HFRAME WINAPI FindPreviousFrame(HFRAME hCurrentFrame,
|
|
LPSTR ProtocolName,
|
|
LPADDRESS lpDstAddress,
|
|
LPADDRESS lpSrcAddress,
|
|
LPWORD ProtocolOffset,
|
|
DWORD OriginalFrameNumber,
|
|
DWORD nLowestFrame );
|
|
|
|
extern DWORD WINAPI FrameRecognize(HFRAME hFrame);
|
|
|
|
extern HCAPTURE WINAPI GetFrameCaptureHandle(HFRAME);
|
|
|
|
extern HFRAME WINAPI GetFrame(HCAPTURE hCapture, DWORD FrameNumber);
|
|
|
|
extern LPRECOGNIZEDATATABLE WINAPI GetFrameRecognizeData(HFRAME hFrame);
|
|
|
|
extern LPBYTE WINAPI LockFrame(HFRAME hFrame);
|
|
|
|
extern LPPROPERTYTABLE WINAPI LockFrameText(HFRAME hFrame);
|
|
|
|
extern LPPROPERTYTABLE WINAPI LockFramePropertyTable(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI UnlockFrame(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI UnlockFrameText(HFRAME hFrame);
|
|
|
|
extern DWORD WINAPI UnlockFramePropertyTable(HFRAME hFrame);
|
|
|
|
|
|
//=============================================================================
|
|
// AddFrame() is a special form of insert frame, it add the frame to
|
|
// the end of the current capture.
|
|
//=============================================================================
|
|
|
|
INLINE DWORD WINAPI AddFrame(HCAPTURE hCapture, HFRAME hFrame)
|
|
{
|
|
return InsertFrame(hCapture, hFrame, INVALID_FRAME_NUMBER);
|
|
}
|
|
|
|
|
|
#ifdef DEBUG
|
|
extern VOID WINAPI DebugShowLocks(HCAPTURE hCapture);
|
|
|
|
extern VOID WINAPI DebugGetFrameLocks(HFRAME hFrame, LPDWORD lpLocks, LPDWORD lpPropertyTableLocks);
|
|
|
|
extern BOOL WINAPI DebugIsRemote(HCAPTURE hCapture);
|
|
#endif
|
|
|
|
//=============================================================================
|
|
// Protocol API's.
|
|
//=============================================================================
|
|
|
|
extern HPROTOCOL WINAPI CreateProtocol(LPSTR ProtocolName,
|
|
LPENTRYPOINTS lpEntryPoints,
|
|
DWORD cbEntryPoints);
|
|
|
|
extern VOID WINAPI DestroyProtocol(HPROTOCOL hProtocol);
|
|
|
|
extern DWORD WINAPI DisableProtocol(HCAPTURE hCapture, HPROTOCOL hProtocol);
|
|
|
|
extern DWORD WINAPI EnableProtocol(HCAPTURE hCapture, HPROTOCOL hProtocol);
|
|
|
|
extern LPPROTOCOLTABLE WINAPI EnumProtocols(VOID);
|
|
|
|
extern LPPROTOCOLINFO WINAPI GetProtocolInfo(HPROTOCOL hProtocol);
|
|
|
|
extern LPSTR WINAPI GetProtocolDLLName(HPROTOCOL hProtocol);
|
|
|
|
extern HPROPERTY WINAPI GetProperty(HPROTOCOL hProtocol, LPSTR PropertyName);
|
|
|
|
extern HPROTOCOL WINAPI GetProtocolFromProperty(HPROPERTY hProperty);
|
|
|
|
extern HPROTOCOL WINAPI GetProtocolFromName(LPSTR ProtocolName);
|
|
|
|
extern DWORD WINAPI GetProtocolStartOffset(HFRAME hFrame, LPSTR ProtocolName);
|
|
|
|
extern DWORD WINAPI GetProtocolStartOffsetHandle(HFRAME hFrame, HPROTOCOL hProtocol);
|
|
|
|
extern LPPROTOCOLTABLE WINAPI GetEnabledProtocols(HCAPTURE hCapture);
|
|
|
|
extern HPROTOCOL WINAPI GetProtocolFromProtocolID(DWORD dwProtocolID);
|
|
|
|
extern VOID WINAPI SetMaxAmountOfProtocols(DWORD dwAmountOfProtocols);
|
|
|
|
extern DWORD WINAPI GetMaxAmountOfProtocols();
|
|
|
|
//=============================================================================
|
|
// Property API's.
|
|
//=============================================================================
|
|
|
|
extern DWORD WINAPI CreatePropertyDatabase(HPROTOCOL hProtocol, DWORD nProperties);
|
|
|
|
extern DWORD WINAPI DestroyPropertyDatabase(HPROTOCOL hProtocol);
|
|
|
|
extern HPROPERTY WINAPI AddProperty(HPROTOCOL hProtocol, LPPROPERTYINFO PropertyInfo);
|
|
|
|
extern LPPROPERTYINST WINAPI AttachPropertyInstance(HFRAME hFrame,
|
|
HPROPERTY hProperty,
|
|
DWORD Length,
|
|
ULPVOID lpData,
|
|
DWORD HelpID,
|
|
DWORD Level,
|
|
DWORD IFlags);
|
|
|
|
extern LPPROPERTYINST WINAPI AttachPropertyInstanceEx(HFRAME hFrame,
|
|
HPROPERTY hProperty,
|
|
DWORD Length,
|
|
ULPVOID lpData,
|
|
DWORD ExLength,
|
|
ULPVOID lpExData,
|
|
DWORD HelpID,
|
|
DWORD Level,
|
|
DWORD IFlags);
|
|
|
|
extern LPPROPERTYINST WINAPI FindPropertyInstance(HFRAME hFrame, HPROPERTY hProperty);
|
|
|
|
extern LPPROPERTYINFO WINAPI GetPropertyInfo(HPROPERTY hProperty);
|
|
|
|
extern LPSTR WINAPI GetPropertyText(HFRAME hFrame, LPPROPERTYINST lpPI, LPSTR szBuffer, DWORD BufferSize);
|
|
|
|
extern INT WINAPI QueryProtocolState(HCAPTURE hCapture, HPROTOCOL hProtocol);
|
|
|
|
//=============================================================================
|
|
// ADDRESS API's.
|
|
//=============================================================================
|
|
|
|
extern LPADDRESSINFO WINAPI AddAddress(HADDRESSDB hAddressDB,
|
|
LPADDRESS lpAddress,
|
|
LPSTR lpName,
|
|
LPVOID InstData);
|
|
|
|
extern HADDRESSDB WINAPI CreateAddressDatabase(VOID);
|
|
|
|
extern DWORD WINAPI DeleteAddress(HADDRESSDB hAddressDB, LPADDRESS lpAddressToDelete);
|
|
|
|
extern DWORD WINAPI DestroyAddressDatabase(HADDRESSDB hAddressDB);
|
|
|
|
extern DWORD WINAPI EmptyAddressDatabase(HADDRESSDB hAddressDB);
|
|
|
|
extern LPADDRESSINFO WINAPI GetAddressInfo(HADDRESSDB hAddressDB, LPADDRESS lpAddress);
|
|
|
|
extern LPADDRESSINFO WINAPI GetAddressInfoByName(HADDRESSDB hAddressDB, LPSTR lpName);
|
|
|
|
extern LPADDRESSINFOTABLE WINAPI EnumAddresses(HADDRESSDB hAddressDB, int SortByType);
|
|
|
|
extern LPVOID WINAPI GetAddressDatabaseInstanceData(HADDRESSDB hAddressDB);
|
|
|
|
extern LPVOID WINAPI SetAddressDatabaseInstanceData(HADDRESSDB hAddressDB, LPVOID InstData);
|
|
|
|
extern LPADDRESSINFO * WINAPI FindAddressInfoByAddress(LPADDRESSINFOTABLE lpAddressInfoTable, LPADDRESS lpAddress);
|
|
|
|
extern LPADDRESSINFO * WINAPI FindAddressInfoByName(LPADDRESSINFOTABLE lpAddressInfoTable, LPSTR lpName,
|
|
LPADDRESS lpSpecificAddress );
|
|
|
|
//=============================================================================
|
|
// MISC. API's.
|
|
//=============================================================================
|
|
|
|
extern LPSTR WINAPI GetSystemPath(LPSTR Path, DWORD Length);
|
|
|
|
extern DWORD WINAPI GetCaptureCommentFromFilename(LPSTR lpFilename, LPSTR lpComment, DWORD BufferSize);
|
|
|
|
extern int WINAPI CompareAddresses(LPADDRESS lpAddress1, LPADDRESS lpAddress2);
|
|
|
|
extern DWORD WINAPIV FormatPropertyInstance(LPPROPERTYINST lpPropertyInst, ...);
|
|
|
|
extern SYSTEMTIME * WINAPI AdjustSystemTime(SYSTEMTIME *SystemTime, DWORD TimeDelta);
|
|
|
|
//=============================================================================
|
|
// MISC. API's.
|
|
//=============================================================================
|
|
|
|
extern VOID WINAPI eprintf(LPSTR format, ...);
|
|
|
|
extern VOID WINAPI CreateErrorLogEntry(VOID);
|
|
|
|
extern DWORD WINAPI BHGetLastError(VOID);
|
|
|
|
extern DWORD WINAPI BHSetLastError(DWORD Error);
|
|
|
|
extern DWORD WINAPI ResetPropertyInstanceLength( LPPROPERTYINST lpProp,
|
|
WORD nOrgLen,
|
|
WORD nNewLen );
|
|
|
|
//=============================================================================
|
|
// DEBUG API's.
|
|
//=============================================================================
|
|
|
|
#ifdef DEBUG
|
|
|
|
//=============================================================================
|
|
// BreakPoint() macro.
|
|
//=============================================================================
|
|
|
|
#ifdef _X86_
|
|
#define BreakPoint() _asm { int 3h }
|
|
#else
|
|
#define BreakPoint() DebugBreak()
|
|
#endif
|
|
|
|
//=============================================================================
|
|
// FUNCTION: BhAssert()
|
|
//=============================================================================
|
|
|
|
INLINE VOID BhAssert(
|
|
LPVOID assert,
|
|
LPSTR file,
|
|
UINT line,
|
|
LPVOID msg
|
|
)
|
|
{
|
|
if ( msg == NULL )
|
|
{
|
|
dprintf("ASSERT -- %s occured on line %u of file %s.\n",
|
|
assert,
|
|
line,
|
|
file);
|
|
}
|
|
else
|
|
{
|
|
dprintf("ASSERT -- %s occured on line %u of file %s: Message = %s.\n",
|
|
assert,
|
|
line,
|
|
file,
|
|
msg);
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
// MACRO: ASSERT()
|
|
//=============================================================================
|
|
|
|
#define ASSERT(exp) \
|
|
{ \
|
|
if ( !(exp) ) \
|
|
{ \
|
|
BhAssert(#exp, __FILE__, __LINE__, NULL); \
|
|
BreakPoint(); \
|
|
} \
|
|
} \
|
|
|
|
#define ASSERTMSG(exp, msg) \
|
|
{ \
|
|
if ( !(exp) ) \
|
|
{ \
|
|
BhAssert(#exp, __FILE__, __LINE__, msg); \
|
|
BreakPoint(); \
|
|
} \
|
|
} \
|
|
|
|
#else //... DEBUG
|
|
|
|
#define ASSERT(exp)
|
|
|
|
#define ASSERTMSG(exp, msg)
|
|
|
|
#define ASSERT_DWORD_ALIGNMENT(p) (p)
|
|
|
|
#endif //... DEBUG
|
|
|
|
//=============================================================================
|
|
// PanicPoint().
|
|
//=============================================================================
|
|
|
|
extern VOID WINAPI PanicMessage(UINT line, LPSTR file, LPSTR msg);
|
|
|
|
#ifdef DEBUG
|
|
|
|
#define PanicPoint() \
|
|
{ \
|
|
PanicMessage(__LINE__, __FILE__, NULL); \
|
|
BreakPoint(); \
|
|
}
|
|
|
|
#else
|
|
|
|
#define PanicPoint() \
|
|
{ \
|
|
PanicMessage(__LINE__, __FILE__, NULL); \
|
|
}
|
|
|
|
#endif
|
|
|
|
//=============================================================================
|
|
// Alignment macro.
|
|
//=============================================================================
|
|
|
|
#ifndef _X86_
|
|
#ifdef DEBUG
|
|
|
|
INLINE LPVOID WINAPI ASSERT_DWORD_ALIGNMENT(LPVOID p)
|
|
{
|
|
if ( (((DWORD) (p)) & 0x00000003) != 0 )
|
|
{
|
|
dprintf("Fatal error on line %u of %s. Pointer is not DWORD aligned.", __LINE__, __FILE__);
|
|
|
|
BreakPoint();
|
|
}
|
|
|
|
return p;
|
|
}
|
|
|
|
#endif
|
|
|
|
#else
|
|
#define ASSERT_DWORD_ALIGNMENT(p) (p)
|
|
#endif
|
|
|
|
#pragma pack()
|
|
#pragma option pop /*P_O_Pop*/
|
|
#endif
|