⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tx.h

📁 这个是无线网卡WirelessLAN 测试程序NDIS
💻 H
字号:
// Tx.h: interface for the CTx class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TX_H__9051A350_BB89_4E56_ACAC_96E38B3B426C__INCLUDED_)
#define AFX_TX_H__9051A350_BB89_4E56_ACAC_96E38B3B426C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "TxRxBase.h"

#define	ETHER_ADDR_LENGTH		6
#define	ETHER_TYPE_LENGTH		2
#define	MAX_ETHER_SIZE			1514	// Maximum Ethernet Packet Length
#define	MIN_ETHER_SIZE	  		60		// Minimum Ethernet Packet Length
#define	MDstAddr	0					// Offset To Destination Address
#define	MSrcAddr	ETHER_ADDR_LENGTH	// Offset To Source Address
#define	MLength	(MSrcAddr + ETHER_ADDR_LENGTH)	// Of Bytes Following MAC Header
#define	MHdrSize	(MLength + ETHER_TYPE_LENGTH )	// MAC 802.3 Header Size
#define MAX_ETHER_SIZE 1514


//---------------------------------------------------------------------------
//
//     S T R U C T U R E   D E F I N E
//
//---------------------------------------------------------------------------

//------------------------------------------------------
// TX Pattern
// 0:		All bytes are 0
// FF:		All bytes are 0xFF
// 1234:	Pattern is like --> 0x00 0x01 0x02 0x03 ...
// RANDOM:	Random select from TX_PATTERN_0 to TX_PATTERN_SEQUENCE
// SEQUENCE:	Bytes in first packet all set to 0x00, second packet set to 0x01, and third -> 0x02 ..etc.  
// USER_DEFINED:Use ZDTxSetPattern() to set your own pattern
//
#define TX_PATTERN_0			0
#define TX_PATTERN_FF			1
#define TX_PATTERN_1234			2
#define TX_PATTERN_SEQUENCE		3
#define TX_PATTERN_RANDOM		4
#define TX_PATTERN_USER_DEFINED	5

//-----------------------------------------------------
// Report Condition
//
#define REPORT_ALL			0	
#define REPORT_ONLY_BAD		1
#define REPORT_ONLY_LOST	2	// Report the first packet after "lost packet" happen

#define PACKET_BUFFER_SIZE MAX_ETHER_SIZE

//------------------------------------------------------
// Rx Report Structure
//
typedef struct _Rx_Frame_Report_Quiet{
		bool	bGood;			// Is this packet good, 1 mean good
		DWORD	LostNum;		// How many packets have lost since start capture
		DWORD	FrameSize;		// The packet size, include 802.3 Header
		PVOID	pUserDefined;	// Set your own data structure pointer
} RX_FRAME_REPORT_QUIET, *PRX_FRAME_REPORT_QUIET;

typedef struct _Rx_Frame_Report_Dump{
		bool	bGood;			// Is this packet good, 1 mean good
		DWORD	LostNum;		// How many packets have lost since start capture
		DWORD	FrameSize;		// The packet size, include 802.3 Header
		PVOID	pUserDefined;	// Set your own data structure pointer
		char	Data[MAX_ETHER_SIZE];	// The packet data
} RX_FRAME_REPORT_DUMP, *PRX_FRAME_REPORT_DUMP;

//-------------------------------------------------------
// packets sent by this lib will be inserted the FRAME_INFO_HEADER.
//
// |<--Dest Addr-->|<--Src Addr-->|<-Type->|<--FRAME_INFO_HEADER-->|<--Data-->|
//
typedef struct _Frame_Info_Header{
		char	Reserve1[2];
		char	CheckCode[3];		// check code, always be {'$', 'Z', 0xED};
		char	CheckLostNumber[2];	// To determine how many packets lost
		char	PatternType;		// What kind of pattern
		char	IfSetCheckSum;		// If set CheckSum, set this to 1
		char	CheckSum;			// CheckSum of pattern
} FRAME_INFO_HEADER, *PFRAME_INFO_HEADER;


// This data structure is uesd by ZDRas
typedef struct ZDRAS_PACKET
{
   ULONG          nUserReserved1;
   ULONG          nUserReserved2;

   ULONG          nDriverReserved1;
   ULONG          nDriverReserved2;
   ULONG          nDriverReserved3;
   ULONG          nDriverReserved4;

   ULONG          nNdisStatus;      // Completion NDIS Status

   LARGE_INTEGER  nPacketNumber;

   LARGE_INTEGER  TimeReceived;      // See notes below.

   UINT           nPacketDataLength;// Actual Size Of Network Packet (Header + Data)
   UINT           nBufferDataLength;// Bytes Written To Buffer At PacketBuffer
                                    // Note: May be less then nPacketDataLength

   UINT           nBufferSize;      // Size Of Buffer At PacketBuffer
   UCHAR          PacketBuffer[ 1 ];// Placeholder. See Notes.

} *PZDRAS_PACKET;


class CTx : public CTxRxBase  
{
public:
	DWORD64 GetTotalBytes();
	bool IsSending();
	bool SetUserDefinedPattern(const char * ptr, int size);
	bool DoStopContinueSend();
	bool DoContinueSend(int pattern, 
						const char* RemoteMAC, 
						int PacketLen, 
						DWORD PacketNum, 
						int Interval, 
	     				bool EnableChecklost,
    					bool EnableCRC,
			        	bool EnableCheckHeader,
						UCHAR sequence,
						AFX_THREADPROC CompletionRoutine,
						LPVOID pParam
						);
	DWORD GetSentDuration();
	DWORD GetPacketsSent();
	CTx();
	virtual ~CTx();

protected:
	bool m_CheckHeader;
	UCHAR m_SequencePattern;
	USHORT m_SequenceNmber;
	bool m_bCRC;
	bool m_bCheckLost;
	char* m_UserDefinedPattern;
	int m_UserDefinedPattern_Len;
	DWORD m_PacketNum;
	AFX_THREADPROC m_CompleteRoutine;
	LPVOID m_pParam;
	int m_Interval;
	int m_PacketLen;
	char m_DestAddr[6];
	int m_Pattern;
	static  UINT	SendThread( LPVOID pParam );
	static	DWORD	HandleSendComplete( PSendPackage pTxPackage );
	PSendPackage	HP_CreateSendPackage(	CTx *pTx,
											DWORD nDataSize,
											BOOL bInitOverlappedEvent
											);
	static	void	HP_DestroySendPackage( PSendPackage pTxPackage );

	static void CALLBACK	SendCompleteApcNT(	DWORD dwErrorCode,
										DWORD dwNumberOfBytesTransfered,
										LPOVERLAPPED lpOverlapped
										);
	static DWORD CALLBACK	SendCompleteApc95(	LPOVERLAPPED lpOverlapped);

};

#endif // !defined(AFX_TX_H__9051A350_BB89_4E56_ACAC_96E38B3B426C__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -