📄 stdafx.h
字号:
//**************************************************************************************
// 日期: 23:2:2004
// 创建: tiamo
// 描述: stdafx
//**************************************************************************************
#pragma once
extern "C"
{
#define NDIS_TAPI_CURRENT_VERSION 0x00020000
#include "ndis.h"
#include "ndiswan.h"
#include "ndistapi.h"
}
// driver name
#define DRIVER_NAME_IM "tiamo_pppoe"
#define PROTOCOL_NAME L"TCPPPOE"
// FSM state
#define FSM_IDLE 0x0
#define FSM_CLIENT_SEND_PADI 0x1
#define FSM_CLIENT_WAIT_FOR_PADO 0x2
#define FSM_CLIENT_SEND_PADR 0x3
#define FSM_CLIENT_WAIT_FOR_PADS 0x4
#define FSM_SERVER_SEND_PADS 0x5
#define FSM_SERVER_WAIT_FOR_ANSWER 0x6
#define FSM_SERVER_ANSWER_OK 0x7
#define FSM_SESSION 0x8
#define FSM_DEAD 0x9
// .....
#define PPPOE_MIN_ETH_FRAME_SIZE 14
#define PPPOE_MAX_ETH_FRAME_SIZE 1514
#define PPP_HEADER_LEN 6
#define PPPOE_MAX_FRAME_SIZE 1500
#define PPPOE_WAN_MAX_FRAME_SIZE (PPPOE_MAX_ETH_FRAME_SIZE - 32)
#define PPPOE_HEADER_LEN (PPP_HEADER_LEN + PPPOE_MIN_ETH_FRAME_SIZE)
#define PPPOE_MAX_DATA_SIZE (PPPOE_MAX_FRAME_SIZE - PPP_HEADER_LEN)
#define PPPOE_MAX_PADI_DATA_SIZE (PPPOE_MAX_FRAME_SIZE - PPP_HEADER_LEN - 0x10)
// for tag !!!already swapped
#define PPPOE_TAG_SERVICE 0x0101
#define PPPOE_TAG_AC 0x0201
#define PPPOE_TAG_HOST_UNIQUE 0x0301
#define PPPOE_TAG_AC_COOKIE 0x0401
#define PPPOE_TAG_RELAY_SESSION_ID 0x1001
#define PPPOE_TAG_SERVICE_NAME_ERROR 0x0102
#define PPPOE_TAG_AC_SYSTEM_ERROR 0x0202
#define PPPOE_TAG_GEN_ERROR 0x0302
#define PPPOE_TAG_AC_COOKIE_ERROR 0x0402
// for code
#define PPPOE_CODE_PAY_LOAD 0x00
#define PPPOE_CODE_PADT 0xa7
#define PPPOE_CODE_PADI 0x09
#define PPPOE_CODE_PADO 0x07
#define PPPOE_CODE_PADR 0x19
#define PPPOE_CODE_PADS 0x65
// for VER TYPE
#define PPPOE_VER 0x01
#define PPPOE_TYPE 0x01
// for ethernet type !!!already swapped
#define PPPOE_DISCOVERY 0x6388
#define PPPOE_SESSION 0x6488
#define htons(h) (((h & 0xff) << 8 )|((h & 0xff00) >> 8))
#define htonl(h) (((h & 0xff) << 24)|((h & 0xff00) << 8)|((h & 0xff0000) >> 8)|((h & 0xff000000) >> 24))
#define ntohs(n) (((n & 0xff) << 8 )|((n & 0xff00) >> 8))
#define ntohl(n) (((n & 0xff) << 24)|((n & 0xff00) << 8)|((n & 0xff0000) >> 8)|((n & 0xff000000) >> 24))
#if DBG
#define drvDbgPrint DbgPrint(" "DRIVER_NAME_IM"! ");DbgPrint
#define DbgEnterFunction() DbgPrint("Enter function \""__FUNCTION__"\" with irql(0x%x)\n",KeGetCurrentIrql())
#define DbgLeaveFunction() DbgPrint("Leave function \""__FUNCTION__"\" with irql(0x%x)\n",KeGetCurrentIrql())
#define DbgLeaveFunctionWithStatus(status) DbgPrint("Leave function \""__FUNCTION__"\" with irql(0x%x),status = 0x%x\n",KeGetCurrentIrql(),status)
#else
#define drvDbgPrint __noop
#define DbgEnterFunction() __noop
#define DbgLeaveFunction() __noop
#define DbgLeaveFunctionWithStatus(status) __noop
#endif
#pragma pack(push)
#pragma pack(1)
// ppp tag
typedef struct __tagPPPTagHeader
{
USHORT m_usType;
USHORT m_usLen;
}PPP_TAG,*PPPP_TAG;
// ppp frame
typedef struct __tagPPPFrame
{
UCHAR m_ucVer:4;
UCHAR m_ucType:4;
UCHAR m_ucCode;
USHORT m_usSession;
USHORT m_usLen;
UCHAR m_ucData[1];
}PPP_FRAME,*PPPP_FRAME;
// pppoe frame
typedef struct __tagPPPOEFrame
{
UCHAR m_dstMac[6];
UCHAR m_srcMac[6];
USHORT m_usProtocolType;
PPP_FRAME m_pppFrame;
}PPPOE_FRAME,*PPPPOE_FRAME;
#pragma pack(pop)
// packet pool
typedef struct __tagPacketPool
{
ULONG m_ulSig; // sig
NDIS_SPIN_LOCK m_lockSelf; // lock
ULONG m_ulProtocolReservedLen; // protocol reserved len
ULONG m_ulPacketsPerBlock; // packets per block
ULONG m_ulTotalPackets; // total packets
ULONG m_ulFreePackets; // free packets
ULONG m_ulMaxFreeGuard; // max free guard
LIST_ENTRY m_ltBlocks; // blocks list
LIST_ENTRY m_ltFreePackets; // free packets list
}PACKET_POOL,*PPACKET_POOL;
struct __tagPacketBlock;
// packet array item
typedef struct __tagPacketArrayItem
{
LIST_ENTRY m_ltFreePacket; // free packet list
__tagPacketBlock* m_pPacketBlock; // packet block
PNDIS_PACKET m_pNdisPacket; // ndis packet
}PACKET_ARRAY_ITEM,*PPACKET_ARRAY_ITEM;
// packet block
typedef struct __tagPacketBlock
{
LIST_ENTRY m_ltBlocks; // link list
NDIS_HANDLE m_hPacketPool; // ndis packet pool handle
PPACKET_POOL m_pPacketPool; // packet pool pointer
ULONG m_ulPackets; // packets count
ULONG m_ulFreePackets; // free packets
PACKET_ARRAY_ITEM m_arrayPacket[1]; // packet array
}PACKET_BLOCK,*PPACKET_BLOCK;
// buffer pool
typedef struct __tagBufferPool
{
ULONG m_ulSig; // sig
NDIS_SPIN_LOCK m_lockSelf; // lock
ULONG m_ulBufferSize; // buffer size
ULONG m_ulBuffersPerBlock; // buffers per block
ULONG m_ulTotalBuffers; // total buffers
ULONG m_ulFreeBuffers; // free buffers
ULONG m_ulMaxFreeGuard; // max free guard
LIST_ENTRY m_ltBlocks; // blocks list
LIST_ENTRY m_ltFreeBuffers; // free packets list
}BUFFER_POOL,*PBUFFER_POOL;
struct __tagBufferBlock;
// buffer array item
typedef struct __tagBufferArrayItem
{
LIST_ENTRY m_ltFreeBuffer; // free packet list
__tagBufferBlock* m_pBufferBlock; // packet block
PNDIS_BUFFER m_pNdisBuffer; // ndis packet
UCHAR m_pFrame[1]; // buffer
}BUFFER_ARRAY_ITEM,*PBUFFER_ARRAY_ITEM;
// buffer block
typedef struct __tagBufferBlock
{
LIST_ENTRY m_ltBlocks; // link list
NDIS_HANDLE m_hBufferPool; // ndis buffer pool handle
PBUFFER_POOL m_pBufferPool; // packet pool pointer
ULONG m_ulBuffers; // buffers count
ULONG m_ulFreeBuffers; // free buffer
BUFFER_ARRAY_ITEM m_arrayBuffer[1]; // buffer array
}BUFFER_BLOCK,*PBUFFER_BLOCK;
#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_ltBinds; // 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[6]; // lower adapter's mac address
USHORT m_bProcessingRecvPacket; //
LIST_ENTRY m_ltRecvPacket; // received packet
LONG m_lPacketNeedReturn; // packet need return
}BIND_CONTEXT,*PBIND_CONTEXT;
// packet flags
#define PPPOE_PACKET_BUFFER_FROM_NDIS 0x00000001
#define PPPOE_PACKET_BUFFER_FROM_POOL 0x00000002
#define PPPOE_PACKET_FROM_POOL 0x00000004
#define PPPOE_PACKET_BUFFER_CHAINED 0x00000008
#define PPPOE_PACKET_NEED_RETURN_PACKET 0x00000010
#define PPPOE_PACKET_NEED_CALL_SEND_COMPLETE 0x00000020
#define PPPOE_PACKET_ERROR_TAG_RECV 0x00000040
#define PPPOE_PACKET_BUFFER_REVERSED 0x00000080
// pppoe packet
typedef struct __tagPPPOEPacket
{
LIST_ENTRY m_ltPackets; // link list
LONG m_lRefCount; // ref count
ULONG m_ulFlags; // flags
PUCHAR m_pServiceName; // service name
PUCHAR m_pACName; // ac name
PUCHAR m_pHostUnique; // host unique
PUCHAR m_pACCookie; // ac cookie
PUCHAR m_pRelaySessionId; // relay session id
PUCHAR m_pError; // error
USHORT m_usServiceName;
USHORT m_usACName;
USHORT m_usHostUnique;
USHORT m_usACCookie;
USHORT m_usRelaySessionId;
USHORT m_usError;
ULONG m_ulErrorTag;
union
{
PPPPOE_FRAME m_pFrame; // frame buffer
PUCHAR m_pucFrame;
PVOID m_pRealBuffer;
};
union
{
PPPP_FRAME m_pDataBuffer; // data buffer
PUCHAR m_pucDataBuffer;
PVOID m_pBuffer;
};
PNDIS_PACKET m_pNdisPacket; // ndis packet
PNDIS_BUFFER m_pNdisBuffer; // ndis buffer
PPACKET_ARRAY_ITEM m_pPacketItem; // packet item
PBIND_CONTEXT m_pBindContext; // bind context
NDIS_STATUS m_status; // status
}PPPOE_PACKET,*PPPPOE_PACKET;
// timer item
typedef struct __tagPPPOETimerItem
{
LIST_ENTRY m_ltItem; // list
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -