📄 packet.h
字号:
// packet.h
//
//
// Original code by William Ingle (address unknown)
// debugged and extended by Chris Chlap (chrisc@fir.canberra.edu.au)
#define MAX_OPEN 4
#define MAX_REQUESTS 4
typedef struct _PACKET_RESERVED
{
LIST_ENTRY ListElement;
char* lpBuffer;
DWORD cbBuffer;
DWORD* lpcbBytesReturned;
OVERLAPPED* lpoOverlapped;
DWORD hDevice;
DWORD tagProcess;
}
PACKET_RESERVED, *PPACKET_RESERVED;
typedef struct _INTERNAL_REQUEST
{
PACKET_RESERVED Reserved;
NDIS_REQUEST Request;
}
INTERNAL_REQUEST, *PINTERNAL_REQUEST;
//
// Port device extension.
//
typedef struct _OPEN_INSTANCE
{
LIST_ENTRY ListElement;
DWORD hDevice;
NDIS_STATUS Status;
NDIS_HANDLE AdapterHandle;
NDIS_HANDLE BindAdapterContext;
NDIS_HANDLE PacketPool;
NDIS_HANDLE BufferPool;
NDIS_SPIN_LOCK RcvQSpinLock;
LIST_ENTRY RcvList;
NDIS_SPIN_LOCK RequestSpinLock;
LIST_ENTRY RequestList;
NDIS_SPIN_LOCK ResetSpinLock;
LIST_ENTRY ResetIrpList;
INTERNAL_REQUEST Requests[MAX_REQUESTS];
}
OPEN_INSTANCE, *POPEN_INSTANCE;
typedef struct _DEVICE_EXTENSION
{
PDRIVER_OBJECT DriverObject;
NDIS_HANDLE NdisProtocolHandle;
LIST_ENTRY OpenList;
}
DEVICE_EXTENSION, *PDEVICE_EXTENSION;
extern PDEVICE_EXTENSION GlobalDeviceExtension;
#define ETHERNET_HEADER_LENGTH 14
#define ETHERNET_DATA_LENGTH 1500
#define ETHERNET_PACKET_LENGTH 1514
#define RESERVED(_p) ((PPACKET_RESERVED)((_p)->ProtocolReserved))
#define TRANSMIT_PACKETS 64 //was 16
VOID NDIS_API
PacketBindAdapterComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus
);
VOID NDIS_API
PacketUnbindAdapterComplete(
IN POPEN_INSTANCE Open,
IN NDIS_STATUS Status
);
NDIS_STATUS NDIS_API
PacketReceiveIndicate(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
VOID NDIS_API
PacketReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
DWORD
PacketRequest(POPEN_INSTANCE pOpen,
DWORD FunctionCode,
DWORD dwDDB,
DWORD hDevice,
PDIOCPARAMETERS pDiocParms);
VOID NDIS_API
PacketRequestComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST pRequest,
IN NDIS_STATUS Status
);
VOID NDIS_API
PacketSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET pPacket,
IN NDIS_STATUS Status
);
VOID
PacketReset(PNDIS_STATUS pStatus,
POPEN_INSTANCE pOpen);
VOID NDIS_API
PacketResetComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
VOID NDIS_API
PacketStatus(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize
);
VOID NDIS_API
PacketStatusComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
VOID
PacketAllocatePacketBuffer( PNDIS_STATUS pStatus,
POPEN_INSTANCE pOpen,
PNDIS_PACKET *pPacket, // 17.2.97
PDIOCPARAMETERS pDiocParms,
DWORD FunctionCode );
VOID NDIS_API
PacketTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
VOID
PacketRemoveReference(
IN PDEVICE_EXTENSION DeviceExtension
);
VOID
PacketCleanUp(PNDIS_STATUS Status,
POPEN_INSTANCE Open);
NTSTATUS NDIS_API
PacketShutdown(
IN PDEVICE_OBJECT DeviceObject
);
VOID
PacketUnload();
VOID NDIS_API
PacketBindAdapter( OUT PNDIS_STATUS Status,
IN NDIS_HANDLE BindAdapterContext,
IN PNDIS_STRING AdapterName,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2
);
VOID NDIS_API
PacketUnbindAdapter(OUT PNDIS_STATUS Status,
IN NDIS_HANDLE,
IN NDIS_HANDLE);
DWORD
PacketWrite(POPEN_INSTANCE Open,
DWORD dwDDB,
DWORD hDevice,
PDIOCPARAMETERS pDiocParms
);
DWORD
PacketRead( POPEN_INSTANCE Open,
DWORD dwDDB,
DWORD hDevice,
PDIOCPARAMETERS pDiocParms
);
DWORD _stdcall PacketIOControl( DWORD dwService,
DWORD dwDDB,
DWORD hDevice,
PDIOCPARAMETERS lpDIOCParms );
//
// define wrapper for VWIN32_DIOCCompletionRoutine
//
void VXDINLINE
VWIN32_DIOCCompletionRoutine( DWORD hEvent )
{
_asm mov ebx, hEvent
VxDCall( VWIN32_DIOCCompletionRoutine );
}
ULONG strlen( BYTE *s );
#define strcat(d, s) NdisMoveMemory(d+strlen(d), s, strlen(s) )
#define strcpy(d, s) NdisMoveMemory(d, s, strlen(s))
//
// where is memset defined? okay, let's make one!
//
#define memset( _S, _C, _N )\
{\
UCHAR* _pS = _S;\
ULONG _I = _N;\
while ( _I-- )\
{\
*_pS++ = _C;\
}\
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -