无法获取当前用户的令牌信息

时间:2010-05-21 11:21:27

标签: c#

我一直在尝试使用以下代码获取当前登录用户的令牌信息:

    [DllImport("wtsapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern bool WTSQueryUserToken(int sessionId, out IntPtr tokenHandle);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern uint WTSGetActiveConsoleSessionId();

    static void Main(string[] args)
    {
        try
        {
            int sessionID = (int)WTSGetActiveConsoleSessionId();
            if (sessionID != -1)
            {

                System.IntPtr currentToken = IntPtr.Zero;

                bool bRet = WTSQueryUserToken(sessionID, out currentToken);
                Console.WriteLine("bRet : " + bRet.ToString());
            }
        }
        catch (Exception)
        {
        }
    }

问题在于,bRet始终为false且currentToken始终为0。 我将sessionid视为1。

有人能告诉我这里出了什么问题吗?

我想使用此令牌信息将其从Windows服务传递给CreateProcessAsUser函数。

谢谢, 拉姆

1 个答案:

答案 0 :(得分:1)

您是将此代码作为Windows服务运行还是仅在普通的Console或WinForms应用程序中运行? WTSQueryUSerToken只能由在LocalSystem帐户下运行的应用程序调用,这可以通过将其作为Windows服务运行来实现。