约有 74 项符合查询结果, 以下是第 7 - 8项。
费时 < 1 秒。
请问驱动程序加载时能否动态加载与之相关的自己编写的动态链接库?如果能加载,系统是否将其加载在用户空间?为什么?
驱动加载的过程与普通可执行程序的加载在动态链接方面有什么不同,系统在加载驱动时是如何处理的?
多谢了!
Posted in Windows内核调试
by
zyq8709
on 2011-05-31
在驱动编写的书上都说驱动不能调用用户态下的api,请问原因是什么?我在源码中寻找,也没找到相关的语句。按理说内核在ring0下,应该可访问所有代码。那驱动程序除了不能用win32 api,自己编写的不涉及调用api的位于用户空间代码片段也可不可以调用呢?
请老师们帮忙解答一下这个问题吧!多谢!
Posted in Windows内核调试
by
zyq8709
on 2011-05-31
谢谢张老师!
其实我一直在看一些windows内核分析的书,如毛德操和潘爱民老师的,这些书很不错,但是我的一些疑问,在这些书中找不到答案,书中忽略掉了这些细节,上网搜索寻找却越来越糊涂,所以只好来论坛上求教了!
其实我的意思是磁盘i/o应该运行在什么Irql上是正常的。因为我考虑到用户空间发生页面故障时,产生磁盘i/o,如果正常运行,它是如何保持线程上下文不变,而使地址空间不变,从而使页面数据可以正确的读入内存呢?
还有就是高于DISPATCH_LEVEL如果要发生进程调度,导致时钟中断,但不会进而切换进程,我的疑问是它导致了时钟中断会不会引发崩溃,因为在高irql的中断服务例程中也会发生进程时间片用尽而产生时钟中断,但是到底会不会出错,如果会出错,那么是不是得在中断服务例程中关中断? ...
Posted in Windows内核调试
by
zyq8709
on 2011-05-27
请张老师继续关注,帮忙解答最后一点问题吧(在倒数第三楼),感激不尽!
附:我在NtWriteFile等函数中并没有发现比如Irql进行比较判断的环节,请问他是如何进行对irql的限制的呢?
Posted in Windows内核调试
by
zyq8709
on 2011-05-25
多谢张老师的耐心解答!但是还有一点就是磁盘i/o究竟运行在哪一中断级别上?还有就是如果其低于dispatch级,那么它如何保证磁盘中断发生读取数据时的地址空间还是引发i/o的线程的地址空间呢?如果保证不了,那么当用户空间出现页面故障时,不就会发生将数据写入另一地址空间中了吗?
另:在比dispatch更高的中断级上,发生了进程调度中断,那么是不是将其作为伪中断忽略了,而不会引发崩溃?
请张老师继续关注,多谢了!我有些太较真,不好意思啦,呵呵。
Posted in Windows内核调试
by
zyq8709
on 2011-05-25
先请各位看一下附件文章中关于windows的irql的分析。
问1:缺页中断到底运行在哪一个中断级,是DISPATCH还是APC,还是低于DISPATCH的任意级上?注意不是发生的条件,而是发生缺页中断后,其中断过程运行中的中断级。因为我看源代码中并没有发生irql的提升,只是有一个关于当前irql与apc级的判断。
问2:磁盘i/o运行在哪一级上?根据文章所说其运行在dispach级,那么就有问题了。首先按其说法,是磁盘运行完需发出中断,然后中断在派出一个dpc,由于中断前的磁盘i/o驱动过程在dispach级,那么就算是发生dpc也不会响应。而且我感觉一般的文件操作调用的磁盘i/o首先会把数据读入系统空间,那就不必保持上下文不变了。但是对于页面异常,如果是用户空间发生了缺页,那么不保 ...
Posted in Windows内核调试
by
zyq8709
on 2011-05-24
刚才才注意到,原来帮助我的中有张老师,一直没有注意,在这里向张老师致歉并致以由衷的感谢!
Posted in Windows内核调试
by
zyq8709
on 2011-05-24
多谢老师的详解!
那还有为何这些I/O函数必须在PASSIVE级而非<=APC级,而且分配用于管理文件的Section结构时,是否一定会触发缺页异常呢,盼详解!
Posted in Windows内核调试
by
zyq8709
on 2011-05-24
如果仅仅是页面故障导致的,那么也是不能大于APC_LEVEL,而事实是不能大于PASSIVE_LEVEL,无论是否通过缓存操作,最终都得导致非缓存磁盘I/O。那么我猜想,是否是在FSD的非缓存I/O操作中加入了对
CurrentIrql不能大于PASSIVE_LEVEL的判断,请众位大哥给点提示,多谢!
Posted in Windows内核调试
by
zyq8709
on 2011-05-18
另:我在网上看到一段话:
应用程序通过API发出一个IO的请求 → 文件系统驱动负责创建文件对象,以及相关的管理结构。→ 对于已标记不缓存的文件 直接走存储驱动 / 缓存文件则调用CcCopyRead、CcCopyWrite等
→ 缓存管理器MmFlushSection的时候会产生页面错误,由内存管理器调用IoPageRead经由文件系统而直接走存储设备驱动。
照这样说,如果不缓存的话,那么就不会发生页面异常了,那就不会蓝屏了,那这个如何理解?
Posted in Windows内核调试
by
zyq8709
on 2011-05-18