gpt4 book ai didi

windows - 测量 Windows 中设备驱动程序的内存使用情况

转载 作者:可可西里 更新时间:2023-11-01 12:43:02 26 4
gpt4 key购买 nike

如何确定每个设备驱动程序消耗了多少内存?我假设这可以通过某些 Win32 或 .NET API 来完成,但我无法确定是哪一个。

最佳答案

Windows 使用池标记跟踪设备驱动程序内存使用情况。如果您知道有问题的驱动程序将什么池标记传递给 ExAllocatePoolWithTag , 然后您可以使用 poolmon 等工具跟踪其内存使用情况(来自 Windows 驱动程序工具包),PoolTag (来自 OSR),或 WinDbg (or KD) (来自 Windows 调试工具)。

请注意,设备驱动程序可能会调用间接分配内存的内核 API。例如,调用 IoAllocateMdl 将导致 Windows I/O 管理器使用由 Windows I/O 管理器分配的不同池标记为内存描述符列表分配内存。因此,代表多个设备驱动程序执行的分配可能都使用相同的池标记。

如果您试图确定哪个驱动程序正在泄漏内存,请使用 poolmon/PoolTag/WinDbg/KD 识别正在泄漏的池标记。然后将内核调试器(WinDbg 或 KD)附加到系统并将变量 nt!poolhittag 设置为泄漏池标记。下次调用 ExAllocatePoolWithTag 以使用该池标记分配内存时,系统将进入内核调试器,然后您可以查看调用堆栈以确定哪个驱动程序正在执行分配。此过程在 Using the Kernel Debugger to Find a Kernel-Mode Memory Leak 中有更详细的描述。 .

关于windows - 测量 Windows 中设备驱动程序的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/395569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com