執行工作管理員, 可以看到memory 已經吃了4G 了, 但怪的是找不到哪個process 吃走的, 這下麻煩了, 是kernel level 的, 把現場配制拉回公司內部覆製, 還是出不出問題, 後來才想到客戶端有接IO 裝置, 透過USB to COM 去控制, 所以就完整接了起來, 就看到問題了..!!
利用 WDK 內附的Poolmon 來看, 可以加個 -b 的參數讓pool tag 以吃記憶體大小做排列, 白色的為有記憶體變動的pool tag, 慢慢的就看到問題了, 紅色框起來的Ser2 慢慢往上長, 這下抓到了, 那來看一下是誰搞的鬼摟.!!
用Windbg 的kernel debug 連進去
KD > ed nt!poolhittag '2reS'
記得tag 要反過來.!
按了幾下g 就可以確定問題了, ser2pl64.sys 這個檔案出問題, 確定是USB2COM的Driver有問題
kd> kb
: Call Site
: nt!ExDeferredFreePool+0xb57
: Wdf01000!FxPoolAllocator+0x29b
: Wdf01000!FxObjectHandleAlloc+0xb2
: Wdf01000!imp_WdfMemoryCreatePreallocated+0x16e
: ser2pl64+0x1239d
: ser2pl64+0x121cc
: ser2pl64+0x1138e
: ser2pl64+0xed35
: ser2pl64+0xad65
: ser2pl64+0x28065
: Wdf01000!FxPkgGeneral::OnCreate+0x4b1
: Wdf01000!FxPkgGeneral::Dispatch+0x15c
: Wdf01000!FxDevice::Dispatch+0xa9
: serenum!Serenum_DispatchPassThrough+0x86
: serenum!Serenum_CreateClose+0xd9
: nt!IopParseDevice+0x5a5
: nt!ObpLookupObjectName+0x588
: nt!ObOpenObjectByName+0x306
: nt!IopCreateFile+0x2bc
: nt!NtCreateFile+0x78
: nt!KiSystemServiceCopyEnd+0x13
: ntdll!ZwCreateFile+0xa
: 0x7529bff7
: 0x3bffd98
: 0x3bffdb0
update 他們公司最新的Driver ,問題依舊, 在64 bit OS 下就會出問題, 打去給他們公司要反應這問題, 結果一定要問我是哪家公司, 因為這產品也不是我買的, 是我客戶買的, 我跟他說我是誰有啥義意, 本來還在幫忙trace 看是為啥他們會一直allocate memory 而不release, 這下算了, 請客戶換別家USB2COM 好了, 而且還一定不能用這家chip 的.!!
參考連結Using the Kernel Debugger to Find a Kernel-Mode Memory Leak
No comments:
Post a Comment