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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? miniport.c

?? 利用C++工具進行編程,NDIS的PASSTHRU層的驅動程序,是非常實用的程序.
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++

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
		)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品理论片色戒| 91精品在线免费观看| 美腿丝袜亚洲色图| 人人狠狠综合久久亚洲| 爽爽淫人综合网网站| 视频一区二区不卡| 日韩av一级片| 精品一区二区在线视频| 精品亚洲成av人在线观看| 国产酒店精品激情| 成人久久视频在线观看| 99视频有精品| 欧美色网一区二区| 欧美一区二区在线观看| 制服丝袜日韩国产| 欧美精品一区二区久久久| 久久久噜噜噜久久人人看| 国产精品欧美久久久久无广告 | 国产福利精品一区| 成人黄色在线网站| 欧美在线999| 精品欧美久久久| 国产欧美日韩激情| 亚洲一区在线视频| 精品一区二区综合| 色先锋久久av资源部| 欧美肥妇毛茸茸| 久久婷婷一区二区三区| 亚洲三级免费电影| 美女爽到高潮91| 9l国产精品久久久久麻豆| 欧美日韩国产大片| 国产欧美精品一区二区色综合| 亚洲女人小视频在线观看| 青娱乐精品视频| 成人高清av在线| 91精品国产乱| 亚洲私人黄色宅男| 国产毛片精品视频| 欧美四级电影网| 国产日韩精品一区二区浪潮av| 亚洲国产精品一区二区www在线| 国产一区二区三区免费看 | 欧美精品久久天天躁| 日本一区二区视频在线| 性久久久久久久| 成人国产精品免费观看动漫| 日韩亚洲欧美中文三级| 一区二区三区美女| 国产一区二区不卡在线| 91麻豆精品国产| 亚洲欧洲综合另类在线| 国产福利视频一区二区三区| 欧美大片一区二区| 亚洲成av人片一区二区梦乃| 白白色 亚洲乱淫| 欧美不卡123| 婷婷中文字幕综合| 91久久线看在观草草青青 | 色狠狠色狠狠综合| 中文字幕欧美三区| 国产一区二区在线电影| 69堂成人精品免费视频| 洋洋成人永久网站入口| 97久久精品人人澡人人爽| 国产亚洲成av人在线观看导航| 久久精品72免费观看| 欧美酷刑日本凌虐凌虐| 亚洲国产中文字幕在线视频综合| 99久久久无码国产精品| 国产精品久久久久久妇女6080| 国产精品一级黄| 亚洲国产高清不卡| 成人小视频免费观看| 中文字幕国产精品一区二区| 福利电影一区二区| 欧美国产精品一区二区| 99久久久国产精品| 亚洲激情五月婷婷| 欧美日免费三级在线| 亚洲成人tv网| 4438x亚洲最大成人网| 日韩福利电影在线| 欧美大度的电影原声| 精品亚洲aⅴ乱码一区二区三区| 日韩欧美一二三四区| 国产美女精品人人做人人爽| 久久嫩草精品久久久精品一| 成人高清伦理免费影院在线观看| 国产精品不卡在线| 91国偷自产一区二区三区观看 | 九九九精品视频| 日韩免费看网站| 国产精品一二三区| 成人欧美一区二区三区视频网页| 欧美综合一区二区| 青青青爽久久午夜综合久久午夜 | 成人免费av资源| 亚洲图片另类小说| 欧美久久久久中文字幕| 国产在线看一区| 亚洲欧美色一区| 日韩天堂在线观看| 大胆欧美人体老妇| 亚洲国产成人av网| 精品日韩在线观看| 91小视频在线观看| 久久99精品国产| 亚洲裸体xxx| 欧美大胆人体bbbb| 99国产精品久久久久久久久久 | 国产一区二区精品久久91| 亚洲精品中文在线观看| 日韩精品一区二区三区视频在线观看 | 久久久久久久av麻豆果冻| 色综合色综合色综合色综合色综合 | 亚洲综合偷拍欧美一区色| 欧美va亚洲va| 色素色在线综合| 国产麻豆精品视频| 五月婷婷久久丁香| 国产精品视频一区二区三区不卡| 777a∨成人精品桃花网| 91毛片在线观看| 国产乱对白刺激视频不卡| 日韩电影免费在线看| **网站欧美大片在线观看| 26uuu国产一区二区三区| 欧美影视一区在线| 99re热视频这里只精品| 国产一区二区三区四| 蜜臀va亚洲va欧美va天堂| 亚洲影视资源网| 亚洲精品你懂的| 国产欧美日韩视频一区二区| 日韩一区二区在线看| 欧美视频日韩视频| 在线观看国产精品网站| 91亚洲精品久久久蜜桃网站| 成人午夜碰碰视频| 国产成人精品一区二区三区四区| 免费xxxx性欧美18vr| 天天色图综合网| 午夜伊人狠狠久久| 亚洲精品视频免费看| 自拍偷拍亚洲激情| 亚洲人成网站色在线观看| 国产精品福利一区二区三区| 久久久国产精品麻豆| 精品少妇一区二区三区| 欧美精品丝袜中出| 欧美日韩视频在线第一区| 欧美三级日韩三级| 欧美日韩精品一区二区三区 | 蜜臀av一区二区三区| 日韩专区一卡二卡| 婷婷中文字幕一区三区| 午夜电影网一区| 美国三级日本三级久久99| 精品一区二区免费看| 天天色天天爱天天射综合| 亚洲成人资源网| 日本欧美一区二区三区| 日韩av一二三| 国产乱码精品1区2区3区| 国产精品1区2区3区在线观看| 另类小说综合欧美亚洲| 毛片基地黄久久久久久天堂| 国内偷窥港台综合视频在线播放| 国产在线精品一区在线观看麻豆| 国产成人av在线影院| 成人午夜视频在线| 在线观看欧美黄色| 欧美一区午夜精品| 精品福利一区二区三区免费视频| 久久久久综合网| 国产精品国产三级国产普通话三级 | 国产精品久久久久久久久搜平片| 中文字幕第一页久久| 中文av字幕一区| 亚洲高清视频的网址| 精品在线一区二区三区| 国产在线播放一区二区三区| 99热在这里有精品免费| 日本韩国一区二区三区| 制服.丝袜.亚洲.中文.综合| 久久理论电影网| 亚洲成a人v欧美综合天堂下载| 国产在线不卡视频| 欧美午夜电影网| 国产女人18水真多18精品一级做| 亚洲国产一区二区三区| 国产一区二区视频在线| 色婷婷狠狠综合| 国产偷国产偷精品高清尤物| 亚洲小说欧美激情另类| 国产盗摄一区二区| 日韩欧美一区在线观看| 亚洲精品国产品国语在线app| 国产一区二区三区免费看|