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

📄 protocol.h

📁 pppoe client
💻 H
字号:

//********************************************************************
//	日期:	2004/08/25 - 25:8:2004   15:55
//	名前:	tiamo
//	描述:	protocol
//*********************************************************************

#pragma once

#define BIND_CONTEXT_SIG						MAKE_SIG('B','I','N','D')

#define	BIND_CONTEXT_LOWER_ADAPTER_OPENED		0x00000001
#define	BIND_CONTEXT_MAC_ADDRESS_GOT			0x00000002
#define	BIND_CONTEXT_LINK_SPPED_GOT				0x00000004
#define	BIND_CONTEXT_MAX_FRAME_SIZE_GOT			0x00000008
#define	BIND_CONTEXT_BINDED						0x00000010
#define	BIND_CONTEXT_LOWER_ADAPTER_CLOSED		0x00000020
#define	BIND_CONTEXT_PACKET_FILTER_SET			0x00000040
#define	BIND_CONTEXT_PACKET_FILTER_SET_NEEDED	0x00000080

#define BIND_ALLOCATED							0x1
#define BIND_LOWER_MINIPORT_OPENED				0x2
#define BIND_LOWER_MINIPORT_CLOSING				0x3
#define BIND_LOWER_MINIPORT_CLOSED				0x4
#define BIND_ROMOVING							0x5
#define BIND_FREEING							0x6

// bind context
typedef struct __tagBindContext
{
	ULONG								m_ulSig;							// signature
	LONG								m_lRefCount;						// ref count
	NDIS_EVENT							m_evRemove;							// remove event
	NDIS_SPIN_LOCK						m_lockSelf;							// lock 
	LIST_ENTRY							m_ltBindAnchor;						// link list
	ULONG								m_ulFlags;							// flags
	ULONG								m_ulBindState;						// bind state

	NDIS_HANDLE							m_pOpenBlock;						// open block

	NDIS_STATUS							m_statusCallback;					// callback status
	NDIS_EVENT							m_evCallback;						// callback event

	ULONG								m_ulLinkSpeed;						// link speed
	ULONG								m_ulMaxFrameSize;					// lower miniport max frame size
	ULONG								m_ulPacketFilter;					// packet filter

	NDIS_REQUEST						m_ndisRequest;						// request
	UCHAR								m_macAddress[ETH_ADDR_LEN];			// lower adapter's mac address
	USHORT								m_bProcessingRecvPacket;			// 

	LIST_ENTRY							m_ltRecvPacketHead;					// received packet
	LONG								m_lPacketNeedReturn;				// packet need return
}BIND_CONTEXT,*PBIND_CONTEXT;

// lock
extern NDIS_SPIN_LOCK g_lockBind;

// bind time
extern BOOLEAN g_bIsTimeToBind;

// set filter
extern BOOLEAN g_bSetFilterAtBind;

// list head
extern LIST_ENTRY g_ltBindsHead;

// public
extern "C"
{
	// protocol open adapter complete PASSIVE_LEVEL
	VOID protocolOpenAdapterComplete(PBIND_CONTEXT pBindContext,NDIS_STATUS status,NDIS_STATUS openErrorStatus);

	// protocol close adapter complete PASSIVE_LEVEL
	VOID protocolCloseAdapterComplete(PBIND_CONTEXT pBindContext,NDIS_STATUS status);

	// protocol send complete DISPTACH_LEVEL
	VOID protocolSendComplete(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket,NDIS_STATUS status);

	// protocol transfer data complete DISPTACH_LEVEL
	VOID protocolTransferDataComplete(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket,NDIS_STATUS status,UINT uByteTransferred);

	// protocol request complete DISPATCH_LEVEL
	VOID protocolRequestComplete(PBIND_CONTEXT pBindContext,PNDIS_REQUEST pRequest,NDIS_STATUS status);

	// protocol receive complete DISPATCH_LEVEL
	VOID protocolReceiveComplete(PBIND_CONTEXT pBindContext);

	// protocol status complete DISPATCH_LEVEL
	VOID protocolStatusComplete(PBIND_CONTEXT pBindContext);

	// protocol status DISPATCH_LEVEL
	VOID protocolStatus(PBIND_CONTEXT pBindContext,NDIS_STATUS generalStatus,PVOID pStatusBuffer,UINT uStatusBufferSize);

	// protocol receive DISPATCH_LEVEL
	NDIS_STATUS protocolReceive(PBIND_CONTEXT pBindContext,NDIS_HANDLE MacReceiveContext,PVOID pHeaderBuffer,UINT uHeaderBufferSize,PVOID pLookAheadBuffer,UINT uLookaheadBufferSize,UINT uPacketSize);

	// protocol receive packet DISPATCH_LEVEL
	INT protocolReceivePacket(PBIND_CONTEXT pBindContext,PNDIS_PACKET pPacket);

	// protocol bind adapter PASSIVE_LEVEL
	VOID protocolBindAdapter(PNDIS_STATUS pStatus,NDIS_HANDLE hBindContext,PNDIS_STRING pDeviceName,PVOID pSys1,PVOID pSys2);

	// protocol unbind adapter PASSIVE_LEVEL
	VOID protocolUnbindAdapter(OUT PNDIS_STATUS pStatus,PBIND_CONTEXT pBindContext,NDIS_HANDLE hUnbindContext);

	// protocol pnp event PASSIVE_LEVEL
	NDIS_STATUS protocolPnPEvent(PBIND_CONTEXT pBindContext,PNET_PNP_EVENT pNetPnPEvent);

	// init <= DISPATCH_LEVEL
	VOID InitializeBindSystem();

	// shut down <= DISPATCH_LEVEL
	VOID ShutdownBindSystem();

	// create bind PASSIVE_LEVEL
	PBIND_CONTEXT CreateBind();

	// free bind <= DISPATCH_LEVEL
	VOID FreeBind(PBIND_CONTEXT pBind);

	// reference bind <= DISPATCH_LEVEL
	VOID ReferenceBind(PBIND_CONTEXT pBind,BOOLEAN bAcquireSpinLock);

	// dereference bind <= DISPATCH_LEVEL
	VOID DereferenceBind(PBIND_CONTEXT pBind);

	// query xxx PASSIVE_LEVEL
	VOID QueryLowerMiniportForLinkSpeed(PBIND_CONTEXT pBind);

	VOID QueryLowerMiniportForCurrentAddress(PBIND_CONTEXT pBind);

	VOID QueryLowerMiniportForMaxFrameSize(PBIND_CONTEXT pBind);

	VOID ChangeLowerMiniportPacketFilter(BOOLEAN bSetAtBind);

	// set PASSIVE_LEVEL
	VOID SetLowerMiniportPacketFilter(PBIND_CONTEXT pBind,BOOLEAN bSet);

	// notify removal DISPATCH_LEVEL
	VOID NotifyBindingRemoval(PBIND_CONTEXT pBind);
}

⌨️ 快捷键说明

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