任意の起動中プロセスがユーザ権限で動作しているか、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 {
//失敗
}
OpenProcess に失敗するんではとっかかりがありませんね。
あとはこっちも SYSTEM 権限で動作するサービスを立ち上げて対抗するとか。