只是想更好地理解APC。要排队用户模式APC,我们可以使用QueueUserAPC函数。那么如何排队一个特殊/正常的内核模式APC?谢谢。如何排队内核apc
回答
APC只能从非分页池进行分配,因为APC可以插入(由KeInsertQueueAPC)在主题列表在DPC水平 - 因此,如果您例如分配KAPC从分页池,插入,然后有人尝试插入另一APC DPC水平 - 你的分页APC数据可分配(当插入到链表)和作为结果BSOD
的INI tialize KAPC使用KeInitializeApc。如果免费APC需要完全调用ExFreePool并没有什么可以使用0作为RundownRoutine。否则你必须提供自己的RundownRoutine进行正确的清理。 KernelRoutine总是必须设置,因为几乎总是指向驱动程序中的某些功能 - 驱动程序不能卸载,直到APC将不会执行。后KernelRoutine或RundownRoutine通常需要调用ObfReferenceObject驾驶员对象插入APC之前KeInsertQueueAPC和ObfDereferenceObject将被执行(或KeInsertQueueAPC返回false)。但你不能“正常途径”呼ObfDereferenceObject - 这是毫无意义的(如果最后一个引用驾驶员保持 - 会当ObfDereferenceObject返回驱动程序代码,你需要汇编语言编写的代理从KernelRoutine崩溃和RundownRoutine。其中呼吁他们的C/C++实现,并在退出做JMP(但不呼叫 !!)指令ObfDereferenceObject和纸张都必须特别重建的后ObfDereferenceObject呼叫RET - 代码将返回到内核合作德,其调用你的驱动程序回调例程(内核或破败) - 所以跳过驱动程序代码执行后ObfDereferenceObject
更多细节 - 阅读Inside NT's Asynchronous Procedure Call - 尽管这已经是很老的文章 - 没有从这个时间和最新变化赢得10 - 全都一样
- 1. 将排队的OpenCL内核出队
- 2. 导致内核恐慌的PHP APC
- 3. APC如何使用内存?
- 4. 如何排队
- 5. 安排PHP APC的注意事项APC
- 6. Linux内核 - 等待队列
- 7. OpenCL执行模式多个排队内核
- 8. 排队的内核速度比预期慢了AMD的GPU只
- 9. CSS - 使内容排队
- 10. 内联块,不排队
- 11. 有没有办法丢弃APC队列?
- 12. 何时在Linux内核中使用内核线程与工作队列
- 13. 如何使表格排队?
- 14. IntentService:如何正确排队?
- 15. 如何提前排队?
- 16. 如何排队NSUserAppleScriptTask执行?
- 17. 如何排队作业
- 18. 如何排队两个observable?
- 19. 内核等待队列如何解决“失去唤醒”?
- 20. 如何杀死内核模块中的等待队列?
- 21. 如何使用linux内核列表实现队列?
- 22. Ruby:立即排队排队
- 23. 程序如何通信 - 微内核单片内核exo内核
- 24. 如何正确处理一个排队代理的排队nsoperation
- 25. 如何从内核
- 26. mod_fcgi + APC +共享内存
- 27. Symfony内置缓存vs APC
- 28. 查看/转储APC内容?
- 29. Laravel如何排队工作,以及如果php工匠队列如何排队:listen stops
- 30. OpenCL内核排队并开始在ATI卡上运行的延迟