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

📄 drivermain.cpp

📁 我自己写的WDM驱动程序工程生成向导
💻 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 + -