2010-05-21 8 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.

Может ли кто-нибудь сказать мне, что здесь не так?

Я хочу использовать эту токенную информацию, чтобы передать ее функции CreateProcessAsUser из службы Windows.

Спасибо, Ram

ответ

1

Вы используете этот код в качестве службы Windows или просто в обычном приложении Console или WinForms? WTSQueryUSerToken может быть вызван только приложением, которое выполняется под учетной записью LocalSystem, что может быть достигнуто за счет запуска этой службы Windows.

+0

Большое спасибо Крису ... Я не знаю, что WTSQueryUSerToken() может использоваться только из службы. Я попробовал это из консольного приложения, думая, что это тоже самое для службы ... Я включу этот код в свою службу и вернусь через короткое время ... – Ram

+0

Это работало при запуске в качестве службы Windows ... Большое спасибо, Крис ... – Ram

+0

@Ram, отлично! рад, что помог. –

Смежные вопросы