?? driver.cpp
字號(hào):
#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"));
//將計(jì)數(shù)器自鎖減一
InterlockedDecrement(&pDevExt->lTimerCount);
//如果計(jì)數(shù)器減到0,重新編程TIMER_OUT,整個(gè)過程是互鎖運(yùn)算
LONG previousCount = InterlockedCompareExchange(&pDevExt->lTimerCount,TIMER_OUT,0);
//每隔三秒,計(jì)數(shù)器一個(gè)循環(huán),輸出以下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));
}
//證明該線程運(yùn)行在任意線程上下文的
PEPROCESS pEProcess = IoGetCurrentProcess();
PTSTR ProcessName = (PTSTR)((ULONG)pEProcess + 0x174);//即可得到用戶進(jìn)程
KdPrint(("Enter The current process is %s\n",ProcessName));
}
if (number>10)
{
IoStopTimer(DeviceObject);
//藍(lán)屏
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;
}
/************************************************************************
* 函數(shù)名稱:CreateDevice
* 功能描述:初始化設(shè)備對(duì)象
* 參數(shù)列表:
pDriverObject:從I/O管理器中傳進(jìn)來的驅(qū)動(dòng)對(duì)象
* 返回 值:返回初始化狀態(tài)
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
IN PDRIVER_OBJECT pDriverObject)
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
PDEVICE_EXTENSION pDevExt;
KdPrint(("Enter hello createdevice!\n"));
//創(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)建符號(hào)鏈接
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"));
//加一個(gè)定時(shí)器
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;
//刪除符號(hào)鏈接
UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
IoDeleteSymbolicLink(&pLinkName);
pNextObj = pNextObj->NextDevice;
IoDeleteDevice( pDevExt->pDevice );
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -