Я пытался получить вошедшего в символической информации пользователя, используя следующий код:Не удалось получить токен информацию текущего пользователя
[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
Большое спасибо Крису ... Я не знаю, что WTSQueryUSerToken() может использоваться только из службы. Я попробовал это из консольного приложения, думая, что это тоже самое для службы ... Я включу этот код в свою службу и вернусь через короткое время ... – Ram
Это работало при запуске в качестве службы Windows ... Большое спасибо, Крис ... – Ram
@Ram, отлично! рад, что помог. –