2010-05-21 77 views
0

我一直在試圖讓當前登錄使用下面的代碼用戶的令牌信息:無法獲取當前用戶的令牌信息

[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) 
     { 
     } 
    } 

的問題是,佈雷特永遠是假的,currentToken總是0. 我得到的sessionid爲1.

有人能告訴我這裏出了什麼問題嗎?

我想使用這個令牌信息從Windows服務傳遞給CreateProcessAsUser函數。

感謝, 拉姆

回答

1

你運行此代碼作爲Windows服務或只是一個正常的控制檯或WinForms應用程序? WTSQueryUSerToken只能由在LocalSystem帳戶下運行的應用程序調用,可以通過將其作爲Windows服務運行來實現。

+0

非常感謝Chris ...我知道WTSQueryUSerToken()只能用於服務。我曾試着從一個控制檯應用程序中嘗試它,並認爲它對於服務也是一樣的......我將這個代碼包含在我的服務中,並在短時間內恢復...... – Ram 2010-05-21 11:41:18

+0

這在作爲Windows服務運行時起作用...非常感謝,Chris ... – Ram 2010-05-21 11:50:29

+0

@Ram,太棒了!很高興幫助。 – 2010-05-21 11:51:11