📄 drivermain.cpp
字号:
#include "WdmFrame.h"
#include "DriverXXXXXXXX.h"
#include <ntddser.h>
IDriverObject *Driver=NULL;
char *MajorFuncStr[]={
"CREATE", //0x00
"CREATE_NAMED_PIPE", //0x01
"CLOSE", //0x02
"READ", //0x03
"WRITE", //0x04
"QUERY_INFORMATION", //0x05
"SET_INFORMATION", //0x06
"QUERY_EA", //0x07
"SET_EA", //0x08
"FLUSH_BUFFERS", //0x09
"QUERY_VOLUME_INFORMATION", //0x0a
"SET_VOLUME_INFORMATION", //0x0b
"DIRECTORY_CONTROL", //0x0c
"FILE_SYSTEM_CONTROL", //0x0d
"DEVICE_CONTROL", //0x0e
"INTERNAL_DEVICE_CONTROL", //0x0f
"SHUTDOWN", //0x10
"LOCK_CONTROL", //0x11
"CLEANUP", //0x12
"CREATE_MAILSLOT", //0x13
"QUERY_SECURITY", //0x14
"SET_SECURITY", //0x15
"POWER", //0x16
"SYSTEM_CONTROL", //0x17
"DEVICE_CHANGE", //0x18
"QUERY_QUOTA", //0x19
"SET_QUOTA", //0x1a
"PNP", //0x1b
};
void * __cdecl operator new( unsigned int cb )
{
return ExAllocatePool(NonPagedPool, cb);
}
void __cdecl operator delete(void *pUserData)
{
ExFreePool(pUserData);
}
extern "C" VOID DriverUnload(IN PDRIVER_OBJECT DriverObject )
{
PRINT("--> DriverUnload");
Driver->Unload();
delete Driver;
PRINT("<-- DriverUnload");
}
extern "C" VOID DriverStartIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PRINT("--> DriverStartIo");
Driver->StartIo(Irp);
PRINT("<-- DriverStartIo");
}
extern "C" NTSTATUS DriverDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
IDeviceObject *device = (IDeviceObject*)DeviceObject->DeviceExtension;
PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
PRINT("--> %s: %s", device->DeviceName, MajorFuncStr[IrpStack->MajorFunction]);
(device->*(device->MajorFunc[IrpStack->MajorFunction]))(Irp);
PRINT("<-- %s: %s %08x", device->DeviceName, MajorFuncStr[IrpStack->MajorFunction], ntStatus);
return ntStatus;
}
extern "C" NTSTATUS DriverAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
{
NTSTATUS ntStatus;
PRINT("--> DriverAddDevice");
ntStatus = Driver->AddDevice(pdo);
PRINT("<-- DriverAddDevice %08x", ntStatus);
return ntStatus;
}
extern "C" NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
{
NTSTATUS ntStatus;
PRINT("--> DriverEntry");
for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
DriverObject->MajorFunction[i] = DriverDispatch;
DriverObject->DriverInit = DriverEntry;
DriverObject->DriverUnload = DriverUnload;
DriverObject->DriverStartIo = DriverStartIo;
DriverObject->DriverExtension->AddDevice = DriverAddDevice;
Driver=new CDriverXXXXXXXX();
Driver->DriverObject=DriverObject;
Driver->RegistryPath=RegistryPath;
ntStatus=Driver->DriverEntry();
PRINT("<-- DriverEntry %08x", ntStatus);
return ntStatus;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -