阅读:1204回复:0
請問tdi filter 我在 tdi_create 順便取得ProceesName的問題
#define BASE_PROCESS_PEB_OFFSET 0x01B0
#define BASE_PEB_PROCESS_PARAMETER_OFFSET 0x0010 #define BASE_PROCESS_PARAMETER_FULL_IMAGE_NAME 0x003C #define BASE_PROCESS_PEB_OFFSET_2003 0x0190 流程大概是這樣 tdi_create GetCurrentProcessId PsLookupProcessByProcessId(pid, &dwAddress); dwAddress += BASE_PROCESS_PEB_OFFSET; dwAddress += BASE_PEB_PROCESS_PARAMETER_OFFSET; dwAddress += BASE_PROCESS_PARAMETER_FULL_IMAGE_NAME; (PCWSTR)dwAddress <=====這個就是全路徑和檔案名稱 unicode 基本上在xp上取都沒問題 但是拿到2000 pro sp4 跑的時候, 開始都沒問題....只有一種狀況會有問題.. 就是開一個網路芳鄰上某台電腦的超連結資料夾, 然後按回到上一層的按鈕...= =... 整個系統就BSOD.....我確認了一下是explore.exe 當要取檔案全路徑的時候... 也就是要+BASE_PROCESS_PEB_OFFSET的時候才會發生.........= =...其他我開IE或Tcp udp 程式都正常 以上這是windows 2000的情況..... 至於windows 2003 rc2...我用windbg查了一下PEB_EPROCESS_OFFSET 0x1a0..... 似乎跟網路上的資料不太一樣...不知道是不是我都用VM測試的關係..... PROCESS 83392618 SessionId: 0 Cid: 02c4 Peb: 7ffde000 ParentCid: 030c DirBase: 16cd9360 ObjectTable: e1222380 HandleCount: 185. Image: windbg.exe PROCESS 833779b8 SessionId: 0 Cid: 078c Peb: 7ffdf000 ParentCid: 030c DirBase: 16cd9460 ObjectTable: e1a86480 HandleCount: 51. Image: 12001.exe 然後我用du poi(poi(7ffde000+0x010)+0x03c) 試圖去找出 windbg.exe的全名...測試ok.. 但用 db poi(poi(7ffdf000+0x010)+0x03c) 找12001.exe 的全路徑檔名 得到錯誤 Memory access error at ')+0x03c)' = =似乎超出邊界還是空指標.....= =...真的搞不懂windows 2003 下...我的PEB_PROCESS_OFFSET的值 應該要多少才可以取得我真正想要的進程名稱... 盼各位牛大指點... |
|