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

📄 main.cpp

📁 pppoe client
💻 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 + -