📄 driver.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 + -