在屏幕保护程序中启动特定的Windows会话

时间:2014-07-17 12:01:10

标签: c# windows pinvoke screensaver credential-providers

我在身份验证界面(Windows 7和8.x)上安装了C#屏幕保护程序。屏幕保护程序是WebBrowser,显示RSS,图像......和两个按钮。我使用pGina凭据提供程序。特定参数允许权限为非本地用户创建本地概要文件。

第二个按钮关闭屏幕保护程序,让用户将他的用户名和密码(非本地帐户,这就是我使用pGina的原因)写入pGina的凭据提供程序。它完美无缺。

对于第一个按钮," Guest",我想要的是当我点击按钮而没有输入用户名和密码到凭据提供程序但在关闭之前进入我的屏幕保护程序代码时启动会话。

事件已正确触发。我的问题是为Guest用户启动会话。我看了the source code of pGina to log a local user (L.257)并将其翻译成C#代码,但没有工作......

bool retVal;
IntPtr hproc = GetCurrentProcess(), htok = IntPtr.Zero, ptUser = new IntPtr();
TokPriv1Luid tp;
retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
if (LookupPrivilegeValue(null, SE_TIME_ZONE_NAMETEXT, ref tp.Luid)){
     if (AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero)){
         if(!LogonUser("USER", "USERDOMAIN", "PASSWORD", 
            LogonType.LOGON32_LOGON_INTERACTIVE, 
            LogonProvider.LOGON32_PROVIDER_DEFAULT, 
            out ptUser))
                MessageBox.Show(Marshal.GetLastWin32Error().ToString());
     }
}

LogonUser返回true但没有任何反应......我还尝试了LogonType的不同值。

我已经阅读了这个link,这正是我在VB中所做的。

我在LogonUser之后检查了Marshal.GetLastWin32Error,它返回0 "The operation completed successfully."

编辑: 我发现了很多次使用LogonUser登录到Windows:"不,你不能,使用LogonUser()只是登录过程中许多人的一步"

我仍在搜索有关其他步骤的信息,但有人对我有想法或其他解决方案?

0 个答案:

没有答案