阅读:2489回复:10
请教内存池的释放及无文字显示蓝屏等问题
向专家请教:
我想在sfilter的sfcreate例程里加一个显示盘符的程序: UNICODE_STRING dosname2,name2; //[定义结构UNICODE_STRING IoVolumeDeviceToDosName(file->DeviceObject,&dosname2);(我的系统:xp) ………………………… 我查MSDN:说:IoVolumeDeviceToDosName需要ExFreePool释放内存池。 1我用ExFreePool(dosname2.Buffer)释放内存池;造成目标机器蓝色,但不显示STOP:……………………信息,在主机的windbg的file下,无法打开转储文件; 请教这时应该如何获得信息? 2 我用ExFreePool(&dosname2); 释放内存池; 这次捉到错误。目标机器显示windowsxp等图标,停止不动! 主机的windbg显示如下c2错误;我还输入!analyze |
|
最新喜欢:Leopar...
|
沙发#
发布于:2005-06-03 09:38
拜托,你看清楚,NTSTATUS
IoVolumeDeviceToDosName( IN PVOID VolumeDeviceObject, OUT PUNICODE_STRING DosName ); 最后一个参数是PUNICODE_STRING,而你传入的是已经定义的一个变量取地址,虽然也是PUNICODE_STRING,但是你那个变量是你在堆栈上定义的,是局部变量,系统退出你这个函数时会自动清除这个变量的,你应该这样定义 PUNICODE_STRING pString; IoVolumeDeviceToDosName(file->DeviceObject,pString); ExFreePool(pString->Buffer); |
|
板凳#
发布于:2005-06-03 11:36
PUNICODE_STRING pString;
不用初始化??? 还是要分配内存? |
|
地板#
发布于:2005-06-03 11:59
朋友,我实验了,结果是:
改为PUNICODE_STRING Pdosname2;局部变量;编译显示: sfilter.c(1953) : error C4700: local variable \'Pdosname2\' used without having be en initialized 将他改为全局变量,编译通过! 安装;主机、目标机器连接;目标机器停止,显示windowsxp图标处。 Windbg 显示: Access violation - code c0000005 (!!! second chance !!!) nt!IoVolumeDeviceToDosName+0x1c9: 80521126 668908 mov [eax],cx 您看,还如何解决呢? |
|
|
地下室#
发布于:2005-06-03 12:41
传个UNICODE_STRING变量进去,这样是对的
检查一下是不是有什么其他错误,如IoVolumeDeviceToDosName失败返回 再个,dosname2不要使用全局的,用局部变量 |
|
5楼#
发布于:2005-06-03 13:55
传个UNICODE_STRING变量进去,这样是对的 同意。如果IoVolumeDeviceToDosName成功返回,调用ExFreePool应该没有问题。 <<在主机的windbg的file下,无法打开转储文件; 把目标机dmp文件拷贝到主机上,主机都不需要连接目标机,就可以用windbg带开dump文件,我一直这么用,肯定没有问题。 |
|
6楼#
发布于:2005-06-03 14:55
[quote]传个UNICODE_STRING变量进去,这样是对的 同意。如果IoVolumeDeviceToDosName成功返回,调用ExFreePool应该没有问题。 <<在主机的windbg的file下,无法打开转储文件; 把目标机dmp文件拷贝到主机上,主机都不需要连接目标机,就可以用windbg带开dump文件,我一直这么用,肯定没有问题。 [/quote] 目标机器死在启动的windowsxp图标显示处,如何把目标机器的转储文件拷贝到主机?主机连不上目标机器呀? 我没用过转储文件,我在目标机器的系统里设置完全转储,转储文件自动设置为%systemroot%\\memory.dmp;您是说将目标机器系统下的.dmp文件拷贝到主机上?在死机开始时能自动传到主机?如何用? 请指点!谢谢! |
|
|
7楼#
发布于:2005-06-03 15:24
[quote][quote]传个UNICODE_STRING变量进去,这样是对的 同意。如果IoVolumeDeviceToDosName成功返回,调用ExFreePool应该没有问题。 <<在主机的windbg的file下,无法打开转储文件; 把目标机dmp文件拷贝到主机上,主机都不需要连接目标机,就可以用windbg带开dump文件,我一直这么用,肯定没有问题。 [/quote] 目标机器死在启动的windowsxp图标显示处,如何把目标机器的转储文件拷贝到主机?主机连不上目标机器呀? 我没用过转储文件,我在目标机器的系统里设置完全转储,转储文件自动设置为%systemroot%\\memory.dmp;您是说将目标机器系统下的.dmp文件拷贝到主机上?在死机开始时能自动传到主机?如何用? 请指点!谢谢! [/quote] 你手工把目标机器系统下的.dmp文件拷贝到主机上,在主机上启动windbg打开dmp文件,都不需要连接目标机器 |
|
8楼#
发布于:2005-06-03 18:15
引用:你手工把目标机器系统下的.dmp文件拷贝到主机上,在主机上启动windbg打开dmp文件,都不需要连接目标机器
您的意思我没理解?目标机器死机了,在主机,通过IP地址访问目标机器,访问不了啊!?如何手工拷贝? 我在目标机器设置完全内存转储,自动形成的%systemroot%\\memory.dmp,应该是操作系统windows下的一个文件,我怎么找不到它呢?请指点!谢谢! |
|
|
9楼#
发布于:2005-06-03 19:29
引用:你手工把目标机器系统下的.dmp文件拷贝到主机上,在主机上启动windbg打开dmp文件,都不需要连接目标机器 假设你根本没有用双机调试,就是一台机器。蓝屏后转储文件,使它 能正常启动(去掉有问题的驱动),用windbg在本机打开dmp文件,就可以分析。 |
|
10楼#
发布于:2005-06-04 08:45
引用:你手工把目标机器系统下的.dmp文件拷贝到主机上,在主机上启动windbg打开dmp文件,都不需要连接目标机器 转储首先产生在PageFile中,在第二次重启的时候才被拷入你设置的memory.dmp中 |
|
|