1

Windowsセッション(TSセッションとログオンセッション)がどのように機能するか(現在はXP)をよりよく理解しようとしているので、私の質問全体または私がやろうとしていることは不可能かもしれません。

セッション0で実行されるWindowsサービス(XP)を実行しており、を使用してこのセッションに関連付けられたユーザー名を取得しようとしていますWTSQueryUserToken()。現在、セッション0には、いくつかのユーザー名があります:SYSTEMtheuser(ログオンしているユーザー)NETWORK SERVICE、、LOCAL SERVICE

使用するWTSQueryUserToken()と「theuser」(アクティブセッション)を取得しますが、サービスのユーザー名(SYSTEM)を取得しようとしています。それは可能ですか、それとも私は単にそれをすべて間違っていましたか?

4

1 に答える 1

1

次のコードを使用して、プロセスのユーザートークンを取得します

HANDLE GetProcessOwnerToken(DWORD pid)
{
    if (!pid) return NULL;

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (!hProcess) return NULL;

    HANDLE hToken = NULL;
    if(OpenProcessToken(hProcess, MAXIMUM_ALLOWED, &hToken))
    {
        HANDLE result = INVALID_HANDLE_VALUE;
        if(DuplicateTokenEx(hToken, TOKEN_ASSIGN_PRIMARY | TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &result))
        {
            if(result != INVALID_HANDLE_VALUE)
            {
                CloseHandle(hToken);
                CloseHandle(hProcess);
                return result;
            }
        }
        CloseHandle(hToken);
    }
    CloseHandle(hProcess);

    return NULL;
}

それがサービスでも機能するかどうかはわかりませんが、機能するはずだと思います。

于 2010-12-25T10:33:55.860 に答える