-
-
[旧帖]
[求助]天书夜读第9章 C++类与驱动的问题
0.00雪花
-
发表于:
2011-8-26 08:35
1745
-
[旧帖] [求助]天书夜读第9章 C++类与驱动的问题
0.00雪花
//////////////////////////////////////////////////
// MyDriver.cpp文件
extern "C"
{
#include <ntddk.h>
}
//new
void * __cdecl operator new(unsigned int size)
{
void *pt = ExAllocatePool(NonPagedPool,size);
if (pt != NULL)
memset(pt,0,size);
return pt;
}
//MyDriver 定义
class MyDriver
{
public:
MyDriver(PDRIVER_OBJECT driver);
virtual NTSTATUS OnDispatch(PDRIVER_OBJECT dev,PIRP irp)
{ return STATUS_UNSUCCESSFUL; };
static MyDriver *d_my_driver;
private:
static NTSTATUS sDispatch(PDRIVER_OBJECT dev,PIRP irp);
PDRIVER_OBJECT d_driver;
};
MyDriver::MyDriver(PDRIVER_OBJECT driver) : d_driver(driver)
{
size_t i;
for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
{
driver->MajorFunction[i] = (PDRIVER_DISPATCH)sDispatch;
}
d_my_driver = this;
}
NTSTATUS MyDriver::sDispatch(PDRIVER_OBJECT dev,PIRP irp)
{
return d_my_driver->OnDispatch(dev,irp);
}
MyDriver *MyDriver::d_my_driver = NULL;
class MySubDriver : public MyDriver
{
public:
MySubDriver(PDRIVER_OBJECT driver) : MyDriver(driver){};
virtual NTSTATUS OnDispatch(PDRIVER_OBJECT dev,PIRP irp)
{
DbgPrint("MyDriver\r\n");
return STATUS_UNSUCCESSFUL;
}
};
// 驱动程序加载时调用DriverEntry例程
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
// 请视情况返回DriverEntry例程执行结果
//MyDriver::d_my_driver = new MySubDriver(pDriverObj);
MySubDriver mysub(pDriverObj);
DbgPrint("hello\r\n");
return STATUS_UNSUCCESSFUL;
}
上面是完整的代码
我是指虚拟机里用DriverMonitor加载驱动,windbg只能输出下面的hello,而上面的MyDriver不能输出
并且DriverMonitor中提示ERROR(31):连到系统上的设备没有发挥作用。昨天搞了一天了都没找到原因。
求各位大牛帮帮忙
[课程]Android-CTF解题方法汇总!