2008-10-23 104 views
3

從Windows的內核模式中,我可以截取和監控幾乎在特定磁盤上執行的所有操作。當爲任何目的打開文件時,我會得到一個事件。追蹤哪個進程打開了一個特定的文件

現在我想跟蹤打開它的應用程序。我認爲這應該是可能的,但不知道如何。

我在Windows Win32 API中使用標準文件管理功能。

在此先感謝。

/Robert

回答

-3

只需使用Win32 N.API從文件句柄中獲取pid即可。 這是一個15年的常見問題...

+0

-1這裏幾乎沒有任何信息。 – 2011-10-27 03:26:37

0

我會使用Sysinternals提供的「handle.exe」應用程序。

或者,你是否真的試圖做到這一點編程?

+0

是的,編程方式,因此「在win32 API中的文件管理功能」和「事件」 – sharkin 2008-10-23 21:39:15

3

Sysinternals Filemon(免費)做到這一點,並更好,但他們描述了他們是如何做到的:

對於Windows 9x的驅動程序,心臟的FileMon的 是虛擬設備驅動程序 ,Filevxd.vxd。它是動態加載 ,並在其初始化它 安裝通過 的VxD服務, IFSMGR_InstallFileSystemApiHook一個文件系統過濾器,以 將自身插入到的 調用鏈中的所有文件系統請求。在Windows NT FileMon之的心臟是創建和 附加過濾裝置對象 目標文件系統設備中的文件 系統驅動程序對象,以便 該FileMon的會看到所有的IRP和被引導至硬盤 FastIO請求。 當FileMon發現打開,創建或關閉調用時,它會更新內部 散列表,該內部散列表充當內部文件句柄和文件 之間的映射 路徑名稱。每當它看到基於句柄的調用 時,它將在哈希表中查找 句柄以獲取 全名以供顯示。如果 基於句柄的訪問引用FileMon啓動之前打開的文件 ,FileMon 將無法​​找到其 散列表中的映射,而只是簡單地顯示 句柄的值。

- 亞當

1

Sysinternals的在做這件事,並解釋它做了一個好工作,那的舊版本的一些源代碼仍然可以here例如,代碼是有據可查的(恕我直言)這也可能是一個好的開始。

相關問題