プロセスの所有ユーザがSYSTEMかそれ以外かを判定する方法

[戻る]
山田 2010/08/13(金) 11:49:15
任意の起動中プロセスがユーザ権限で動作しているか、SYSTEMとして動作しているかの
判定を
行う必要があります。

XP環境では以下のコードでアカウント名を取得して、"SYSTEM"かどうかで判定を行い
実装可能ですが、Vista、7環境では管理者権限の問題かOpenProcess()で失敗します。
Vista以降は、管理者権限がない状態で判定する必要があります。

他の方法でもかまいませんので、プロセスの所有ユーザがSYSTEMかそれ以外かを判定す
る方法
をご存知の方がいましたらご教授お願いできないでしょうか?



HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,dwPId);
if(hProcess) {
  OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken);

  if( GetTokenInformation(hAccessToken,TokenUser,InfoBuffer, 1000, 
&dwInfoBufferSize) ) {
    LookupAccountSidA(NULL, pTokenUser->User.Sid, szAccountName,
      &dwAccountSize,szDomainName, &dwDomainSize, &snu);

    //アカウント名取得
    _tprintf(_T("%s :  "), procEntry.szExeFile);
    printf("%s \n",szAccountName);
  }
  else {
    //失敗
  }
}  
else {
  //失敗
}

aetos 2010/08/16(月) 00:54:52
OpenProcess に失敗するんではとっかかりがありませんね。
あとはこっちも SYSTEM 権限で動作するサービスを立ち上げて対抗するとか。

古いスレッドには追加発言できません。