如何在NT下獲取程序的路徑

2021-10-09 08:08:00 字數 2442 閱讀 7240

一:獲取nt下程序路徑的方法

在win9x系統中,利用toolhelp api中的相關函式可以很方便得得到程序的名稱及其路徑。但這種方法在nt系統中就不能奏效了,szexefile僅僅得到的是程序的名稱,並沒有包含程序的路徑。

如何在nt下獲取程序的路徑呢?(由於win9x系統不在我們討論的範圍之內,所以我們選用psapi中的相關函式進行說明,這僅僅適用於nt系統。)其實也很簡單——用openprocess()函式將程序開啟後,再利用enumprocessmodules()函式列舉該程序的模組,最後利用getmodulefilenameex()函式就能取得該程序的路徑了。

下面的這段程式將列舉nt系統中的程序,並將顯示每個程序的路徑。當然,這種方法對一些系統保護的程序而言或多或少會出現些問題,例如:smss.exe、winlogon.exe,csrss.exe等。如果誰有更好的方法請賜教,不勝感激。

二:具體實踐

//

#include

#include

#include "psapi.h"

#pragma comment( lib, "psapi.lib" )

int main(void)

0; return count:%s\n\n?,temp); printf(?\nprocess itoa(processcount,temp,10); closehandle(hmodule); closehandle(hprocess); printf(?failed!!!\n?); else %s\n?,path,temp); --- printf(?%s itoa(processid[i],temp,10); getshortpathname(path,path,256); sizeof(path)); path, hmodule, getmodulefilenameex(hprocess, &needed); sizeof(hmodule), &hmodule, enumprocessmodules(hprocess,

通過openprocesstoken函式獲得程序(本例為自身程序)訪問令牌的控制代碼,然後呼叫此函式後就可以像原文那 開啟目 程序獲取路徑了。可以看到:本方法已經成功獲取了系統程序csrss.exe的路徑。

二、具體實踐

//

/ * showprocesspath 2.0

* 2005.09.02

*

*

* 本程式適用於:winnt

* 代 在win2000p+sp4 + vc6+sp6測試通過

*///

#include

#include

#include "psapi.h"

#pragma comment( lib, "psapi.lib" )

//自定義函式:賦予指定特權。這裡用來提公升程式許可權。

bool enableprivilege(handle htoken,lpcstr szprivname);

int main(void)

0; return count:%s\n\n?,temp); printf(?\nprocess itoa(processcount,temp,10); closehandle(hmodule); closehandle(hprocess); printf(?failed!!!\n?); else %s\n?,path,temp); --- printf(?%s itoa(processid[i],temp,10); getshortpathname(path,path,256); sizeof(path)); path, hmodule, getmodulefilenameex(hprocess, &needed); sizeof(hmodule), &hmodule, enumprocessmodules(hprocess, { (hprocess) if | hprocess="openprocess(process_query_information" ); (getlasterror()="=error_success)" return( 通知系統修改程序許可權 tkp,null,null htoken,false,&tkp,sizeof adjusttokenprivileges( tkp.privileges[0].attributes="se_privilege_enabled;" tkp.privilegecount="1;" 修改程序許可權 null,szprivname,&tkp.privileges[0].luid lookupprivilegevalue( tkp; token_privileges szprivname) htoken,lpcstr enableprivilege(handle bool processid[i]); false, process_vm_read,>

三、以上代 在win2000p+sp4 + vc6+sp6測試通過。

如何在NT下獲取程序的路徑

如何在nt下獲取程序的路徑 整理 ackarlix 一 獲取nt下程序路徑的方法在 win9x 系統中,利用 toolhelp api 中的相關函式可以很方便得得到程序的名稱及其路徑。但這種方法在 nt系統中就不能奏效了,szexefile 僅僅得到的是程序的名稱,並沒有包含程序的路徑。如何在nt ...

獲取NT中系統程序的路徑

如何在nt下獲取程序的路徑 增補 獲取nt中系統程序的路徑 天津 趙春生 一 程式說明 最近整理文件,發現以前寫的 如何在nt下獲取程序的路徑 一文中還有個問題沒有解決 原文中的程式無法獲取系統程序的路徑,如 csrss.exe。記得vckbase上有位說過乙個方法 給列舉的程序增加se debug...

WinCE下如何獲取程序所在的目錄

眾所周知,wince下沒有當前目錄的概念,所有路徑都以根目錄 為參考。獲取程序所在目錄的參考 如下。getmodulefilename null,gszpath,max path intlen wcslen gszpath tchar p gszpath len while p t p t 0 或者...