2011-04-20 112 views
0

我們的一個傳統應用程序之一是在1臺特定機器上生成資源泄漏。隨着時間的推移,整個處理器的使用量會增加,直到應用程序關閉並重新啓從設備路徑獲取信息

使用perfmon我發現進程的句柄計數和處理器使用率之間存在直接關係。這個數字上升到了數千,我使用SysInternal的handle來公開所有額外的句柄(至少在今天下午當我運行handle運行的過程中)具有\Device\00000066的路徑。

我想了解如何發現更多有關設備路徑所指的設備的更多信息,因此我們知道該從何處進行操作。我強烈懷疑該設備是密碼鍵盤(在借記交易期間使用),但需要證明。

Windows XP sp3。

分辨率 在塞瓦蒂托夫的建議幫助我確定它是USB設備後,我有一個主要嫌疑犯:一個錢箱。我們讓客戶端拔下並手動使用它幾個小時:手柄沒有不斷增加。我查看了該項目的代碼,開發人員在獲取它們之後忽略了關閉設備的句柄。手柄的快速增加是由於計時器在打開抽屜後檢查其狀態,以確定用戶何時關閉抽屜。

回答

1

這裏是你如何能得到內核目錄對象的更多信息:

  1. 安裝LiveKd,在包含kd.exe
  2. 內LiveKd提示符下鍵入這個目錄中安裝Windows Debugging Tools
  3. 啓動LiveKd :
 
    !object \device\00000066 

然後使用v即使用!devobj命令顯示該對象(首次打印)。 這是我在我的系統上做的例子 - 我拿起了名\設備\ 0000006a隨機設備爲例(僅僅是用來迷惑你: - >)

 
    0: kd> !object \device\0000006a 
Object: fffffa8007959630 Type: (fffffa8006bce2d0) Device 
    ObjectHeader: fffffa8007959600 (new version) 
    HandleCount: 0 PointerCount: 6 
    Directory Object: fffff8a00000b8f0 Name: 0000006a 
0: kd> !devobj fffffa8007959630 
Device object (fffffa8007959630) is for: 
0000006a \Driver\ACPI DriverObject fffffa8006b25d00 
Current Irp 00000000 RefCount 1 Type 00000032 Flags 00003040 
Dacl fffff9a100092d31 DevExt fffffa800792e7d0 DevObjExt fffffa8007959780 DevNode fffffa800796db10 
ExtensionFlags (0x00000800) 
          Unknown flags 0x00000800 
AttachedDevice (Upper) fffffa800907d040 \Driver\i8042prt 
Device queue is not busy. 

的\司機應該給你一個提示設備是什麼。

+0

找到它是一個HID USB設備。這使它縮小了很多。 – 2011-04-21 05:45:17