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

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

?? tmpnp.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1998 by Philips Semiconductors

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED AND COPIED IN 
ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH A LICENSE AND WITH THE 
INCLUSION OF THE THIS COPY RIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES 
OF THIS SOFTWARE MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. 

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. 

PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE
ON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.
----------------------------------------------------------------------------*/
/*
	HISTORY
	960325	Tilakraj Roy 	Created
	960325	Tilakraj Roy 	Due to the PnP bug in TM-CTC we use the PCI Bios
							rather than	Win95 for retrieving PnP Settings.
	960326	Tilakraj Roy	Added conditional code for USE_CM
	960404	Tilakraj Roy	Added code for handling configuration
	960620	Tilakraj Roy	Added comments and remomed TMPNP_OBJECT dependency
							on TM_CONFIG
	981021	Tilakraj Roy	Ported to WDM PnP interfaces.
	010828	Wim de Haan		Changed code to remove compiler warnings:
							line 824: 'tmmanPnpStopDevice' : must return a value
							line 1051: 'tmmanDeviceProperty' : not all control paths return a value
*/

/*----------------------------------------------------------------------------
          SYSTEM INCLUDE FILES
----------------------------------------------------------------------------*/
#include "wdm.h"

/*----------------------------------------------------------------------------
          DRIVER SPECIFIC INCLUDE FILES
----------------------------------------------------------------------------*/
#include "tmmanapi.h"
#include "tmmanlib.h"
#include "platform.h"

#define SDRAM_LENGTH	(8 * 1024 * 1024)
#define MMIO_LENGTH		(2 * 1024 * 1024)

BOOLEAN	pnpGetPCIInformation ( 
	IN USHORT Vendor, 
	IN USHORT Device,
	IN ULONG  MMIOAddress,
	OUT	PULONG	BusNumberPtr,
	PPCI_SLOT_NUMBER SlotNumberPtr );

VOID	DumpPNPResources ( 
	PCM_RESOURCE_LIST	ResourceList );

/*----------------------------------------------------------------------------
          GENERIC PNP FUNCTIONS
----------------------------------------------------------------------------*/

NTSTATUS tmmanPnpComplete (
	PDEVICE_OBJECT DeviceObject,
	PIRP Irp,
	PVOID Context  );


char * tmmanPnpDumpMinorCode ( ULONG MinorFunction );
char * tmmanPnpDumpState ( ULONG State );

NTSTATUS
tmmanPnp(
	PDEVICE_OBJECT FunctionalDeviceObject, 
	PIRP Irp )
{
	NTSTATUS				Status = STATUS_SUCCESS;
	PIO_STACK_LOCATION		IoStack;
	KEVENT					StackDriverEvent;
	TMManDeviceObject*			DeviceExtension = 
		(TMManDeviceObject*)FunctionalDeviceObject->DeviceExtension;

	DPF (0,("tmmanPnp:FunctionalDeviceObject[%x]:Irp[%x]\n", 
		FunctionalDeviceObject, Irp ));	

	// Get a pointer to the current location in the Irp. This is where
	// the function codes and parameters are located.
	IoStack = IoGetCurrentIrpStackLocation(Irp);

	KeInitializeEvent ( &StackDriverEvent, NotificationEvent, FALSE );

	DPF(0, ("tmmanPnp:MinorCode[%s]:State[%s]\n", 
		tmmanPnpDumpMinorCode ( IoStack->MinorFunction ),
		tmmanPnpDumpState ( DeviceExtension->DeviceState ) ));
	
	switch(IoStack->MinorFunction)
	{
		case IRP_MN_START_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_NEVERSTARTED :
			case constTMMan_DEVICE_STATE_STARTED :
			IoCopyCurrentIrpStackLocationToNext ( Irp );

			IoSetCompletionRoutine (
				Irp,
				tmmanPnpComplete,
				&StackDriverEvent,
				TRUE,
				TRUE,
				TRUE );

			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );

			if ( STATUS_PENDING == Status )
			{
				KeWaitForSingleObject (
					&StackDriverEvent,
					Executive,
					KernelMode,
					FALSE,
					NULL );

				Status = Irp->IoStatus.Status;

			}

			if ( NT_SUCCESS ( Status ) )
			{
				Status = tmmanPnpStartDevice ( FunctionalDeviceObject, Irp );

				if ( NT_SUCCESS ( Status ) )
				{
					DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_STARTED;
				}

			}

			Irp->IoStatus.Status = Status;
			Irp->IoStatus.Information = 0;
			IoCompleteRequest ( Irp, IO_NO_INCREMENT );
			break;


			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;
		
		case IRP_MN_QUERY_REMOVE_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_STARTED :
			Status = tmmanDeviceCanRemove ( DeviceExtension );

			Irp->IoStatus.Status = Status;

			if ( ! NT_SUCCESS ( Status ) )
			{
				IoCompleteRequest (Irp, IO_NO_INCREMENT);	
			}
			else
			{
				DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_REMOVEPENDING;

				tmmanDeviceWaitForRemove ( DeviceExtension );

				IoSkipCurrentIrpStackLocation (Irp);

				Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			}
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;

		case IRP_MN_REMOVE_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_REMOVEPENDING :
			tmmanPnpStopDevice ( FunctionalDeviceObject );
			// fall through

			case constTMMan_DEVICE_STATE_SURPRISEREMOVED :
			case constTMMan_DEVICE_STATE_STARTED :
			DeviceExtension->Removed = TRUE;
			DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_REMOVED;
			tmmanDeviceWaitForRemove ( DeviceExtension );
			
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );

			tmmanPnpRemoveDevice(
				FunctionalDeviceObject );
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;
		// not suported under Win98
		/*
		case IRP_MN_SURPRISE_REMOVAL:
		DPF (0,("IRP_MN_SURPRISE_REMOVAL\n"));
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_STARTED :
			DPF (0,("DEVICE_STATE_STARTED\n"));
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDrivers ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;
		*/

		case IRP_MN_CANCEL_REMOVE_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_REMOVEPENDING :

			IoCopyCurrentIrpStackLocationToNext ( Irp );

			IoSetCompletionRoutine (
				Irp,
				tmmanPnpComplete,
				&StackDriverEvent,
				TRUE,
				TRUE,
				TRUE );

			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );

			if ( STATUS_PENDING == Status )
			{
				KeWaitForSingleObject (
					&StackDriverEvent,
					Executive,
					KernelMode,
					FALSE,
					NULL );

			}
			DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_STARTED;
			Irp->IoStatus.Status = Status;
			Irp->IoStatus.Information = 0;
			IoCompleteRequest(Irp, IO_NO_INCREMENT);
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;

		
		case IRP_MN_QUERY_STOP_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_STARTED :

			Status = tmmanDeviceCanRemove ( DeviceExtension );

			Irp->IoStatus.Status = Status;

			if ( ! NT_SUCCESS ( Status ) )
			{
				IoCompleteRequest (Irp, IO_NO_INCREMENT);	
			}
			else
			{
				DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_STOPPENDING;

				tmmanDeviceWaitForRemove ( DeviceExtension );

				IoSkipCurrentIrpStackLocation (Irp);

				Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			}
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;


		case IRP_MN_CANCEL_STOP_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_STOPPENDING :
			IoCopyCurrentIrpStackLocationToNext ( Irp );

			IoSetCompletionRoutine (
				Irp,
				tmmanPnpComplete,
				&StackDriverEvent,
				TRUE,
				TRUE,
				TRUE );

			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );

			if ( STATUS_PENDING == Status )
			{
				KeWaitForSingleObject (
					&StackDriverEvent,
					Executive,
					KernelMode,
					FALSE,
					NULL );

			}
			DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_STARTED;
			Irp->IoStatus.Status = Status;
			Irp->IoStatus.Information = 0;
			IoCompleteRequest(Irp, IO_NO_INCREMENT);
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;

		case IRP_MN_STOP_DEVICE:
		switch ( DeviceExtension->DeviceState )
		{
			case constTMMan_DEVICE_STATE_STOPPENDING :
			DeviceExtension->Stopped = TRUE;
			DeviceExtension->DeviceState = constTMMan_DEVICE_STATE_STOPPED;
			tmmanPnpStopDevice ( FunctionalDeviceObject );
			tmmanDeviceWaitForStop ( DeviceExtension );
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;

			default :
			IoSkipCurrentIrpStackLocation ( Irp );
			Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
			break;
		}
		break;

		default:
		IoSkipCurrentIrpStackLocation ( Irp );
		Status = IoCallDriver ( DeviceExtension->StackDeviceObject, Irp );
		break;

	}

	return Status;
}
/*
NTSTATUS
tmmanPower(
	PDEVICE_OBJECT DeviceObject, 
	PIRP Irp )
{
	DPF (0,("tmmanPower:DeviceObject[%x]:Irp[%x]\n", DeviceObject, Irp ));	

	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}
*/

NTSTATUS
tmmanPnpAddDevice(
	PDRIVER_OBJECT DriverObject,
	PDEVICE_OBJECT PhysicalDeviceObject )
{
    UNICODE_STRING		KernelDeviceNameUnicode;
	PDEVICE_OBJECT		FunctionalDeviceObject;
	PDEVICE_OBJECT		StackDeviceObject;
	ULONG				DeviceNumber;
	ULONG				Idx;
	NTSTATUS			Status;
	TMManDeviceObject*	DeviceExtension;

	ANSI_STRING			KernelDeviceNameANSI;
	CHAR				KernelDeviceName[32];


	for ( Idx = 0 ; Idx < TMManGlobal->MaximumDevices ; Idx ++ )
	{
		// find an empty slot
		if ( TMManGlobal->DeviceList[Idx] == NULL )
		{
			DeviceNumber = Idx;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品免费观看| 偷拍一区二区三区| 懂色中文一区二区在线播放| 2014亚洲片线观看视频免费| 精品一区二区三区免费观看| 久久这里只有精品首页| 精东粉嫩av免费一区二区三区| 久久精品视频免费| av高清久久久| 亚洲综合激情小说| 日韩丝袜美女视频| 成人涩涩免费视频| 亚洲卡通欧美制服中文| 欧美日韩三级一区| 久久疯狂做爰流白浆xx| 国产欧美日韩激情| 日本精品视频一区二区三区| 日韩和的一区二区| 久久久久久久久99精品| 色综合视频在线观看| 日精品一区二区| 国产情人综合久久777777| 99久久精品一区二区| 天天综合日日夜夜精品| 久久一区二区三区四区| 色婷婷综合中文久久一本| 日韩成人精品在线| 亚洲国产精品激情在线观看| 欧美日韩大陆在线| 国产精品18久久久久久久久久久久 | 欧美精品乱码久久久久久按摩| 久久99精品久久久久久动态图 | 91成人看片片| 国产伦精品一区二区三区免费迷| 综合久久给合久久狠狠狠97色| 欧美日韩一区二区三区四区| 国产传媒欧美日韩成人| 婷婷综合另类小说色区| 久久精品视频网| 91精品一区二区三区久久久久久| 不卡av电影在线播放| 麻豆高清免费国产一区| 亚洲精品精品亚洲| 国产日韩欧美精品综合| 在线成人av影院| 色94色欧美sute亚洲13| 国产精品一卡二| 美女一区二区三区在线观看| 亚洲精品高清视频在线观看| 久久精品一区八戒影视| 日韩欧美国产电影| 欧美久久一区二区| 97se亚洲国产综合在线| 丰满放荡岳乱妇91ww| 男女性色大片免费观看一区二区 | 麻豆成人免费电影| 亚洲国产一二三| 亚洲欧洲日韩在线| 国产精品入口麻豆九色| 欧美精品一区二区三区四区| 欧美一区二区在线视频| 色狠狠色狠狠综合| 色综合久久天天| 成人av影视在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品亚洲一区二区三区妖精| 天堂资源在线中文精品| 亚洲激情图片一区| 亚洲乱码国产乱码精品精可以看| 国产清纯白嫩初高生在线观看91| 精品久久久久久无| 日韩精品一区二区三区视频 | 精品一区二区免费在线观看| 午夜精品福利一区二区三区av| 亚洲视频你懂的| 一区视频在线播放| 中文字幕一区二区日韩精品绯色 | 亚洲综合区在线| 亚洲免费观看高清完整版在线观看| 国产精品久久久久永久免费观看 | 91黄色小视频| 色综合久久99| 欧美性视频一区二区三区| 色婷婷综合五月| 欧美色图一区二区三区| 欧美少妇性性性| 欧美一区午夜视频在线观看| 日韩亚洲欧美在线观看| 欧美不卡在线视频| 久久久蜜臀国产一区二区| 国产精品欧美一级免费| 亚洲视频在线一区观看| 亚洲综合999| 免费在线一区观看| 国产一区二区三区视频在线播放| 丁香啪啪综合成人亚洲小说 | 亚洲第一主播视频| 免费在线观看一区| 国产大陆a不卡| 91丨九色丨蝌蚪丨老版| 欧美性猛交xxxxxx富婆| 日韩精品一区二区三区视频播放| 国产婷婷一区二区| 亚洲美女视频在线| 日韩成人一区二区三区在线观看| 久草这里只有精品视频| www.欧美精品一二区| 欧美在线你懂得| 精品国产乱码久久久久久老虎| 久久精品视频免费观看| 亚洲影视在线观看| 韩国v欧美v日本v亚洲v| 在线视频欧美精品| 久久综合久久综合九色| 一区二区三区色| 激情欧美日韩一区二区| 色999日韩国产欧美一区二区| 日韩欧美中文字幕公布| 国产精品黄色在线观看| 男人操女人的视频在线观看欧美| 成人美女视频在线观看| 欧美日韩中文国产| 欧美经典一区二区| 日韩高清一区二区| 99精品视频一区二区三区| 91精品综合久久久久久| 亚洲色图制服丝袜| 国产在线一区观看| 欧美亚洲精品一区| 国产精品久久影院| 久久精品国产**网站演员| 色婷婷综合久久| 国产网红主播福利一区二区| 日韩—二三区免费观看av| 99久久国产综合精品麻豆| 日韩精品一区二区三区在线| 一区二区三区成人| 粉嫩一区二区三区性色av| 91精品国产欧美一区二区| 亚洲欧洲另类国产综合| 国产美女娇喘av呻吟久久 | 日韩欧美国产成人一区二区| 亚洲精品国产视频| 成人丝袜高跟foot| 久久人人97超碰com| 免费看日韩a级影片| 欧美色精品天天在线观看视频| 国产精品色哟哟| 国产一区二区三区香蕉| 日韩精品专区在线影院重磅| 亚洲一区二区三区四区中文字幕| 成人免费黄色在线| 中文av一区特黄| 懂色av一区二区三区蜜臀| 久久综合久久99| 激情综合色丁香一区二区| 欧美一区二区三区在| 午夜精品一区在线观看| 欧美在线看片a免费观看| 亚洲免费在线视频一区 二区| av一区二区不卡| 最近日韩中文字幕| 白白色 亚洲乱淫| 国产精品视频在线看| 国产精品18久久久久久久久久久久 | 亚洲免费av网站| 99热在这里有精品免费| 国产精品对白交换视频| 99麻豆久久久国产精品免费| 国产欧美视频在线观看| 国产麻豆欧美日韩一区| 国产欧美精品一区二区色综合| 国内精品嫩模私拍在线| 国产日韩欧美制服另类| 成人爱爱电影网址| 国产精品国产三级国产有无不卡| 成人精品视频一区| 亚洲人xxxx| 欧美日韩亚洲综合在线| 美女视频黄频大全不卡视频在线播放| 91精品黄色片免费大全| 久久99久久久久| 久久久另类综合| 不卡av电影在线播放| 一区二区免费在线播放| 8v天堂国产在线一区二区| 久久成人精品无人区| 国产亚洲自拍一区| 色综合久久天天| 男人的j进女人的j一区| 国产欧美精品日韩区二区麻豆天美 | 亚洲男人天堂一区| 91精品国产综合久久国产大片| 九九热在线视频观看这里只有精品| 欧美tk—视频vk| 白白色 亚洲乱淫| 亚洲高清在线精品| 2014亚洲片线观看视频免费| 色综合天天综合网天天狠天天 | 久久99精品久久只有精品|