c++ - プロセス所有者を取得する(Citrix /プロビジョニング)

原文 c++ winapi mfc

OpenProcessToken、GetTokenInformation、次にLookupAccountSidを使用して、特定のプロセスの所有者を特定しています。

ローカルマシン(Win 7およびWin 8.1)では、RDサービスセッション(Server 2012)では正常に動作します。正しいユーザー名を取得しています。プロセスの横のタスクマネージャに表示されるユーザー名。

Provisioning(ex Citrix)環境で同じコードを実行すると、ユーザー名「Administrator」しか取得できませんが、タスクマネージャーに異なる名前が表示されます。

プロビジョニング環境内でこれを克服する方法を知っている人はいますか?

助けてくれてありがとう
マーティン

これが私が使っているC++コードです:

BOOL DDEWinWord::processStartedFromLocalUser(DWORD procId)
{
    #define MAX_NAME 256
    DWORD dwSize = 0, dwResult = 0;
    HANDLE hToken;
    SID_NAME_USE SidType;
    char lpName[MAX_NAME];
    char lpDomain[MAX_NAME];
    PTOKEN_OWNER tp;

    // Open a handle to the access token for the calling process.
    HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procId);
    if (!OpenProcessToken(processHandle, TOKEN_QUERY, &hToken)) {
        AfxMessageBox("processStartedFromLocalUser - OpenProcessToken fehlschlag.");
        return FALSE;
    }

    // Call GetTokenInformation to get the buffer size.
    if(!GetTokenInformation(hToken, TokenOwner, NULL, dwSize, &dwSize)) 
    {
        dwResult = GetLastError();
        if (dwResult != ERROR_INSUFFICIENT_BUFFER)
        {
            AfxMessageBox("processStartedFromLocalUser - GetTokenInformation fehlschlag.");
            return FALSE;
        }
    }

    // Allocate the buffer.
    tp = (PTOKEN_OWNER)GlobalAlloc(GPTR, dwSize);

    // Call GetTokenInformation again to get the group information.
    if (!GetTokenInformation(hToken, TokenOwner, tp, dwSize, &dwSize))
    {
        AfxMessageBox("processStartedFromLocalUser - GetTokenInformation mit tp fehlschlag.");
        return FALSE;
    }

    if (!LookupAccountSid(NULL, tp->Owner, lpName, &dwSize, lpDomain, &dwSize, &SidType))
    {
        AfxMessageBox("processStartedFromLocalUser - LookupAccountSid fehlschlag."); 
        return FALSE;
    }
    else
    {
        AfxMessageBox(lpName);
    }

    return (m_stUserId.CompareNoCase(lpName) == 0);
}
答え
TokenUserではなくTokenOwnerを使用する必要があります。
関連記事

c++ - SonarQube Visual Studio 2013 C++プラグイン

c++ - Intel GalileoおよびC++ REST SDK

c++ - operator [] const参照の2次元ポインタのオーバーロード

c++ - C++でFLを16進数に変換する

c++ - スレッドC++を使用してシェルコマンドを実行する

c++ - ポインターと多次元配列の質問

c++ - Qt:フォーム全体にフォントの変更を適用する

java - 最小の「XOR」演算でバイナリマトリックスを再作成する

c++ - doxygenの「ファイルドキュメント」リストから「README.md」を除外します

java - Android Gstreamer SDKでANativeWindow_lockがエラー-22を返す