阅读:7288回复:9
新手问题,KdPrint 打印的内容没有在 DebugView 中显示?
如题: KdPrint 打印的内容没有在 DebugView 中显示?
1、我在网上查的资料是:KdPrint 会在 DebugVIew 中显示。如果不是,那是显示在哪里? 2、我是用“Checked Build Environment”模式编译的 .cpp 文件如下,请各位帮我看下。只是一个驱动的简单框架. extern "C" { #include <ntddk.h> } typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT fdo; PDEVICE_OBJECT NextStackDevice; UNICODE_STRING ifSymLinkName; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; extern "C" NTSTATUS addDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject) { KdPrint(("test!addDevice")); NTSTATUS status; PDEVICE_OBJECT fdo; status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); if( !NT_SUCCESS(status) ) return status; PDEVICE_EXTENSION dx = (PDEVICE_EXTENSION)fdo->DeviceExtension; dx->fdo = fdo; dx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject); fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE; fdo->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } extern "C" NTSTATUS Pnp(IN PDEVICE_OBJECT DriverObject, IN PIRP Irp) { KdPrint(("test!Pnp")); PDEVICE_EXTENSION dx = (PDEVICE_EXTENSION)DriverObject->DeviceExtension; PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); ULONG MinorFunction = IrpStack->MinorFunction; IoSkipCurrentIrpStackLocation(Irp); NTSTATUS status = IoCallDriver( dx->NextStackDevice, Irp ); if( MinorFunction == IRP_MN_REMOVE_DEVICE ) { IoSetDeviceInterfaceState(&dx->ifSymLinkName, FALSE); RtlFreeUnicodeString(&dx->ifSymLinkName); if( dx->NextStackDevice ) IoDetachDevice(dx->NextStackDevice); IoDeleteDevice(DriverObject); } return STATUS_SUCCESS; } extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { KdPrint(("test!DriverEntry")); DriverObject->DriverExtension->AddDevice = addDevice; DriverObject->MajorFunction[IRP_MJ_PNP] = Pnp; return STATUS_SUCCESS; } |
|
沙发#
发布于:2008-06-18 19:07
你的驱动安装了吗
|
|
板凳#
发布于:2008-06-19 09:51
引用第1楼hyy301于2008-06-18 19:07发表的 : 楼上的,我是通过控制面板的增加新硬功件,然后选择INF来安装的,而且成显示安装成功,能够在设备管理器看到相关的设备,就是调试信息不显示。 另外,DebugView 的 Capture 下面能打勾都打勾了。 |
|
地板#
发布于:2008-06-20 03:19
我也遇到了这个问题 , 解决了
我刚学 DDK , 也遇到了这个问题 , 从网上随便找的 DebugView 有点问题(我的操作系统是Win2003的) , 起初以为是版本问题 , 没办法换操作系统,就 去 这个网站(书上推荐的)www.sysinternals.com , 重新下载了一个 DebugView . 安上 , 然乎在 Capture 下选择 Kernal Capture 打勾 , 完了发现出来好多信息 , 然后 用 net start 命令启动了我的 驱动处女作 , 惊喜的发现 调试信息出来了, 哈哈哈哈 |
|
地下室#
发布于:2008-06-20 08:07
DebugView应该没问题,程序都是一样的,你按照我的步骤做
1、先卸载掉你的驱动 2、打开DEBUGVIEW,勾上Capture Kernel 3、安装你的驱动 这时DbgPrint的信息应该能显示 |
|
5楼#
发布于:2008-06-22 14:27
同意楼上.
你的驱动 只能执行 打印 DriverEntry ,要是你先加载驱动,后打开debugview那就什么都没有了... |
|
6楼#
发布于:2008-06-24 16:59
引用第4楼hyy301于2008-06-20 08:07发表的 : 这样试过,它就是没有显示出来 引用第5楼petsatan于2008-06-22 14:27发表的 : 这个我知道,我在装驱动之前就已经打开 DebugView 了 我在怀疑是不是 1、sys 的问题 ------------- 有谁可以编译一个 sys && .inf 文件让我试下 2、inf的问题 3、安装驱动的问题 ------------ 我是通过控制面板的增加硬件..... 来安装的 |
|
7楼#
发布于:2008-06-25 10:10
|
|
8楼#
发布于:2009-09-09 16:31
以前也遇到过,怎么说呢?遇到这种问题很有可能是你的系统本身造成的。
建议: 1)重新下载dbgview文件。 2)如果还不行,建议到虚拟机上执行以下(避开你自己的操作系统) 3)解决了。:) |
|
9楼#
发布于:2012-09-22 12:54
|
|