约有 1,303 项符合查询结果, 以下是第 86 - 131项。
费时 < 1 秒。
yushang wrote:可以使用IRP_MN_QUERY_INTERFACE向PCI总线查询一个接口
严格来说是向设备的PDO(Physical Device Object)来查询接口。PDO是知道自己的位置的,包括BUS和Device号。
这也正是这种方法的用意所在,每个设备只能访问自己的PCI配置空间。原本的Hal函数可以自由访问,但是使用那个函数已经不能通过WHQL徽标测试了。
如果今天还想写个通用的工具来读取所有设备的配置空间,那么就要先取得每个设备的设备对象,然后再去向它的PDO取接口......
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-18
这个问题的答案在第18章,18.6.1。在内核要中断到调试器时,这一节列出的第一个主要动作有“调用KeDisableInterrupts禁止中断”。
当跟踪KeDisableInterrupts时,内核调试引擎收到调试异常,准备中断到调试器,于是调用KeDisableInterrupts来做准备,而调用这个函数时又触发调试异常,于是死循环了。
26.4节在讨论不可调试代码时提到了这类情况:提供调试功能的系统函数是不可以被调试的。
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-17
当一个线程调用系统服务而进入到内核态执行时,用户态的程序指针所指向的就是KiFastSystemCallRet,因为从用户态的角度来看,一回到用户态,执行的就是个地方。
所以楼主描述的情况是比较典型的挂在内核态,也就是你的线程在调用系统服务时没有返回,如果不返回,那么进程就不能退出,而且这样的进程无法杀掉,就是通常所谓的杀不掉的进程。
如果要想知道原因,那么看栈回溯,看调用的那个系统服务,而后要想知道为什么不返回,那么要看内核态了,使用本地内核调试、或者看内核转储。
Posted in C/C++本地代码调试
by
格蠹老雷
on 2009-08-17
cli影响的是外部中断,INT 3属于异常,不受其影响。
ba命令其实就是使用dr寄存器的。
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-15
BIOS会把检测到的部分结果登记到北桥的寄存器中,因此如果是操作系统阶段需要,那么读取寄存器是比较快捷的方式,不过不确认这些寄存器的位置是否公开了。
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-07
这样的问题靠“遥控”是不大可能解决的,如果想让大家帮忙,那么最好上传到某个FTP,或者压缩一下发到信箱中。
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-07
我曾经遇到过这种情况,大约一两年前,花了点时间就找到方法可以调试第二个实例了,具体步骤有些记不清楚了,关键一步应该是使用本地内核调试将第二个进程实例的EPROCESS结构中的DebugPort设置NULL,然后便可以用WinDBG附加上去了。
Posted in C/C++本地代码调试
by
格蠹老雷
on 2009-08-07
用个时髦的词,晕。原来楼主想知道主板上到底插了多少内存,是写BIOS么?通常BIOS负责做这个事,要根据内存的类型(DDR,DDR2等),基于一种名为SPD(Serial Presense Detect)的协议去检测,然后再根据内存类型和具体协议来计算。下面的网页有一个比较老的SPEC:
http://www.datasheetcatalog.org/datasheet/SamsungElectronic/mXqququ.pdf
Posted in Windows内核调试
by
格蠹老雷
on 2009-08-06