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

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

?? driver.cpp

?? 《Windows驅(qū)動開發(fā)技術(shù)詳解》隨書源碼
?? CPP
字號:
/************************************************************************
* 文件名稱:Driver.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/

#include "Driver.h"


#pragma LOCKEDCODE
VOID
  HelloDDKStartIO(
    IN PDEVICE_OBJECT  DeviceObject,
    IN PIRP  Irp 
    )
{
	KIRQL oldirql;
	KdPrint(("Enter HelloDDKStartIO\n"));

	//獲取cancel自旋鎖
	IoAcquireCancelSpinLock(&oldirql);
	if (Irp!=DeviceObject->CurrentIrp||Irp->Cancel)
	{
		//如果當(dāng)前有正在處理的IRP,則簡單的入隊列,并直接返回
		//入隊列的工作由系統(tǒng)完成,在StartIO中不用負(fù)責(zé)
		IoReleaseCancelSpinLock(oldirql);
		KdPrint(("Leave HelloDDKStartIO\n"));
		return;
	}else
	{
		//由于正在處理該IRP,所以不允許調(diào)用取消例程
		//因此將此IRP的取消例程設(shè)置為NULL
		IoSetCancelRoutine(Irp,NULL);
		IoReleaseCancelSpinLock(oldirql);
	}

	KEVENT event;
	KeInitializeEvent(&event,NotificationEvent,FALSE);

	//等3秒
	LARGE_INTEGER timeout;
	timeout.QuadPart = -3*1000*1000*10;

	//定義一個3秒的延時,主要是為了模擬該IRP操作需要大概3秒左右時間
	KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,&timeout);

	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;	// no bytes xfered
	IoCompleteRequest(Irp,IO_NO_INCREMENT);


	//在隊列中讀取一個IRP,并進(jìn)行StartIo
	IoStartNextPacket(DeviceObject,TRUE);

	KdPrint(("Leave HelloDDKStartIO\n"));
}

/************************************************************************
* 函數(shù)名稱:DriverEntry
* 功能描述:初始化驅(qū)動程序,定位和申請硬件資源,創(chuàng)建內(nèi)核對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進(jìn)來的驅(qū)動對象
      pRegistryPath:驅(qū)動程序在注冊表的中的路徑
* 返回 值:返回初始化驅(qū)動狀態(tài)
*************************************************************************/
#pragma INITCODE
extern "C" NTSTATUS DriverEntry (
			IN PDRIVER_OBJECT pDriverObject,
			IN PUNICODE_STRING pRegistryPath	) 
{
	NTSTATUS status;
	KdPrint(("Enter DriverEntry\n"));

	//設(shè)置卸載函數(shù)
	pDriverObject->DriverUnload = HelloDDKUnload;

	//設(shè)置派遣函數(shù)
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKRead;
	pDriverObject->MajorFunction[IRP_MJ_CLEANUP] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = HelloDDKDispatchRoutin;
	pDriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = HelloDDKDispatchRoutin;

	//設(shè)置StartIO例程
	pDriverObject->DriverStartIo = HelloDDKStartIO;
	
	//創(chuàng)建驅(qū)動設(shè)備對象
	status = CreateDevice(pDriverObject);

	KdPrint(("Leave DriverEntry\n"));
	return status;
}

/************************************************************************
* 函數(shù)名稱:CreateDevice
* 功能描述:初始化設(shè)備對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進(jìn)來的驅(qū)動對象
* 返回 值:返回初始化狀態(tài)
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
		IN PDRIVER_OBJECT	pDriverObject) 
{
	NTSTATUS status;
	PDEVICE_OBJECT pDevObj;
	PDEVICE_EXTENSION pDevExt;
	
	//創(chuàng)建設(shè)備名稱
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
	
	//創(chuàng)建設(shè)備
	status = IoCreateDevice( pDriverObject,
						sizeof(DEVICE_EXTENSION),
						&(UNICODE_STRING)devName,
						FILE_DEVICE_UNKNOWN,
						0, TRUE,
						&pDevObj );
	if (!NT_SUCCESS(status))
		return status;

	pDevObj->Flags |= DO_BUFFERED_IO;
	pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
	pDevExt->pDevice = pDevObj;
	pDevExt->ustrDeviceName = devName;

	//創(chuàng)建符號鏈接
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
	pDevExt->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink( &symLinkName,&devName );
	if (!NT_SUCCESS(status)) 
	{
		IoDeleteDevice( pDevObj );
		return status;
	}
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數(shù)名稱:HelloDDKUnload
* 功能描述:負(fù)責(zé)驅(qū)動程序的卸載操作
* 參數(shù)列表:
      pDriverObject:驅(qū)動對象
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("Enter DriverUnload\n"));
	pNextObj = pDriverObject->DeviceObject;
	while (pNextObj != NULL) 
	{
		PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pNextObj->DeviceExtension;

		//刪除符號鏈接
		UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
		IoDeleteSymbolicLink(&pLinkName);

		pNextObj = pNextObj->NextDevice;
		IoDeleteDevice( pDevExt->pDevice );
	}
}

/************************************************************************
* 函數(shù)名稱:HelloDDKDispatchRoutin
* 功能描述:對讀IRP進(jìn)行處理
* 參數(shù)列表:
      pDevObj:功能設(shè)備對象
      pIrp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloDDKDispatchRoutin(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("Enter HelloDDKDispatchRoutin\n"));

	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
	//建立一個字符串?dāng)?shù)組與IRP類型對應(yīng)起來
	static char* irpname[] = 
	{
		"IRP_MJ_CREATE",
		"IRP_MJ_CREATE_NAMED_PIPE",
		"IRP_MJ_CLOSE",
		"IRP_MJ_READ",
		"IRP_MJ_WRITE",
		"IRP_MJ_QUERY_INFORMATION",
		"IRP_MJ_SET_INFORMATION",
		"IRP_MJ_QUERY_EA",
		"IRP_MJ_SET_EA",
		"IRP_MJ_FLUSH_BUFFERS",
		"IRP_MJ_QUERY_VOLUME_INFORMATION",
		"IRP_MJ_SET_VOLUME_INFORMATION",
		"IRP_MJ_DIRECTORY_CONTROL",
		"IRP_MJ_FILE_SYSTEM_CONTROL",
		"IRP_MJ_DEVICE_CONTROL",
		"IRP_MJ_INTERNAL_DEVICE_CONTROL",
		"IRP_MJ_SHUTDOWN",
		"IRP_MJ_LOCK_CONTROL",
		"IRP_MJ_CLEANUP",
		"IRP_MJ_CREATE_MAILSLOT",
		"IRP_MJ_QUERY_SECURITY",
		"IRP_MJ_SET_SECURITY",
		"IRP_MJ_POWER",
		"IRP_MJ_SYSTEM_CONTROL",
		"IRP_MJ_DEVICE_CHANGE",
		"IRP_MJ_QUERY_QUOTA",
		"IRP_MJ_SET_QUOTA",
		"IRP_MJ_PNP",
	};

	UCHAR type = stack->MajorFunction;
	if (type >= arraysize(irpname))
		KdPrint((" - Unknown IRP, major type %X\n", type));
	else
		KdPrint(("\t%s\n", irpname[type]));


	//對一般IRP的簡單操作,后面會介紹對IRP更復(fù)雜的操作
	NTSTATUS status = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = status;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );

	KdPrint(("Leave HelloDDKDispatchRoutin\n"));

	return status;
}

VOID
OnCancelIRP(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
	KdPrint(("Enter CancelReadIRP\n"));

	if (Irp==DeviceObject->CurrentIrp)
	{
		//表明當(dāng)前正在改由StartIo處理
		//但StartIo并沒有獲取cancel自旋鎖之前
		//這時候需要
		KIRQL oldirql = Irp->CancelIrql;

		//釋放Cancel自旋鎖
		IoReleaseCancelSpinLock(Irp->CancelIrql);

		IoStartNextPacket(DeviceObject,TRUE);

		KeLowerIrql(oldirql);
	}else
	{
		//從設(shè)備隊列中將該IRP抽取出來
		KeRemoveEntryDeviceQueue(&DeviceObject->DeviceQueue,&Irp->Tail.Overlay.DeviceQueueEntry);
		//釋放Cancel自旋鎖
		IoReleaseCancelSpinLock(Irp->CancelIrql);
	}

	
	//設(shè)置完成狀態(tài)為STATUS_CANCELLED
 	Irp->IoStatus.Status = STATUS_CANCELLED;
 	Irp->IoStatus.Information = 0;	// bytes xfered
 	IoCompleteRequest( Irp, IO_NO_INCREMENT );

	KdPrint(("Leave CancelReadIRP\n"));
}


NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("Enter HelloDDKRead\n"));

	PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pDevObj->DeviceExtension;

	//將IRP設(shè)置為掛起
	IoMarkIrpPending(pIrp);

	//將IRP插入系統(tǒng)的隊列
	IoStartPacket(pDevObj,pIrp,0,OnCancelIRP);

	KdPrint(("Leave HelloDDKRead\n"));

	//返回pending狀態(tài)
	return STATUS_PENDING;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品一区| 国产精品理论片在线观看| 精品国产三级a在线观看| 国产精品久久久一本精品 | 欧美日韩国产另类一区| 久久这里只有精品6| 日韩中文字幕一区二区三区| 国产很黄免费观看久久| 欧美日韩国产高清一区二区三区 | 美国精品在线观看| 91亚洲精品久久久蜜桃| 2017欧美狠狠色| 日韩和欧美一区二区三区| 色综合久久综合网欧美综合网| 精品国产露脸精彩对白| 五月天丁香久久| 一本色道久久综合亚洲精品按摩| 国产精品午夜春色av| 国内成人精品2018免费看| 欧美老年两性高潮| 亚洲影院理伦片| 在线免费精品视频| 亚洲精品国产视频| 99久久er热在这里只有精品15| 久久久九九九九| 国产成人精品影院| 国产亚洲精品超碰| 国产美女在线精品| 久久这里只有精品6| 国产精品一区久久久久| 久久先锋影音av| 国产精品一区二区不卡| 国产清纯美女被跳蛋高潮一区二区久久w | 91麻豆.com| 国产精品护士白丝一区av| 国产成人精品亚洲777人妖 | 成人精品视频一区二区三区| 久久九九国产精品| 成人精品视频网站| 国产精品国产成人国产三级| av成人动漫在线观看| 国产精品美女一区二区三区| 成人一级片网址| 亚洲丝袜精品丝袜在线| 在线欧美一区二区| 日韩专区一卡二卡| 日韩欧美国产一区二区三区 | 免费一级片91| 日韩欧美的一区| 国产999精品久久久久久绿帽| 国产日产欧美一区二区三区| 91亚洲男人天堂| 午夜一区二区三区在线观看| 日韩欧美亚洲国产另类| 国产成人自拍网| 樱桃视频在线观看一区| 91超碰这里只有精品国产| 黄色小说综合网站| 国产精品久99| 9191成人精品久久| 成人爽a毛片一区二区免费| 依依成人精品视频| 日韩欧美激情四射| 成人免费高清在线| 日韩vs国产vs欧美| 久久久精品影视| 欧美在线观看视频一区二区| 国产在线一区二区| 亚洲欧洲日韩女同| 日韩欧美精品在线视频| 93久久精品日日躁夜夜躁欧美| 亚洲成人三级小说| 国产欧美一区二区三区网站| 欧美日韩一区二区电影| 成人性生交大片免费看在线播放| 亚洲一二三区视频在线观看| 久久综合精品国产一区二区三区| 日本道免费精品一区二区三区| 久久精品国产久精国产| 亚洲另类色综合网站| 久久久99久久精品欧美| 欧美日韩国产a| www.色综合.com| 精品亚洲免费视频| 亚洲一区二区五区| 国产精品久久夜| 欧美精品一区二区久久婷婷| 欧美性视频一区二区三区| 国产成人综合网站| 免费成人深夜小野草| 一区二区激情视频| 国产精品灌醉下药二区| 久久久精品黄色| 日韩一级完整毛片| 欧美日韩精品免费| 在线影院国内精品| 成人免费视频一区| 国产精品一区二区免费不卡 | 色婷婷国产精品| 成人美女视频在线看| 国内成+人亚洲+欧美+综合在线| 婷婷久久综合九色综合绿巨人| 亚洲人成网站影音先锋播放| 国产精品美女久久久久久久网站| 久久老女人爱爱| 日韩视频一区在线观看| 在线不卡a资源高清| 欧美日韩综合在线| 欧美性受xxxx| 欧美日韩精品福利| 欧美色欧美亚洲另类二区| 欧美亚州韩日在线看免费版国语版| jlzzjlzz亚洲女人18| av网站免费线看精品| 国产成人免费网站| www.成人网.com| 91女神在线视频| 一本色道久久综合亚洲aⅴ蜜桃| 99精品欧美一区二区三区综合在线| 99久久精品国产网站| 97久久超碰国产精品| 日本韩国精品在线| 91精品福利视频| 欧美日韩一区二区在线视频| 欧美人体做爰大胆视频| 91精品国产一区二区人妖| 精品精品国产高清一毛片一天堂| 久久久久久久性| 中文字幕在线不卡一区| 一区二区三区在线不卡| 亚洲大型综合色站| 美女精品一区二区| 高清不卡一区二区在线| 成人不卡免费av| 欧美视频在线一区| 91麻豆精品国产91久久久久久| 日韩三级视频在线看| 国产欧美va欧美不卡在线| 亚洲欧美国产三级| 偷拍日韩校园综合在线| 国产一区二区91| 色综合久久久久久久| 欧美一二区视频| 成人精品视频一区二区三区尤物| 国模少妇一区二区三区| eeuss鲁片一区二区三区 | 亚洲综合丝袜美腿| 午夜精品久久久久久久久久久 | 亚洲图片欧美色图| 奇米色一区二区| 成人成人成人在线视频| 欧美久久久一区| 国产欧美一区二区精品性色超碰 | 欧美亚洲另类激情小说| 日韩免费观看高清完整版在线观看| 国产精品伦理在线| 偷拍日韩校园综合在线| 成人国产精品免费网站| 在线成人免费观看| 一区精品在线播放| 国内精品伊人久久久久影院对白| 欧亚洲嫩模精品一区三区| 2023国产精品| 亚洲r级在线视频| 91亚洲午夜精品久久久久久| 欧美成人精品1314www| 一区二区三区在线免费播放 | 日韩avvvv在线播放| 99精品欧美一区二区三区综合在线| 日韩免费看的电影| 亚洲一区二区成人在线观看| 国产成人精品免费视频网站| 日韩欧美久久久| 视频一区免费在线观看| 色狠狠av一区二区三区| 欧美激情一区二区三区四区| 蜜桃视频在线一区| 欧美猛男男办公室激情| 成人免费在线视频观看| 高清日韩电视剧大全免费| 精品国产伦一区二区三区免费 | 欧美成人女星排行榜| 亚洲成人午夜电影| 一本久久综合亚洲鲁鲁五月天| 中文字幕乱码久久午夜不卡| 久久国产精品露脸对白| 91精品欧美一区二区三区综合在| 日韩伦理免费电影| 成人aa视频在线观看| 日本一区二区电影| 成人午夜在线播放| 欧美国产日韩一二三区| 国产成人综合在线播放| www激情久久| 国产一区中文字幕| 久久奇米777| 粉嫩高潮美女一区二区三区 | 97se亚洲国产综合自在线不卡| 国产精品超碰97尤物18| 福利视频网站一区二区三区|