亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久精品国产在热久久| 欧美日韩日本视频| 欧美优质美女网站| 亚洲精品一区二区三区在线观看| **网站欧美大片在线观看| 美女视频网站黄色亚洲| 欧美日韩一级视频| 中文字幕一区二区三区四区不卡| 免费成人av在线| 欧美无砖专区一中文字| 亚洲人成亚洲人成在线观看图片 | 欧美三级韩国三级日本三斤| 国产日韩视频一区二区三区| 男人的天堂亚洲一区| 欧美久久久久久久久| 一区二区三区蜜桃网| 99久久er热在这里只有精品66| 国产亚洲欧美在线| 国内精品国产成人国产三级粉色 | 久久久久亚洲蜜桃| 狠狠色丁香久久婷婷综合_中| 8v天堂国产在线一区二区| 亚洲一区二区三区四区在线 | 精品免费日韩av| 青青草97国产精品免费观看 | 2021中文字幕一区亚洲| 麻豆一区二区99久久久久| 91精品啪在线观看国产60岁| 天堂av在线一区| 欧美老肥妇做.爰bbww视频| 亚洲影院久久精品| 欧美久久久久免费| 美女视频免费一区| 26uuu成人网一区二区三区| 久久精品国产色蜜蜜麻豆| 精品久久国产字幕高潮| 国产一区二区不卡在线 | 亚洲在线视频网站| 欧美日韩综合色| 免费人成网站在线观看欧美高清| 日韩精品专区在线影院观看| 免费成人小视频| 欧美精品一区二区三区高清aⅴ| 国产乱国产乱300精品| 中文字幕日本不卡| 国产69精品一区二区亚洲孕妇| 国产婷婷一区二区| 99re热这里只有精品免费视频| 一区二区在线观看视频在线观看| 在线播放/欧美激情| 久久成人久久鬼色| 国产精品午夜电影| 欧美色精品天天在线观看视频| 日韩不卡一二三区| 国产亚洲成年网址在线观看| 91在线国产福利| 视频一区欧美精品| 久久久精品一品道一区| 日本韩国欧美一区二区三区| 麻豆久久一区二区| 中文字幕一区二区三区av| 欧美色男人天堂| 国产精品资源在线看| 一区二区在线观看不卡| 日韩欧美色电影| 91麻豆高清视频| 日本美女一区二区三区| 中文字幕一区免费在线观看| 欧美日本不卡视频| 99在线精品免费| 日本在线不卡视频| 亚洲欧洲制服丝袜| 日韩亚洲欧美在线| 91精品1区2区| 丁香激情综合五月| 日韩在线播放一区二区| 国产精品传媒入口麻豆| 欧美变态口味重另类| 欧美亚洲动漫精品| 国产成人欧美日韩在线电影| 天天色天天爱天天射综合| 日韩一区中文字幕| 国产色婷婷亚洲99精品小说| 欧美精品色一区二区三区| 99久久精品久久久久久清纯| 国内精品在线播放| 男女性色大片免费观看一区二区| 亚洲精品自拍动漫在线| 国产女主播一区| 精品国产伦理网| 欧美精品1区2区| 在线看不卡av| 97成人超碰视| www..com久久爱| 成人一道本在线| 国产成人av一区二区| 极品瑜伽女神91| 免费成人av在线| 蜜臀久久99精品久久久久宅男| 一区二区三区在线免费观看| 日本一区二区成人| 国产区在线观看成人精品| 久久久欧美精品sm网站| 精品国产伦一区二区三区观看体验| 欧美精品久久久久久久久老牛影院| 色综合久久66| 色婷婷久久综合| 欧美色手机在线观看| 欧美亚洲国产bt| 欧美区一区二区三区| 91麻豆精品国产91久久久久久久久 | 国产欧美日韩综合精品一区二区| 日韩一区二区三区电影在线观看 | 欧美日韩高清一区二区不卡| 91福利精品视频| 欧美亚洲国产bt| 欧美日韩久久久久久| 欧美日韩精品一区二区天天拍小说| 欧洲在线/亚洲| 欧美精品免费视频| 日韩三级.com| 久久午夜色播影院免费高清| 国产偷国产偷精品高清尤物 | 久久久久国产一区二区三区四区| 精品国产电影一区二区| 久久亚洲一区二区三区四区| 久久久久国产精品人| 中文字幕一区二区不卡| 一区二区三区免费在线观看| 日韩国产在线观看一区| 国产综合一区二区| 国产成人综合网站| 一本色道久久加勒比精品| 91精品麻豆日日躁夜夜躁| 精品国产第一区二区三区观看体验| 欧美国产日韩一二三区| 亚洲国产欧美在线| 精品写真视频在线观看| 99精品桃花视频在线观看| 欧美色爱综合网| 久久这里只有精品首页| 国产精品灌醉下药二区| 天天色天天爱天天射综合| 国内精品在线播放| 在线观看亚洲成人| 精品99一区二区| 亚洲欧美视频一区| 精品一区二区综合| 96av麻豆蜜桃一区二区| 91精品国产91久久综合桃花| 久久久精品tv| 亚洲一区二区四区蜜桃| 激情综合色播五月| 色噜噜夜夜夜综合网| 精品免费国产一区二区三区四区| 国产精品护士白丝一区av| 日韩精品每日更新| 91免费观看视频在线| 日韩精品一区二区三区四区| 亚洲色图欧美偷拍| 国产精品中文字幕欧美| 欧美性色综合网| 国产精品美女久久久久aⅴ| 天天影视网天天综合色在线播放 | ㊣最新国产の精品bt伙计久久| 偷拍自拍另类欧美| 91香蕉视频在线| 久久嫩草精品久久久精品| 亚洲bdsm女犯bdsm网站| aaa亚洲精品| 国产日本一区二区| 美女一区二区三区| 欧美视频一区二区三区在线观看| 久久精品亚洲麻豆av一区二区| 三级久久三级久久| 欧洲中文字幕精品| 中文字幕一区二区三区蜜月| 国产在线精品免费av| 日韩精品最新网址| 日本美女一区二区| 欧美剧在线免费观看网站| 亚洲欧美日韩在线播放| 成人在线综合网| 久久久综合激的五月天| 激情五月婷婷综合网| 日韩三级av在线播放| 日本最新不卡在线| 欧美久久久影院| 日韩精品一卡二卡三卡四卡无卡| 在线一区二区三区四区五区| 亚洲少妇屁股交4| 不卡影院免费观看| 中文字幕亚洲成人| 97久久精品人人爽人人爽蜜臀| 久久久一区二区三区| 国产成人av资源| 国产精品久线在线观看| 99久久久久免费精品国产| **欧美大码日韩| 欧美在线制服丝袜|