我试图从Windows服务推出的Windows 7的过程。
这是我的代码来获取用户令牌。
uint sessionId = Kernel32.WTSGetActiveConsoleSessionId();
var userTokenPtr = new IntPtr();
if (!WtsApi32.WTSQueryUserToken(sessionId, out userTokenPtr))
{
int lastError = Marshal.GetLastWin32Error();
throw new Win32Exception(lastError);
}
这些都是的DllImport语句:
public class Kernel32
{
[DllImport("kernel32.dll", EntryPoint = "WTSGetActiveConsoleSessionId")]
public static extern uint WTSGetActiveConsoleSessionId();
}
public class WtsApi32
{
[DllImport("Wtsapi32.dll", EntryPoint = "WTSQueryUserToken")]
public static extern bool WTSQueryUserToken(UInt32 sessionId, out IntPtr phToken);
}
我从这个答案的代码并复制它是: https://stackoverflow.com/a/11266955/410075
它总是抛出以“试图引用不存在的令牌”的消息一Win32Exception。 这是数据:的sessionId = 1和lastError = 1008。
我试图运行此为:
- 调试过程(与Visual Studio宿主进程)
- 调试过程中(没有在Visual Studio宿主进程)
- 一个管理员用户
- 升高的管理员用户
- Windows服务。
- Windows服务登录为管理员用户。
- 当我向上帝祈祷,撒旦,菩萨和雷尔。
我还创建了一个清单为可执行文件,要求管理员升高。
没有什么工作,它总是抛出一模一样的例外。 我的想法......