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

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

?? driverentry.cpp

?? Windows WDM 設(shè)備驅(qū)動程序開發(fā)指南光盤 保護(hù)隨書的源代碼
?? CPP
字號:
// Main program for pktdma driver
// Copyright (C) 1999 by Walter Oney
// All rights reserved

#include "stddcls.h"
#include "driver.h"

NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo);
VOID DriverUnload(IN PDRIVER_OBJECT fdo);

BOOLEAN win98 = FALSE;

UNICODE_STRING servkey;

///////////////////////////////////////////////////////////////////////////////

#pragma INITCODE

extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
	IN PUNICODE_STRING RegistryPath)
	{							// DriverEntry
	KdPrint((DRIVERNAME " - Entering DriverEntry: DriverObject %8.8lX\n", DriverObject));

	// Insist that OS support at least the WDM level of the DDK we use

	if (!IoIsWdmVersionAvailable(1, 0))
		{
		KdPrint((DRIVERNAME " - Expected version of WDM (%d.%2.2d) not available\n", 1, 0));
		return STATUS_UNSUCCESSFUL;
		}

	// See if we're running under Win98 or NT:

	win98 = IsWin98();

#if DBG
	if (win98)
		KdPrint((DRIVERNAME " - Running under Windows 98\n"));
	else
		KdPrint((DRIVERNAME " - Running under NT\n"));
#endif

	// Save the name of the service key

	servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR));
	if (!servkey.Buffer)
		{
		KdPrint((DRIVERNAME " - Unable to allocate %d bytes for copy of service key name\n", RegistryPath->Length + sizeof(WCHAR)));
		return STATUS_INSUFFICIENT_RESOURCES;
		}
	servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);
	RtlCopyUnicodeString(&servkey, RegistryPath);

	// Initialize function pointers

	DriverObject->DriverUnload = DriverUnload;
	DriverObject->DriverExtension->AddDevice = AddDevice;

	DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
	DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
	DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite;
	DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite;
	DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchCleanup;
	DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
	DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
	
	return STATUS_SUCCESS;
	}							// DriverEntry

///////////////////////////////////////////////////////////////////////////////

#pragma PAGEDCODE

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
	{							// DriverUnload
	PAGED_CODE();
	KdPrint((DRIVERNAME " - Entering DriverUnload: DriverObject %8.8lX\n", DriverObject));
	RtlFreeUnicodeString(&servkey);
	}							// DriverUnload

///////////////////////////////////////////////////////////////////////////////

NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
	{							// AddDevice
	PAGED_CODE();
	KdPrint((DRIVERNAME " - Entering AddDevice: DriverObject %8.8lX, pdo %8.8lX\n", DriverObject, pdo));

	NTSTATUS status;

	// Create a functional device object to represent the hardware we're managing.

	PDEVICE_OBJECT fdo;

	ULONG dxsize = (sizeof(DEVICE_EXTENSION) + 7) & ~7;
	ULONG xsize = dxsize + GetSizeofGenericExtension();
	
	UNICODE_STRING devname;
	RtlInitUnicodeString(&devname, L"\\DosDevices\\PKTDMA");

	status = IoCreateDevice(DriverObject, xsize, &devname,
		FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
	if (!NT_SUCCESS(status))
		{						// can't create device object
		KdPrint((DRIVERNAME " - IoCreateDevice failed - %X\n", status));
		return status;
		}						// can't create device object
	
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	// From this point forward, any error will have side effects that need to
	// be cleaned up. Using a try-finally block allows us to modify the program
	// easily without losing track of the side effects.

	__try
		{						// finish initialization
		pdx->DeviceObject = fdo;
		pdx->Pdo = pdo;

		// Make a copy of the device name

		pdx->devname.Buffer = (PWCHAR) ExAllocatePool(NonPagedPool, devname.MaximumLength);
		if (!pdx->devname.Buffer)
			{					// can't allocate buffer
			status = STATUS_INSUFFICIENT_RESOURCES;
			KdPrint((DRIVERNAME " - Unable to allocate %d bytes for copy of name\n", devname.MaximumLength));
			__leave;
			}					// can't allocate buffer
		pdx->devname.MaximumLength = devname.MaximumLength;
		RtlCopyUnicodeString(&pdx->devname, &devname);

		// Declare the buffering method we'll use for read/write requests

		fdo->Flags |= DO_DIRECT_IO;

		// Initialize DPC object

		IoInitializeDpcRequest(fdo, DpcForIsr);

		// The S5933 requires DMA buffers be aligned on a 4-byte boundary

		if (fdo->AlignmentRequirement < 3)
			fdo->AlignmentRequirement = 3;

		// Link our device object into the stack leading to the PDO
		
		pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo);
		if (!pdx->LowerDeviceObject)
			{					// can't attach								 
			KdPrint((DRIVERNAME " - IoAttachDeviceToDeviceStack failed\n"));
			status = STATUS_DEVICE_REMOVED;
			__leave;
			}					// can't attach

		// Initialize to use the GENERIC.SYS library

		pdx->pgx = (PGENERIC_EXTENSION) ((PUCHAR) pdx + dxsize);

		GENERIC_INIT_STRUCT gis = {sizeof(GENERIC_INIT_STRUCT)};
		gis.DeviceObject = fdo;
		gis.Pdo = pdo;
		gis.Ldo = pdx->LowerDeviceObject;
		gis.RemoveLock = &pdx->RemoveLock;
		gis.DeviceQueue = &pdx->dqReadWrite;
		gis.StartIo = StartIo;
		gis.StartDevice = StartDevice;
		gis.StopDevice = StopDevice;
		gis.RemoveDevice = RemoveDevice;
		RtlInitUnicodeString(&gis.DebugName, LDRIVERNAME);

		status = InitializeGenericExtension(pdx->pgx, &gis);
		if (!NT_SUCCESS(status))
			{
			KdPrint((DRIVERNAME " - InitializeGenericExtension failed - %X\n", status));
			__leave;
			}

		// Clear the "initializing" flag so that we can get IRPs

		fdo->Flags &= ~DO_DEVICE_INITIALIZING;
		}						// finish initialization
	__finally
		{						// cleanup side effects
		if (!NT_SUCCESS(status))
			{					// need to cleanup
			if (pdx->devname.Buffer)
				RtlFreeUnicodeString(&pdx->devname);
			if (pdx->LowerDeviceObject)
				IoDetachDevice(pdx->LowerDeviceObject);
			IoDeleteDevice(fdo);
			}					// need to cleanup
		}						// cleanup side effects

	return status;
	}							// AddDevice

///////////////////////////////////////////////////////////////////////////////

#pragma LOCKEDCODE

NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status, IN ULONG_PTR info)
	{							// CompleteRequest
	Irp->IoStatus.Status = status;
	Irp->IoStatus.Information = info;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
	}							// CompleteRequest

///////////////////////////////////////////////////////////////////////////////

#pragma PAGEDCODE

NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp)
	{							// DispatchPnp
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	return GenericDispatchPnp(pdx->pgx, Irp);
	}							// DispatchPnp

NTSTATUS DispatchPower(PDEVICE_OBJECT fdo, PIRP Irp)
	{							// DispatchPower
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	return GenericDispatchPower(pdx->pgx, Irp);
	}							// DispatchPower

///////////////////////////////////////////////////////////////////////////////

#pragma PAGEDCODE

VOID RemoveDevice(IN PDEVICE_OBJECT fdo)
	{							// RemoveDevice
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	NTSTATUS status;

	RtlFreeUnicodeString(&pdx->devname);

	if (pdx->LowerDeviceObject)
		IoDetachDevice(pdx->LowerDeviceObject);

	IoDeleteDevice(fdo);
	}							// RemoveDevice

///////////////////////////////////////////////////////////////////////////////

#if DBG && defined(_X86_)
#pragma LOCKEDCODE

extern "C" void __declspec(naked) __cdecl _chkesp()
	{
	_asm je okay
	ASSERT(!DRIVERNAME " - Stack pointer mismatch!");
okay:
	_asm ret
	}

#endif // DBG

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产一区二区三区四区| 日韩电影在线免费| 婷婷成人综合网| 九九精品视频在线看| 色婷婷综合在线| 国产欧美一区二区精品忘忧草| 夜夜嗨av一区二区三区中文字幕| 国产在线精品不卡| 91精品国产综合久久久久久久 | 综合激情网...| 精品一区二区三区欧美| 日本道精品一区二区三区| 国产日韩精品一区二区浪潮av| 日韩精品乱码av一区二区| 色哟哟国产精品| 国产欧美精品区一区二区三区| 麻豆传媒一区二区三区| 欧美亚洲国产一区二区三区| 国产精品视频第一区| 国产精品综合在线视频| 欧美va日韩va| 欧美aⅴ一区二区三区视频| 欧美日韩综合在线免费观看| 亚洲蜜臀av乱码久久精品| 成人av资源在线| 国产欧美一区二区精品性色 | 日韩三级电影网址| 午夜精品久久久久久久久| 91免费看片在线观看| 国产精品视频观看| 成人午夜又粗又硬又大| 国产日韩av一区二区| 国产精品自在欧美一区| 久久亚洲影视婷婷| 国产成人免费视频一区| 久久九九久久九九| 成人性生交大片免费看中文网站| 国产女人aaa级久久久级 | 久久久青草青青国产亚洲免观| 99久久精品免费看国产免费软件| 日韩美女天天操| 国模冰冰炮一区二区| 久久久久国色av免费看影院| 国产精品一区二区在线看| 国产免费观看久久| 91丨porny丨国产入口| 一区二区三区中文在线| 欧美亚洲国产一区在线观看网站| 亚洲风情在线资源站| 在线成人小视频| 韩国欧美一区二区| 国产精品理伦片| 91国偷自产一区二区三区成为亚洲经典 | 一区二区在线观看不卡| 欧美性受极品xxxx喷水| 午夜欧美一区二区三区在线播放| 欧美一区二区观看视频| 国产美女在线观看一区| 中文字幕一区二区视频| 欧美性生活影院| 国产美女娇喘av呻吟久久| 国产精品对白交换视频| 欧美浪妇xxxx高跟鞋交| 国产成人精品一区二区三区四区 | 国产mv日韩mv欧美| 亚洲精品老司机| 日韩欧美国产三级| www.欧美日韩国产在线| 亚洲成人在线观看视频| 国产亚洲精品免费| 欧美三级电影在线观看| 国产麻豆91精品| 亚洲国产sm捆绑调教视频| www久久精品| 欧美色涩在线第一页| 国产麻豆精品视频| 亚洲国产综合色| 久久天天做天天爱综合色| 欧美在线不卡视频| 国产一区二区三区免费在线观看| 伊人婷婷欧美激情| 国产日产精品一区| 欧美三级电影在线看| 成人sese在线| 国内外精品视频| 石原莉奈在线亚洲二区| 国产精品超碰97尤物18| 精品免费99久久| 欧美妇女性影城| 91久久久免费一区二区| 国产成人午夜视频| 日韩精品视频网| 亚洲国产日日夜夜| 亚洲色欲色欲www| 国产女人18水真多18精品一级做 | 美女网站色91| 亚洲一区二区三区四区五区中文| 国产精品久久综合| 久久亚洲精品小早川怜子| 欧美一区二区人人喊爽| 欧美四级电影网| 91久久香蕉国产日韩欧美9色| 国产日韩成人精品| 久久国产精品99精品国产| 中文字幕欧美一| 亚洲国产综合色| 天堂蜜桃91精品| 久久99深爱久久99精品| 国产美女视频91| 久久精品理论片| 久久久精品天堂| 亚洲一二三区不卡| 日韩精品成人一区二区在线| 欧美三级电影网| 国产精品第13页| 欧美另类变人与禽xxxxx| 精品国产乱码久久久久久牛牛| 精品国产伦一区二区三区免费| 欧美激情中文字幕| 亚洲成av人在线观看| 国产一区视频在线看| 99久久国产综合精品色伊| 91麻豆精品国产91久久久久久久久 | 国产99久久久精品| 在线观看日韩高清av| 26uuu亚洲| 一级女性全黄久久生活片免费| 国产制服丝袜一区| 欧美日本一区二区在线观看| 国产丝袜欧美中文另类| 天使萌一区二区三区免费观看| 成人一区二区三区在线观看| 在线综合视频播放| 亚洲欧美日韩国产手机在线| 老汉av免费一区二区三区| 日本道免费精品一区二区三区| 久久综合九色综合97婷婷| 午夜av一区二区三区| a在线播放不卡| www一区二区| 人人狠狠综合久久亚洲| 色综合久久中文字幕| 久久女同性恋中文字幕| 亚洲午夜av在线| 久久99热狠狠色一区二区| 欧美sm极限捆绑bd| 国产精品高潮久久久久无| 免费高清在线视频一区·| 91日韩一区二区三区| 精品国产3级a| 日日夜夜免费精品| 91成人看片片| 亚洲欧洲精品一区二区三区不卡| 国产在线一区观看| 精品国产在天天线2019| 亚洲超碰97人人做人人爱| 日本韩国欧美三级| 亚洲特黄一级片| voyeur盗摄精品| 国产精品久久久久三级| 国产成a人亚洲精| 国产一区二区美女诱惑| 精品成人a区在线观看| 日韩综合一区二区| 欧日韩精品视频| 亚洲视频一二区| 91免费观看视频| 亚洲欧美日韩小说| a亚洲天堂av| 国产精品久久久久久久久图文区| 国产一区二区三区四区在线观看| 欧美成人女星排行榜| 免费看欧美美女黄的网站| 欧美精品高清视频| 视频一区二区中文字幕| 欧美一区二区三区公司| 青青草一区二区三区| 欧美一区二区久久| 看电影不卡的网站| 精品国产乱码久久久久久夜甘婷婷| 蜜桃视频第一区免费观看| 日韩一二三区不卡| 精品写真视频在线观看| 精品99久久久久久| 粉嫩av一区二区三区粉嫩| 中文字幕视频一区二区三区久| 99精品视频在线观看免费| 伊人开心综合网| 91精品国产综合久久久久久漫画| 蜜臀精品久久久久久蜜臀| 精品粉嫩超白一线天av| 国v精品久久久网| 亚洲综合色区另类av| 日韩一区二区不卡| 国产在线播放一区二区三区| 国产精品妹子av| 欧美三区在线观看| 精品在线一区二区三区| 国产精品免费视频网站| 欧美丝袜丝交足nylons图片|