⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.cpp

📁 讲述io定时器的使用
💻 CPP
字号:

#include "driver.h"
#define TIMER_OUT	2
int number =0;




void HelloBluescreen()
{
	//KeBugCheckEx(9989,0x22222,0x0001111,0x9928283,0x1224e23);
	//KeMessgeBox(NULL,"me","ok",MB_OK);
	//KeBugCheck(888);
//     char Buffer[256]="hello world Sysnap";
//     InbvAcquireDisplayOwnership();
//     InbvResetDisplay();
//     InbvSolidColorFill(0,0,639,479,4); 
//     InbvSetTextColor(15);
//     InbvInstallDisplayStringFilter((INBV_DISPLAY_STRING_FILTER)NULL);
//     InbvEnableDisplayString(TRUE);   
//     InbvSetScrollRegion(0,0,639,479); 
     //InbvDisplayString((char *)Buffer);

}



VOID OnTimer(
			 IN PDEVICE_OBJECT DeviceObject,
			 IN PVOID Context)
{
	PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
		DeviceObject->DeviceExtension;
//	KdPrint(("Enter OnTimer!\n"));
	
	//将计数器自锁减一
	InterlockedDecrement(&pDevExt->lTimerCount);
	
	//如果计数器减到0,重新编程TIMER_OUT,整个过程是互锁运算
	LONG previousCount = InterlockedCompareExchange(&pDevExt->lTimerCount,TIMER_OUT,0);
	
	//每隔三秒,计数器一个循环,输出以下log
	if (previousCount==0)
	{
		KdPrint(("Enter %d seconds time out!\n",TIMER_OUT));
		for (int num=0;num < 8; num++)
		{
			
			KdPrint(("Enter im %d! \r\n",num));
			
		}
	
	
	//证明该线程运行在任意线程上下文的
    PEPROCESS pEProcess = IoGetCurrentProcess();
	
    PTSTR ProcessName = (PTSTR)((ULONG)pEProcess + 0x174);//即可得到用户进程
	
    KdPrint(("Enter The current process is %s\n",ProcessName));
	}
	if (number>10)
	{
		IoStopTimer(DeviceObject);
		//蓝屏 
		KeBugCheck(888);
		return;
	}
	number++;
}

NTSTATUS yang2(IN PDEVICE_OBJECT pDevObj)
{
	
	
	
	IoInitializeTimer(pDevObj,OnTimer,NULL);
	
	
	KdPrint(("Enter my first function11111111aaaaaaaaa! "));
	PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
		pDevObj->DeviceExtension;
	pDevExt->lTimerCount = TIMER_OUT;
	IoStartTimer(pDevObj);
	/*	KeBugCheck(888);*/
	
	KdPrint(("Enter IOCTL_STOP\n"));
	//	IoStopTimer(pDevObj);
	return STATUS_SUCCESS;
}

/************************************************************************
* 函数名称:CreateDevice
* 功能描述:初始化设备对象
* 参数列表:
pDriverObject:从I/O管理器中传进来的驱动对象
* 返回 值:返回初始化状态
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
					   IN PDRIVER_OBJECT	pDriverObject) 
{


	NTSTATUS status;
	PDEVICE_OBJECT pDevObj;
	PDEVICE_EXTENSION pDevExt;
	KdPrint(("Enter hello createdevice!\n"));
	//创建设备名称
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
	


	
	//创建设备
	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;
	//创建符号链接
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\??\\yang2hcomen");
	pDevExt->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink( &symLinkName,&devName );
	if (!NT_SUCCESS(status)) 
	{
		IoDeleteDevice( pDevObj );
		return status;
	}

	
	yang2(pDevObj);
	return STATUS_SUCCESS;
}
#pragma INITCODE
extern "C" NTSTATUS DriverEntry (
								 IN PDRIVER_OBJECT pDriverObject,
								 IN PUNICODE_STRING pRegistryPath	) 
{
	NTSTATUS status=STATUS_SUCCESS ;
	//yang2();
	KdPrint(("Enter helloworld111111111!\n"));
	KdPrint(("Enter yang2h\n"));
	pDriverObject->DriverUnload = HelloDDKUnload;
	status = CreateDevice(pDriverObject);
	
	KdPrint(("Enter DriverEntry endaas\n"));

	//加一个定时器




	return status;
}
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("Enter DriverUnloadass\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 );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -