Top > Windows API > GetProcessImageFileNameW?

これは以下の投稿に対する返信です。
名前
メール   (省略可)
題名   (質問の場合は、質問内容を表す具体的な名前)
クイズ この掲示板が対象としているプログラミング言語の名前は?
内容
(タグは使えません)
名前とメールをブラウザに保存
  

Re: GetProcessImageFileNameW?   by 夏みかん 2007年11月27日 00:13

 
> どうも特定のプロセスをAPIでアクセスするとエラーが出るみたいなんです。
> smss.exeとかcsrss.exeみたいなやつです。
これはエラーというよりは、NT系の特権が無効だから取得できないと思うよ。
タスクマネージャでは「ユーザ名」が「LOCAL SERVICE」や「NETWORK SERVICE」でしょ。
取得するには
1...OpenProcessToken 関数で TOKEN_ADJUST_PRIVILEGES 定数付きでアクセストークンを開く。
2...LookupPrivilegeValue 関数で特権名のLUID(一意のID)を取得する。
3...TOKEN_PRIVILEGES 構造体の Attributes メンバに SE_PRIVILEGE_ENABLED で有効にセット。
4...AdjustTokenPrivileges 関数で特権トークンの状態(有効)を設定する。
5...CloseHandle 関数で(1)で開いたアクセストークンを閉じる。
※LookupPrivilegeValue 関数の第2引数には「SE_DEBUG_NAME」を指定すること。


GetProcessImageFileNameW?   by Cthulhu 2007年4月1日 17:04

 
こんにちは。
最近質問してばかりですが、何卒ご教授お願いします。

WinXP SP2でタスクマネージャもどきを作っているのですが・・・

#include <psapi.h>
#include <tlhelp32.h>

hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,pe.th32ProcessID) ;
if(hProcess != NULL) {
//モジュールハンドルの取得
if (EnumProcessModules(hProcess,NULL,NULL, &RetSize)) {
GetModuleFileNameEx(hProcess, NULL, FileName, MAX_PATH) ;

とまぁごちゃごちゃやってるんですが・・・
結果はきちんと取得できてるんですが・・・

どうも特定のプロセスをAPIでアクセスするとエラーが出るみたいなんです。
smss.exeとかcsrss.exeみたいなやつです。

エラーは

プロシージャエントリポイントGetProcessImageFileNameWがダイナミックリンクライブラリPSAPI.DLLから見つかりませんでした

です。
PSAPI.DLLは実行ファイルと同じフォルダにありますし、そのDLLもMS提供の再配布可能DLLです。
GetProcessImageFileNameWなんて使ってないのに・・・
PSAPI.libとかのリンクはきちんと出来ると思うのですが・・・
何か見落としているのでしょうか?


Top > Windows API > GetProcessImageFileNameW?