2017-05-16 28 views
-4

私はCプログラムを作成しています.PIDを使ってプロセスのユーザー名を知る必要があります。方法はありますか?WindowsのCでプロセスのユーザー名を取得する

私は、次のコードを書かれている:

int pid = getpid(); 
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); 

HPROCESSの値はNULLとして提供されます。 プロセスのユーザー名が必要ですが、これはタスクマネージャーにも表示されます。 (トッププロセス)。

タスクマネージャのスクリーンショットも添付されています。 Task Manager

+0

を試してみてください、これまでにあなたの研究/デバッグ努力をご提示ください。まず[Ask]ページをお読みください。 –

+0

私はCで解決策を見つけることができません。私はC++/C#でそれを行うことができますが、言語の制約のために私はC言語しか使用できません。私はgetpid()コマンドを使って現在のプロセスのPIDを持っていますが、プロセスのユーザー名が必要です。 – nikhilsid

+1

@nikhilsidだから、C++でどうやってやっていますか? –

答えて

-2

このコード

const char *getUserName() 
{ 
    uid_t uid = geteuid(); 
    struct passwd *pw = getpwuid(uid); 
    if (pw) 
    { 
    return pw->pw_name; 
    } 

    return ""; 
} 
+0

* return pw-> pw_name; * 'getpwuid()'が返す 'struct password'へのポインタを返しません。 per [getpwuid()のPOSIX標準](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwuid.html):*返されたポインタと構造体内のポインタが無効になるか、 getpwent() '、' getpwnam() '、' getpwuid() 'の呼び出しによって上書きされる可能性があります。 * –

+1

これ以外にも、geteuidもgetpwuidもWindows上に存在しません。また、構造体内のポインタも無効になります。 –

関連する問題