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

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

?? driver.cpp

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

#include "Driver.h"

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

	//注冊其他驅(qū)動調(diào)用函數(shù)入口
	pDriverObject->DriverUnload = HelloDDKUnload;
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKCreate;
	pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKClose;
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
	pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKRead;
	
	//創(chuàng)建驅(qū)動設(shè)備對象
	ntStatus = CreateDevice(pDriverObject);

	KdPrint(("DriverB:Leave B DriverEntry\n"));
	return ntStatus;
}

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

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

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

	return STATUS_SUCCESS;
}

/************************************************************************
* 函數(shù)名稱:HelloDDKUnload
* 功能描述:負責驅(qū)動程序的卸載操作
* 參數(shù)列表:
      pDriverObject:驅(qū)動對象
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("DriverB:Enter B 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 );
	}
	KdPrint(("DriverB:Enter B DriverUnload\n"));
}

#pragma PAGEDCODE
NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverB:Enter B HelloDDKRead\n"));
	NTSTATUS ntStatus = STATUS_SUCCESS;

	UNICODE_STRING DeviceName;
	RtlInitUnicodeString( &DeviceName, L"\\Device\\MyDDKDeviceA" );

	PDEVICE_OBJECT DeviceObject = NULL;
	PFILE_OBJECT FileObject = NULL;
	//得到設(shè)備對象指針
	ntStatus = IoGetDeviceObjectPointer(&DeviceName,FILE_ALL_ACCESS,&FileObject,&DeviceObject);

	KdPrint(("DriverB:FileObject:%x\n",FileObject));
	KdPrint(("DriverB:DeviceObject:%x\n",DeviceObject));

	if (!NT_SUCCESS(ntStatus))
	{
		KdPrint(("DriverB:IoGetDeviceObjectPointer() 0x%x\n", ntStatus ));

		ntStatus = STATUS_UNSUCCESSFUL;
		// 完成IRP
		pIrp->IoStatus.Status = ntStatus;
		pIrp->IoStatus.Information = 0;	// bytes xfered
		IoCompleteRequest( pIrp, IO_NO_INCREMENT );
		KdPrint(("DriverB:Leave B HelloDDKRead\n"));

		return ntStatus;
	}

	KEVENT event;
	KeInitializeEvent(&event,NotificationEvent,FALSE);
	IO_STATUS_BLOCK status_block;
	LARGE_INTEGER offsert = RtlConvertLongToLargeInteger(0);

	//創(chuàng)建異步IRP
	PIRP pNewIrp = IoBuildAsynchronousFsdRequest(IRP_MJ_READ,
												DeviceObject,
												NULL,0,
												&offsert,&status_block);
	KdPrint(("pNewIrp->UserEvent :%x\n",pNewIrp->UserEvent));
	//設(shè)置pNewIrp->UserEvent,這樣在IRP完成后可以通知該事件
	pNewIrp->UserEvent = &event;
	
 	KdPrint(("DriverB:pNewIrp:%x\n",pNewIrp));

	PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(pNewIrp);
	stack->FileObject = FileObject;

	NTSTATUS status = IoCallDriver(DeviceObject,pNewIrp);

    if (status == STATUS_PENDING) {
       status = KeWaitForSingleObject(
                            &event,
                            Executive,
                            KernelMode,
                            FALSE, // Not alertable
                            NULL);
        status = status_block.Status;
    }

	ZwClose(FileObject);
 
	//關(guān)閉設(shè)備句柄
 	ObDereferenceObject( FileObject );

	ntStatus = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = ntStatus;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("DriverB:Leave B HelloDDKRead\n"));
	return ntStatus;
}

/************************************************************************
* 函數(shù)名稱:HelloDDKDispatchRoutine
* 功能描述:對讀IRP進行處理
* 參數(shù)列表:
      pDevObj:功能設(shè)備對象
      pIrp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverB:Enter B HelloDDKDispatchRoutine\n"));
	NTSTATUS ntStatus = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = ntStatus;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("DriverB:Leave B HelloDDKDispatchRoutine\n"));
	return ntStatus;
}

#pragma PAGEDCODE
NTSTATUS HelloDDKCreate(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverB:Enter B HelloDDKCreate\n"));
	NTSTATUS ntStatus = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = ntStatus;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );

	KdPrint(("DriverB:Leave B HelloDDKCreate\n"));

	return ntStatus;
}

#pragma PAGEDCODE
NTSTATUS HelloDDKClose(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverB:Enter B HelloDDKClose\n"));
	NTSTATUS ntStatus = STATUS_SUCCESS;

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

	// 完成IRP
	pIrp->IoStatus.Status = ntStatus;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	
	KdPrint(("DriverB:Leave B HelloDDKClose\n"));

	return ntStatus;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产1区2区3区| 欧美va亚洲va| 精品国偷自产国产一区| 亚洲国产成人一区二区三区| 亚洲综合av网| 东方欧美亚洲色图在线| 欧美一级夜夜爽| 一区二区三区成人| 懂色av一区二区在线播放| 日韩美女一区二区三区四区| 亚洲激情成人在线| 东方aⅴ免费观看久久av| 精品国产免费一区二区三区四区 | 成人一区二区三区中文字幕| 欧美日韩黄色一区二区| 国产精品久线观看视频| 国产很黄免费观看久久| 2019国产精品| 精品一区二区在线免费观看| 欧美精品xxxxbbbb| 午夜亚洲国产au精品一区二区| 一本久道久久综合中文字幕| 国产精品女主播在线观看| 国产激情一区二区三区| 久久精品一区二区三区av| 久久精品av麻豆的观看方式| 91精品国产一区二区| 日韩国产欧美在线观看| 欧美精选一区二区| 日韩电影在线观看电影| 欧美精品一二三区| 天堂蜜桃一区二区三区| 欧美剧情片在线观看| 丝袜亚洲另类欧美| 欧美精品日韩一本| 日韩1区2区3区| 日韩午夜激情电影| 精品一二三四在线| 国产偷国产偷亚洲高清人白洁| 国产黄人亚洲片| 国产日产欧产精品推荐色| 国产91精品免费| 亚洲视频在线一区| 欧美性高清videossexo| 日韩专区一卡二卡| 亚洲精品一区在线观看| 国产精品亚洲а∨天堂免在线| 国产无一区二区| 93久久精品日日躁夜夜躁欧美| 亚洲男人的天堂在线aⅴ视频| 色成年激情久久综合| 亚洲成人手机在线| 精品国产一区二区亚洲人成毛片| 国产在线一区二区| 国产精品久久午夜夜伦鲁鲁| 在线观看日韩毛片| 麻豆91在线看| 亚洲色图20p| 88在线观看91蜜桃国自产| 狠狠色丁香婷婷综合久久片| 中文字幕va一区二区三区| 在线观看网站黄不卡| 精品无人码麻豆乱码1区2区| 中文字幕欧美区| 在线观看国产精品网站| 精品一区二区三区av| 一色桃子久久精品亚洲| 欧美精品777| 成人动漫av在线| 日韩av中文字幕一区二区三区| 国产无遮挡一区二区三区毛片日本| 91视频精品在这里| 久久99国产精品成人| 亚洲欧美日韩国产综合| 久久这里只有精品首页| 欧美日韩国产综合视频在线观看| 国产精品主播直播| 亚洲v中文字幕| 国产精品麻豆久久久| 在线播放一区二区三区| av资源站一区| 韩国精品主播一区二区在线观看| 亚洲猫色日本管| 国产女人18水真多18精品一级做| 欧美日韩精品免费| 色综合婷婷久久| 国产成人日日夜夜| 日本美女一区二区三区视频| 亚洲免费在线视频| 国产嫩草影院久久久久| 精品国产一区二区三区四区四| 欧美亚洲国产一区二区三区| jlzzjlzz亚洲日本少妇| 国产一区二区三区四区五区美女 | av成人免费在线观看| 久久精品国产精品青草| 亚洲成年人网站在线观看| 亚洲人成在线播放网站岛国| 久久精品男人天堂av| 精品久久久久久久久久久院品网 | 欧美熟乱第一页| 日本黄色一区二区| 99久久综合国产精品| 粉嫩嫩av羞羞动漫久久久 | 91麻豆文化传媒在线观看| 精品亚洲国内自在自线福利| 天天影视色香欲综合网老头| 亚洲精品乱码久久久久久久久| 国产精品人成在线观看免费 | 久久综合久久综合亚洲| 欧美一级日韩一级| 欧美一区午夜视频在线观看 | 国产精品久久久一本精品| 久久精品一区二区三区四区| 久久久久久99久久久精品网站| 精品久久人人做人人爽| 久久久精品免费免费| 久久久久久99精品| 国产精品欧美综合在线| 亚洲图片另类小说| 一区二区三区在线视频观看58| 亚洲另类一区二区| 亚洲v日本v欧美v久久精品| 日本vs亚洲vs韩国一区三区二区| 午夜日韩在线观看| 美女视频网站久久| 国产精品综合在线视频| 99视频精品全部免费在线| 9人人澡人人爽人人精品| 色综合久久综合中文综合网| 欧美三级在线看| 67194成人在线观看| 精品日韩一区二区三区免费视频| 久久久久国产精品麻豆ai换脸 | 久久精品免费看| 国产一区在线不卡| 95精品视频在线| 欧美日韩精品综合在线| 欧美变态凌虐bdsm| 国产精品福利av| 三级影片在线观看欧美日韩一区二区| 蜜桃视频在线一区| 成人爱爱电影网址| 欧美日韩综合在线免费观看| 日韩午夜中文字幕| 国产精品欧美一级免费| 午夜精品国产更新| 国产成人综合网| 欧美系列在线观看| 久久精品亚洲一区二区三区浴池 | 欧美精品在线一区二区| 久久婷婷成人综合色| 亚洲日本欧美天堂| 美女诱惑一区二区| 色综合激情久久| 精品裸体舞一区二区三区| 综合久久久久久久| 乱中年女人伦av一区二区| 91视频观看视频| 亚洲精品一区二区三区精华液| 亚洲色图第一区| 国产精品一区在线| 欧美日韩激情一区二区三区| 国产色婷婷亚洲99精品小说| 亚洲成人激情综合网| av不卡在线播放| 26uuu国产日韩综合| 婷婷六月综合亚洲| 91久久精品一区二区二区| 久久无码av三级| 日韩av一区二区三区四区| 99视频有精品| 国产日韩欧美高清| 另类的小说在线视频另类成人小视频在线 | 欧美综合在线视频| 国产女同互慰高潮91漫画| 久久精品国产第一区二区三区| 欧美性色黄大片| 国产精品人人做人人爽人人添| 久久国产免费看| 7777精品伊人久久久大香线蕉完整版 | 国产精品入口麻豆原神| 蜜桃在线一区二区三区| 欧美日韩精品系列| 一区二区三区四区精品在线视频| 国产精品一区二区黑丝| 日韩女优制服丝袜电影| 日韩电影一区二区三区四区| 欧美日韩视频一区二区| 亚洲精品久久7777| 一本久久a久久精品亚洲| 亚洲丝袜制服诱惑| 一本到不卡免费一区二区| 国产精品理伦片| 成人一区在线看| 欧美极品aⅴ影院| 成人网在线免费视频| 欧美激情中文字幕一区二区| 国产一区二区免费在线| 国产亚洲1区2区3区|