📄 main.cpp
字号:
//********************************************************************
// 日期: 2004/08/24 - 24:8:2004 23:15
// 名前: tiamo
// 描述: main
//*********************************************************************
#include "Stdafx.h"
// wrapper handle
NDIS_HANDLE g_hNdisWrapperHandle;
// protocol handle
NDIS_HANDLE g_hNdisProtocolHandle;
#pragma alloc_text(PAGE,DriverUnload)
// we want to keep driverentry code
#pragma alloc_text(PAGE,DriverEntry)
// driver unload
VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
{
PAGED_CODE();
// shut down xxx
ShutdownBindSystem();
ShutdownTimerSystem();
ShutdownWorkItemSystem();
ShutdownPoolSystem();
ShutdownMemorySystem();
NDIS_STATUS status;
if(g_hNdisProtocolHandle)
NdisDeregisterProtocol(&status,g_hNdisProtocolHandle);
}
// driver entry
NDIS_STATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegPath)
{
PAGED_CODE();
DebugInfo(("driver object = 0x%x,reg path = %Z\n",pDriverObject,pRegPath));
NDIS_STATUS status = NDIS_STATUS_SUCCESS;
__try
{
// init xxx system
InitializeMemorySystem();
InitializePoolSystem();
InitializeWorkItemSystem();
InitializeTimerSystem();
InitializeBindSystem();
// init wapper
NdisMInitializeWrapper(&g_hNdisWrapperHandle,pDriverObject,pRegPath,NULL);
// register miniport
NDIS_MINIPORT_CHARACTERISTICS miniChar;
NdisZeroMemory(&miniChar,sizeof(miniChar));
miniChar.Ndis40Chars.Ndis30Chars.MajorNdisVersion = NDIS_MAJOR_VERSION;
miniChar.Ndis40Chars.Ndis30Chars.MinorNdisVersion = NDIS_MINOR_VERSION;
miniChar.Ndis40Chars.Ndis30Chars.HaltHandler = (W_HALT_HANDLER)miniportHalt;
miniChar.Ndis40Chars.Ndis30Chars.InitializeHandler = (W_INITIALIZE_HANDLER)miniportInitialize;
miniChar.Ndis40Chars.Ndis30Chars.ResetHandler = (W_RESET_HANDLER)miniportReset;
miniChar.Ndis40Chars.ReturnPacketHandler = (W_RETURN_PACKET_HANDLER)miniportReturnPacket;
miniChar.CoActivateVcHandler = (W_CO_ACTIVATE_VC_HANDLER)miniportCoActivateVc;
miniChar.CoDeactivateVcHandler = (W_CO_DEACTIVATE_VC_HANDLER)miniportCoDeactivateVc;
miniChar.CoRequestHandler = (W_CO_REQUEST_HANDLER)miniportCoRequest;
miniChar.CoSendPacketsHandler = (W_CO_SEND_PACKETS_HANDLER)miniportCoSendPackets;
status = NdisMRegisterMiniport(g_hNdisWrapperHandle,&miniChar,sizeof(miniChar));
if(status != NDIS_STATUS_SUCCESS)
{
DebugError(("register miniport error 0x%x\n",status));
ExRaiseStatus(status);
}
// register protocol
NDIS_PROTOCOL_CHARACTERISTICS protoChar;
NdisZeroMemory(&protoChar,sizeof(protoChar));
protoChar.Ndis40Chars.Ndis30Chars.MajorNdisVersion = NDIS_MAJOR_VERSION;
protoChar.Ndis40Chars.Ndis30Chars.MinorNdisVersion = NDIS_MINOR_VERSION;
NdisInitUnicodeString(&protoChar.Ndis40Chars.Ndis30Chars.Name,PROTOCOL_NAME);
protoChar.Ndis40Chars.Ndis30Chars.CloseAdapterCompleteHandler = (CLOSE_ADAPTER_COMPLETE_HANDLER)protocolCloseAdapterComplete;
protoChar.Ndis40Chars.Ndis30Chars.OpenAdapterCompleteHandler = (OPEN_ADAPTER_COMPLETE_HANDLER)protocolOpenAdapterComplete;
protoChar.Ndis40Chars.Ndis30Chars.SendCompleteHandler = (SEND_COMPLETE_HANDLER)protocolSendComplete;
protoChar.Ndis40Chars.Ndis30Chars.TransferDataCompleteHandler = (TRANSFER_DATA_COMPLETE_HANDLER)protocolTransferDataComplete;
protoChar.Ndis40Chars.Ndis30Chars.RequestCompleteHandler = (REQUEST_COMPLETE_HANDLER)protocolRequestComplete;
protoChar.Ndis40Chars.Ndis30Chars.ReceiveCompleteHandler = (RECEIVE_COMPLETE_HANDLER)protocolReceiveComplete;
protoChar.Ndis40Chars.Ndis30Chars.StatusCompleteHandler = (STATUS_COMPLETE_HANDLER)protocolStatusComplete;
protoChar.Ndis40Chars.Ndis30Chars.StatusHandler = (STATUS_HANDLER)protocolStatus;
protoChar.Ndis40Chars.Ndis30Chars.ReceiveHandler = (RECEIVE_HANDLER)protocolReceive;
protoChar.Ndis40Chars.BindAdapterHandler = (BIND_HANDLER)protocolBindAdapter;
protoChar.Ndis40Chars.UnbindAdapterHandler = (UNBIND_HANDLER)protocolUnbindAdapter;
protoChar.Ndis40Chars.ReceivePacketHandler = (RECEIVE_PACKET_HANDLER)protocolReceivePacket;
protoChar.Ndis40Chars.PnPEventHandler = (PNP_EVENT_HANDLER)protocolPnPEvent;
NdisRegisterProtocol(&status,&g_hNdisProtocolHandle,&protoChar,sizeof(protoChar));
if(status != NDIS_STATUS_SUCCESS)
{
DebugError(("register protocol error 0x%x\n",status));
ExRaiseStatus(status);
}
// register unload handle
NdisMRegisterUnloadHandler(g_hNdisWrapperHandle,DriverUnload);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
DriverUnload(pDriverObject);
}
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -