方法1:
新建驱动工程,添加如下代码
#pragma warning( disable : 4100 )
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pPath);
VOID DriverUnload(PDRIVER_OBJECT pDriver);
#pragma alloc_text(PAGE,DriverUnload)
#pragma alloc_text(init,DriverEntry)
VOID DriverUnload(PDRIVER_OBJECT pDriver )
{
KdPrint(("Leave Driver\n"));
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pPath)
{
KdPrint(("Enter Driver\n"));
pDriver->DriverUnload = DriverUnload;
KdPrint(("Enter Driver\n"));
/*
你的代码1
*/
KdPrint(("now you are in Block1\n"));
/*
你的代码2
*/
KdPrint(("now you are in Block2\n"));
return STATUS_SUCCESS;
}
如此在DbgView.exe中输出了,KdPrint(("now you are in Block1\n")); 我们就知道了 代码段1 已经执行过了DbgView.exe中输出了,KdPrint(("now you are in Block2\n")); 我们就知道了 代码段2 已经执行过了如此,是否正如Windows程序设计初 使用MessageBox来提示程序执行 到哪儿了呢?
方法2
#include <wdm.h>
#pragma warning( disable : 4100 )
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pPath);
VOID DriverUnload(PDRIVER_OBJECT pDriver);
#pragma alloc_text(PAGE,DriverUnload)
#pragma alloc_text(init,DriverEntry)
VOID DriverUnload(PDRIVER_OBJECT pDriver)
{
KdPrint(("Leave Driver\n"));
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pPath)
{
_asm int 3 //较之与上,只多了这一段代码,将它添加到你想要检验的地方,前提你得调试打开该虚拟机中的win7系统
//这里 我已经如双击调试一文中,开启了vmmon64.exe/vmmon.exe,以及它打开的WinDbg.exe
KdPrint(("Enter Driver\n")); pDriver->DriverUnload = DriverUnload; KdPrint(("Enter Driver\n"));
/* 你的代码1 */
KdPrint(("now you are in Block1\n"));
/* 你的代码2 */
KdPrint(("now you are in Block2\n")); return STATUS_SUCCESS;
}
将生成的MyDriver.sys文件放进虚拟机中,用驱动加载器添加 该文件,点击启动, 接下来 虚拟机中的操作系统会卡住, 主机打开的 WinDbg.exe会得到响应
并且 WinDbg窗口变换如下
(因为,驱动是我自己写的,而且是Debug版本的,故此在驱动pe文件中嵌入了相应pdb文件的路径,发现中断,Windbg自动找到路劲加载这个驱动对应的pdb文件,于是出现如下的原码调试窗口,接下来,我们可以如vs2013中调试那样,f11,f10, f5,f9 ...的操作了~)