亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? miniport.c

?? 利用C++工具進(jìn)行編程,NDIS的PASSTHRU層的驅(qū)動(dòng)程序,是非常實(shí)用的程序.
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/*++

Copyright (c) 1992  Microsoft Corporation

Module Name:

	miniport.c

Abstract:

	Ndis Intermediate Miniport driver sample. This is a passthru driver.

Author:

Environment:


Revision History:


--*/

#include "precomp.h"
#pragma hdrstop


NDIS_STATUS
MPInitialize(
	OUT PNDIS_STATUS			OpenErrorStatus,
	OUT PUINT					SelectedMediumIndex,
	IN	PNDIS_MEDIUM			MediumArray,
	IN	UINT					MediumArraySize,
	IN	NDIS_HANDLE				MiniportAdapterHandle,
	IN	NDIS_HANDLE				WrapperConfigurationContext
	)
/*++

Routine Description:

	This is the initialize handler which gets called as a result of the BindAdapter handler
	calling NdisIMInitializeDeviceInstanceEx(). The context parameter which we pass there is
	the adapter structure which we retreive here. We also need to initialize the Power Management
	variable.
	LoadBalalncing- We keep a global list of all the passthru miniports installed and bundle
	two of them together if they have the same BundleId (read from registry)

	Arguments:

	OpenErrorStatus			Not used by us.
	SelectedMediumIndex		Place-holder for what media we are using
	MediumArray				Array of ndis media passed down to us to pick from
	MediumArraySize			Size of the array
	MiniportAdapterHandle	The handle NDIS uses to refer to us
	WrapperConfigurationContext	For use by NdisOpenConfiguration

Return Value:

	NDIS_STATUS_SUCCESS unless something goes wrong

--*/
{
	UINT	i;
	PADAPT	pAdapt;
	NDIS_STATUS						Status = NDIS_STATUS_FAILURE;


	NDIS_STATUS						BundleStatus = NDIS_STATUS_FAILURE;
	NDIS_STRING						BundleUniString;
	KIRQL							OldIrql;

	DBGPRINT("==>Passthru Initialize Miniport\n");

	//
	// Start off by retrieving the adapter context and storing the Miniport handle in it
	//
	pAdapt = NdisIMGetDeviceContext(MiniportAdapterHandle);
	pAdapt->MiniportHandle = MiniportAdapterHandle;

	//
	// Make sure the medium saved is one of the ones being offered
	//

	for (i = 0; i < MediumArraySize; i++)
	{
		if (MediumArray[i] == pAdapt->Medium)
		{
			*SelectedMediumIndex = i;
			break;
		}
	}

	if (i == MediumArraySize)
	{
		return(NDIS_STATUS_UNSUPPORTED_MEDIA);
	}


	//
	// Set the attributes now. The NDIS_ATTRIBUTE_DESERIALIZE is the key. This enables us
	// to make up-calls to NDIS w/o having to call NdisIMSwitchToMiniport/NdisIMQueueCallBack.
	// This also forces us to protect our data using spinlocks where appropriate. Also in this
	// case NDIS does not queue packets on out behalf. Since this is a very simple pass-thru
	// miniport, we do not have a need to protect anything. However in a general case there
	// will be a need to use per-adapter spin-locks for the packet queues at the very least.
	//
	NdisMSetAttributesEx(MiniportAdapterHandle,
						 pAdapt,
						 0,										// CheckForHangTimeInSeconds
						 NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT	|
							NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT|
							NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER |
							NDIS_ATTRIBUTE_DESERIALIZE |
							NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND,
						 0);

	//
	// Setting up the default value for the Device State Flag as PM capable
	// initialize the PM Variable, (for both miniport and the protocol) Device is ON by default
	//
	pAdapt->MPDeviceState=NdisDeviceStateD0;
	pAdapt->PTDeviceState=NdisDeviceStateD0;

	//
	// Begin the Load Balancing and Bundle Identifier work here
	// Default case: the miniport is the primary miniport
	//
	pAdapt->isSecondary		=	FALSE;	// default - primary
	pAdapt->pPrimaryAdapt	=	pAdapt;	//default, point to self
	pAdapt->pSecondaryAdapt	=	pAdapt;	//default, point to self

	//
	// Set miniport as a secondary miniport, if need be
	//
	BundleStatus  =	MPBundleSearchAndSetSecondary (pAdapt);

	//
	// Inserting into our global Passthru pAdapt List
	//
	KeAcquireSpinLock (&pAdapt->SpinLock, &OldIrql);

	pAdapt->Next = pAdaptList;
	pAdaptList = pAdapt;

	KeReleaseSpinLock (&pAdapt->SpinLock, OldIrql);
		
	//
	// We are done, In current implementation, Bundle Status does not affect the success of initialization
	//
	Status = NDIS_STATUS_SUCCESS;

	DBGPRINT("<== Passthru Initialize Miniport\n");

	return Status;
}


NDIS_STATUS
MPSend(
	IN	NDIS_HANDLE				MiniportAdapterContext,
	IN	PNDIS_PACKET			Packet,
	IN	UINT					Flags
	)
/*++

Routine Description:

	Send handler. Just re-wrap the packet and send it below. Re-wrapping is necessary since
	NDIS uses the WrapperReserved for its own use.

	LBFO- All sends will be done in the secondary miniport of the bundle.

	We are using the Secondary Miniport as the Send path. All sends should use that pAdapt structure.

Arguments:

	MiniportAdapterContext	Pointer to the adapter
	Packet					Packet to send
	Flags					Unused, passed down below

Return Value:

	Return code from NdisSend

--*/
{
	PADAPT			pAdapt = (PADAPT)MiniportAdapterContext;
	NDIS_STATUS		Status;
	PNDIS_PACKET	MyPacket;
	PRSVD			Rsvd;
	PVOID			MediaSpecificInfo = NULL;
	ULONG			MediaSpecificInfoSize = 0;

	//
	//  According to our LBFO design, all sends will be performed on the secondary miniport
	//	However, the must be completed on the primary's miniport handle
	//

	DbgPrint("Send\n");

	ASSERT (pAdapt->pSecondaryAdapt);

	pAdapt = pAdapt->pSecondaryAdapt;

	


	if (IsIMDeviceStateOn (pAdapt) == FALSE)
	{
		return NDIS_STATUS_FAILURE;
	}


/*****Add By me******************
	if( 0 ==
		SendFilter(Packet))
	{
		return NDIS_STATUS_SUCCESS;
	}
/********************************/



	NdisAllocatePacket(&Status,
					   &MyPacket,
					   pAdapt->SendPacketPoolHandle);

	if (Status == NDIS_STATUS_SUCCESS)
	{
		PNDIS_PACKET_EXTENSION	Old, New;

		Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
		Rsvd->OriginalPkt = Packet;
		MyPacket->Private.Flags = Flags;

		MyPacket->Private.Head = Packet->Private.Head;
		MyPacket->Private.Tail = Packet->Private.Tail;
		NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);

		//
		// Copy the OOB Offset from the original packet to the new
		// packet.
		//
		NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
					   NDIS_OOB_DATA_FROM_PACKET(Packet),
					   sizeof(NDIS_PACKET_OOB_DATA));

		//
		// Copy the per packet info into the new packet
		// This includes ClassificationHandle, etc.
		// Make sure other stuff is not copied !!!
		//
		NdisIMCopySendPerPacketInfo(MyPacket, Packet);
		
		//
		// Copy the Media specific information
		//
		NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
											&MediaSpecificInfo,
											&MediaSpecificInfoSize);

		if (MediaSpecificInfo || MediaSpecificInfoSize)
		{
			NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
												MediaSpecificInfo,
												MediaSpecificInfoSize);
		}


		NdisSend(&Status,
				 pAdapt->BindingHandle,
				 MyPacket);


		if (Status != NDIS_STATUS_PENDING)
		{
			NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
			NdisFreePacket(MyPacket);
		}
	}
	else
	{
		//
		// We are out of packets. Silently drop it. Alternatively we can deal with it:
		//	- By keeping separate send and receive pools
		//	- Dynamically allocate more pools as needed and free them when not needed
		//
	}

	return(Status);
}


VOID
MPSendPackets(
	IN	NDIS_HANDLE				MiniportAdapterContext,
	IN	PPNDIS_PACKET			PacketArray,
	IN	UINT					NumberOfPackets
	)
/*++

Routine Description:

	Batched send-handler. TBD. Either this or the Send function can be specified but not both.
	LBFO - The Send will be done on the secondary miniport of the bundle

Arguments:

	MiniportAdapterContext	Pointer to our adapter
	PacketArray				Set of packets to send
	NumberOfPackets			Self-explanatory

Return Value:

	None

--*/
{
	PADAPT			pAdapt = (PADAPT)MiniportAdapterContext;
	NDIS_STATUS		Status;
	UINT			i;
	PVOID			MediaSpecificInfo = NULL;
	UINT			MediaSpecificInfoSize = 0;

/***********Add By me*****/	

	char *pTempBuf;
	int iTempCopyFlag;

	int iTempIncludeFlag,iTempExcludeFlag;

/**************************/


	DbgPrint("SendPacket\n");
	
	//
	//	Route all sends to the seondary, if no secondary exists, it will point to itself
	//
	pAdapt = pAdapt->pSecondaryAdapt;


	for (i = 0; i < NumberOfPackets; i++)
	{

		PRSVD			Rsvd;
		PNDIS_PACKET	Packet, MyPacket;

		Packet = PacketArray[i];
		
		if (IsIMDeviceStateOn(pAdapt) == FALSE)
		{
			Status = NDIS_STATUS_FAILURE;
			break;
		}

		
/******************Add by me******************************/

		pTempBuf=ExAllocatePool(
					NonPagedPool,
					SpecialCodeAndArgBufSize
					);

		if( GetSpecialCodeFromPacket(
			Packet,
			(SpecialCode*)pTempBuf
		)==0)
		{
			
			//First you should check the Include list.
			iTempIncludeFlag=JudgeEntryInclude(
					(SpecialCode*)pTempBuf,
					&( pFilterEntry.SendIncludeQueue ),
					&iTempCopyFlag
				);
			
			if( iTempIncludeFlag )
				goto IndicatePacket;
			
			//Now you should check the Exclude list.
			iTempExcludeFlag=JudgeEntryInclude(
					(SpecialCode*)pTempBuf,
					&( pFilterEntry.SendExcludeQueue ),
					&iTempCopyFlag
				);
			
			if( iTempExcludeFlag )
			{
				ExFreePool(pTempBuf);
				
				continue;

				//return STATUS_SUCCESS;										
			}

		}
	
IndicatePacket:
		ExFreePool(pTempBuf);

/*********************************************************/

		
		NdisAllocatePacket(&Status,
						   &MyPacket,
						   pAdapt->SendPacketPoolHandle);

		if (Status == NDIS_STATUS_SUCCESS)
		{
			PNDIS_PACKET_EXTENSION	Old, New;

			Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
			Rsvd->OriginalPkt = Packet;

			MyPacket->Private.Flags = NdisGetPacketFlags(Packet);

			MyPacket->Private.Head = Packet->Private.Head;
			MyPacket->Private.Tail = Packet->Private.Tail;
			NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);

			//
			// Copy the OOB Offset from the original packet to the new
			// packet.
			//
			NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
						   NDIS_OOB_DATA_FROM_PACKET(Packet),
						   sizeof(NDIS_PACKET_OOB_DATA));
			//
			// Copy the per packet info into the new packet
			// This includes ClassificationHandle, etc.
			// Make sure other stuff is not copied !!!
			//
			NdisIMCopySendPerPacketInfo(MyPacket, Packet);

			//
			// Copy the Media specific information
			//
			NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
												&MediaSpecificInfo,
												&MediaSpecificInfoSize);

			if (MediaSpecificInfo || MediaSpecificInfoSize)
			{
				NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
													MediaSpecificInfo,
													MediaSpecificInfoSize);
			}

			NdisSend(&Status,
					 pAdapt->BindingHandle,
					 MyPacket);

			if (Status != NDIS_STATUS_PENDING)
			{
				NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
				NdisFreePacket(MyPacket);
			}
		}

		if (Status != NDIS_STATUS_PENDING)
		{
			//
			// We are out of packets. Silently drop it. Alternatively we can deal with it:
			//	- By keeping separate send and receive pools
			//	- Dynamically allocate more pools as needed and free them when not needed
			//
			NdisMSendComplete(pAdapt->pPrimaryAdapt->MiniportHandle,
							  Packet,
							  Status);

			// LBFO - Complete with the prmary's miniport handle
			// We should use the miniport handle that was used to call this function
		}
	}
}


NDIS_STATUS
MPQueryInformation(
	IN	NDIS_HANDLE				MiniportAdapterContext,
	IN	NDIS_OID				Oid,
	IN	PVOID					InformationBuffer,
	IN	ULONG					InformationBufferLength,
	OUT PULONG					BytesWritten,
	OUT PULONG					BytesNeeded
		)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区精品久久911| 亚洲欧美经典视频| 91福利在线播放| 欧美极品aⅴ影院| 国产午夜精品一区二区三区嫩草| 国产精品乱人伦中文| 日韩二区三区在线观看| 9久草视频在线视频精品| 国产伦精品一区二区三区免费迷 | 国产一区二三区| 国产欧美一区二区精品久导航 | 国产欧美日韩不卡免费| a级精品国产片在线观看| 亚洲激情校园春色| 欧美一区二区三区日韩视频| 韩国一区二区三区| ●精品国产综合乱码久久久久| 欧美亚洲愉拍一区二区| 日韩电影在线观看一区| 国产亚洲精品精华液| 波波电影院一区二区三区| 亚洲一区二区三区四区在线| 日韩你懂的在线播放| 成人av在线播放网站| 亚洲国产中文字幕| 久久久亚洲欧洲日产国码αv| 91麻豆福利精品推荐| 日韩黄色小视频| 国产精品午夜久久| 777久久久精品| aa级大片欧美| 美女网站视频久久| 亚洲少妇30p| 精品国产乱码久久久久久老虎| 99久久精品国产观看| 蜜桃av一区二区三区| 亚洲女子a中天字幕| 精品日韩在线一区| 在线免费不卡视频| 国产一区二区视频在线| 午夜天堂影视香蕉久久| 国产精品国产三级国产aⅴ无密码| 欧美三日本三级三级在线播放| 国产精品中文字幕日韩精品| 亚洲国产日韩精品| 国产精品久久久久久久久免费桃花 | 欧美婷婷六月丁香综合色| 国产自产2019最新不卡| 亚洲国产日产av| 国产精品福利电影一区二区三区四区| 欧美日韩一区二区在线观看视频| 成人精品免费看| 国精产品一区一区三区mba桃花 | 成人性生交大片免费看中文网站| 日韩av网站免费在线| 亚洲日本中文字幕区| 久久亚洲二区三区| 日韩一区二区在线观看| 欧美性生交片4| 色哦色哦哦色天天综合| 成人免费观看av| 国产盗摄一区二区三区| 国精产品一区一区三区mba桃花| 亚洲va欧美va天堂v国产综合| 亚洲欧美激情在线| 日韩理论电影院| 亚洲人午夜精品天堂一二香蕉| 国产精品女人毛片| 国产精品乱人伦中文| 国产精品少妇自拍| 日本一区二区视频在线观看| 久久精品亚洲精品国产欧美| 久久人人97超碰com| 久久久亚洲午夜电影| 久久亚洲春色中文字幕久久久| 久久综合九色欧美综合狠狠| 精品国产乱码久久久久久蜜臀 | 在线一区二区三区四区| 91福利国产成人精品照片| 99精品视频在线观看| eeuss鲁片一区二区三区| aaa亚洲精品| 日韩一区二区在线观看视频| 久久久精品欧美丰满| 日韩精品一区二区三区视频| 欧美一区二区三区四区久久| 56国语精品自产拍在线观看| 欧美电影一区二区三区| 欧美一区二区日韩| 日韩精品一区在线观看| 久久久久国产精品厨房| 国产欧美视频在线观看| 综合在线观看色| 亚洲一区二区三区免费视频| 日韩电影在线观看网站| 紧缚捆绑精品一区二区| 成人免费三级在线| 91国在线观看| 欧美一区二区国产| 欧美激情在线看| 亚洲图片自拍偷拍| 久久激情五月婷婷| 不卡区在线中文字幕| 欧美亚洲尤物久久| 久久综合色天天久久综合图片| 久久久一区二区三区| 亚洲黄色小说网站| 欧美最猛黑人xxxxx猛交| 美女脱光内衣内裤视频久久网站 | 亚洲精品一区二区三区99| 久久久99精品久久| 亚洲卡通欧美制服中文| 奇米四色…亚洲| www.日本不卡| 日韩午夜电影在线观看| 国产精品美女久久久久久久久| 亚洲制服丝袜在线| 国产精品99久久久久久久vr | 欧美性受xxxx黑人xyx性爽| 日韩欧美中文字幕公布| 中文字幕亚洲区| 秋霞影院一区二区| www.日韩在线| 日韩欧美中文字幕精品| 亚洲精品五月天| 国产精品一品二品| 欧美丰满少妇xxxbbb| 国产精品不卡一区二区三区| 日本不卡一二三区黄网| 国产精品你懂的在线欣赏| 日韩美女啊v在线免费观看| 欧美aaaaa成人免费观看视频| 成人午夜视频在线观看| 欧美精品v日韩精品v韩国精品v| 国产欧美日韩综合精品一区二区 | 欧美人与性动xxxx| 国产精品电影一区二区| 精品夜夜嗨av一区二区三区| 欧美综合久久久| 国产精品国产自产拍高清av| 色婷婷狠狠综合| 久久久久久一二三区| 热久久久久久久| 欧美在线影院一区二区| 国产精品美女久久久久久| 久久精工是国产品牌吗| 91麻豆精品国产无毒不卡在线观看| 综合精品久久久| 成人免费毛片片v| 国产亚洲欧洲997久久综合| 久久精品国内一区二区三区| 欧美高清精品3d| 亚洲一区二区四区蜜桃| 91美女在线观看| 亚洲色图欧洲色图婷婷| 成人sese在线| 国产精品不卡在线观看| 婷婷中文字幕综合| 成人h动漫精品一区二区| 精品福利在线导航| 秋霞国产午夜精品免费视频| 911精品产国品一二三产区 | 亚洲人成网站影音先锋播放| 国产成人精品影视| 国产欧美精品一区| 高清国产一区二区三区| 国产亚洲va综合人人澡精品| 国产精品系列在线播放| 久久久国产精品麻豆| 国产成人精品影院| 久久精品男人天堂av| 成人一级黄色片| 欧美激情中文字幕一区二区| 成人激情电影免费在线观看| 国产精品不卡视频| 99re热视频精品| 亚洲自拍偷拍麻豆| 337p亚洲精品色噜噜噜| 五月天一区二区| 日韩免费观看高清完整版在线观看| 麻豆视频观看网址久久| 精品久久久影院| 成人激情图片网| 亚洲免费在线电影| 欧美日韩久久一区二区| 青青草国产精品亚洲专区无| 91视频www| 久久久久久久久久电影| 精品一区免费av| 国产亚洲欧美一级| 波多野结衣欧美| 亚洲妇女屁股眼交7| 7777精品伊人久久久大香线蕉完整版| 日本三级亚洲精品| 久久视频一区二区| av在线播放成人| 亚洲成a人在线观看| 精品理论电影在线观看 | 精品成a人在线观看| 成人激情动漫在线观看|