小弟想實作這樣一個功能,例如說我現在有個檔案A 此時檔案B 打開或者讀寫了檔案A我想通過我的程式來知道是誰打開了檔案A,或者說監測所有行程看看是否有打開檔案A,希望各位大俠賜教
簡單點就是想知道某個行程打開的所有檔案或者說某個檔案被哪些行程打開了
uj5u.com熱心網友回復:
幫幫忙呀 怎么沒有回答我 好桑心啊uj5u.com熱心網友回復:
這個有難度。
幫頂一下……
uj5u.com熱心網友回復:
看到他們用 SHChangeNotifyRegister() 等API做“監視”的,都沒檔案打開、讀寫之類的動作。uj5u.com熱心網友回復:
我看到有人用下列方式 但是我不會 求教下
你需要使用ZwQuerySystemInformation和ZwQueryInformationFile這兩個未公開的API
先使用ZwQuerySystemInformation函式列舉系統中打開的所有檔案的句柄,再使用ZwQueryInformationFile,然后根據引數FileInformationClass的不同值來回傳不同的型別,使用FileInformationClass=FileInformationClass來得到FILE_NAME_INFORMATION,從而得到是哪個行程打開了這個檔案
LS講的方法沒錯,我小小地補充一下。
ZwQueryInformationFile對應的hFile必須是本行程內的句柄(句柄是行程相關的,不能跨行程使用同一句柄),所以不可以對ZwQuerySystemInformation回傳的句柄表里查到的句柄直接ZwQueryInformationFile,應該先ZwDuplicateObject到本行程內之后再ZwQueryInformationFile。
另外,如果想關閉句柄,可以創建遠程執行緒執行CloseHandle(ZwClose),或者用ZwDuplicateObject,最后一個引數傳DUPLICATE_CLOSE_SOURCE可以關閉原句柄。
不知道哪位兄弟能幫忙整理一下
uj5u.com熱心網友回復:
http://www.nirsoft.net/utils/opened_files_view.html轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/139618.html
標籤:API
