📄 main.cpp
字号:
//********************************************************************
// 日期: 2004/08/10 - 10:8:2004 19:48
// 名前: tiamo
// 描述: main
//*********************************************************************
#include "stdafx.h"
#pragma NDIS_INIT_FUNCTION(DriverEntry)
// wrapper handle pointed to _NDIS_WRAPPER_HANDLE
NDIS_HANDLE g_hNdisWrapperHandle;
// miniport driver handle pointed to _NDIS_M_DRIVER_BLOCK
// NDIS_HANDLE g_hMiniDriverHandle;
// protocol handle pointed to _NDIS_PROTOCOL_BLOCK
NDIS_HANDLE g_hProtocolHandle;
// bind list
LIST_ENTRY g_ltBinds;
// bind lock
NDIS_SPIN_LOCK g_lockBind;
// work item look aside list
NPAGED_LOOKASIDE_LIST g_lookasideWorkItem;
// driver entry
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pRegPath)
{
DbgEnterFunction();
drvDbgPrint("driver object is 0x%x\n",pDriver);
NDIS_STATUS status;
__try
{
status = InitializePool();
if(status != NDIS_STATUS_SUCCESS)
{
drvDbgPrint("can't init pool,raise status 0x%x.\n",status);
ExRaiseStatus(status);
}
// initialzie work item look aside list
NdisInitializeNPagedLookasideList(&g_lookasideWorkItem,0,0,0,sizeof(PPPOE_WORK_ITEM),'WKIT',0);
// bind list stuff initialize
NdisAllocateSpinLock(&g_lockBind);
NdisInitializeListHead(&g_ltBinds);
// initialize timer
NdisInitializeListHead(&g_timer.m_ltTimerItem);
g_timer.m_ulSig = 'TIME';
NdisAllocateSpinLock(&g_timer.m_lockSelf);
NdisInitializeTimer(&g_timer.m_ndisTimer,GlobalTimerEvent,&g_timer);
// initialize wrapper
NdisMInitializeWrapper(&g_hNdisWrapperHandle,pDriver,pRegPath,NULL);
NDIS_MINIPORT_CHARACTERISTICS miniportCharacteristics;
RtlZeroMemory(&miniportCharacteristics,sizeof(miniportCharacteristics));
// i think i should use c...no c++
miniportCharacteristics.Ndis30Chars.MajorNdisVersion = 4;
miniportCharacteristics.Ndis30Chars.MinorNdisVersion = 0;
// wan wrapper
miniportCharacteristics.Ndis30Chars.Reserved = NDIS_USE_WAN_WRAPPER;
miniportCharacteristics.Ndis30Chars.InitializeHandler = (W_INITIALIZE_HANDLER)miniportInitialize;
miniportCharacteristics.Ndis30Chars.QueryInformationHandler = (W_QUERY_INFORMATION_HANDLER)miniportQueryInformation;
miniportCharacteristics.Ndis30Chars.SetInformationHandler = (W_SET_INFORMATION_HANDLER)miniportSetInformation;
miniportCharacteristics.Ndis30Chars.HaltHandler = (W_HALT_HANDLER)miniportHalt;
miniportCharacteristics.Ndis30Chars.ResetHandler = (W_RESET_HANDLER)miniportReset;
miniportCharacteristics.Ndis30Chars.WanSendHandler = (WM_SEND_HANDLER)miniportWanSendPacketHandler;
// register miniport
status = NdisMRegisterMiniport(g_hNdisWrapperHandle,&miniportCharacteristics,sizeof(miniportCharacteristics));
if(status != NDIS_STATUS_SUCCESS)
{
drvDbgPrint("can't register miniport,raise status 0x%x.\n",status);
ExRaiseStatus(status);
}
// register protocol
NDIS_PROTOCOL_CHARACTERISTICS protocolCharacteristics;
NdisZeroMemory(&protocolCharacteristics,sizeof(protocolCharacteristics));
protocolCharacteristics.Ndis30Chars.MajorNdisVersion = 4;
protocolCharacteristics.Ndis30Chars.MinorNdisVersion = 0;
NdisInitUnicodeString(&protocolCharacteristics.Ndis30Chars.Name,PROTOCOL_NAME);
protocolCharacteristics.Ndis30Chars.OpenAdapterCompleteHandler = (OPEN_ADAPTER_COMPLETE_HANDLER)protocolOpenAdapterComplete;
protocolCharacteristics.Ndis30Chars.CloseAdapterCompleteHandler = (CLOSE_ADAPTER_COMPLETE_HANDLER)protocolCloseAdapterComplete;
protocolCharacteristics.Ndis30Chars.SendCompleteHandler = (SEND_COMPLETE_HANDLER)protocolSendComplete;
protocolCharacteristics.Ndis30Chars.TransferDataCompleteHandler = (TRANSFER_DATA_COMPLETE_HANDLER)protocolTransferDataComplete;
//protocolCharacteristics.Ndis40Chars.Ndis30Chars.ResetCompleteHandler = (RESET_COMPLETE_HANDLER)protocolResetComplete;
protocolCharacteristics.Ndis30Chars.RequestCompleteHandler = (REQUEST_COMPLETE_HANDLER)protocolRequestComplete;
protocolCharacteristics.Ndis30Chars.ReceiveCompleteHandler = (RECEIVE_COMPLETE_HANDLER)protocolReceiveComplete;
protocolCharacteristics.Ndis30Chars.StatusCompleteHandler = (STATUS_COMPLETE_HANDLER)protocolStatusComplete;
protocolCharacteristics.Ndis30Chars.StatusHandler = (STATUS_HANDLER)protocolStatus;
protocolCharacteristics.Ndis30Chars.ReceiveHandler = (RECEIVE_HANDLER)protocolReceive;
protocolCharacteristics.BindAdapterHandler = (BIND_HANDLER)protocolBindAdapter;
protocolCharacteristics.UnbindAdapterHandler = (UNBIND_HANDLER)protocolUnbindAdapter;
protocolCharacteristics.UnloadHandler = (UNLOAD_PROTOCOL_HANDLER)protocolUnload;
protocolCharacteristics.ReceivePacketHandler = (RECEIVE_PACKET_HANDLER)protocolReceivePacket;
protocolCharacteristics.PnPEventHandler = (PNP_EVENT_HANDLER)protocolPnPEvent;
NdisRegisterProtocol(&status,&g_hProtocolHandle,&protocolCharacteristics,sizeof(protocolCharacteristics));
if(status != NDIS_STATUS_SUCCESS)
{
drvDbgPrint("can't register protocol,raise status 0x%x.\n",status);
ExRaiseStatus(status);
}
// NdisIMAssociateMiniport(g_hMiniDriverHandle,g_hProtocolHandle);
// register unload handle
NdisMRegisterUnloadHandler(g_hNdisWrapperHandle,DriverUnload);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
//if(g_hMiniDriverHandle)
// NdisIMDeregisterLayeredMiniport(g_hMiniDriverHandle);
DriverUnload(pDriver);
NdisTerminateWrapper(g_hNdisWrapperHandle,NULL);
}
DbgLeaveFunctionWithStatus(status);
return status;
}
// driver unload
VOID DriverUnload(PDRIVER_OBJECT pDriver)
{
DbgEnterFunction();
NDIS_STATUS status;
if(g_hProtocolHandle)
{
drvDbgPrint("deregister protocol\n");
NdisDeregisterProtocol(&status,g_hProtocolHandle);
}
NdisDeleteNPagedLookasideList(&g_lookasideWorkItem);
DestroyPool();
DbgLeaveFunction();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -