0

我在身份验证接口(Windows 7 和 8.x)上有一个 C# 屏幕保护程序。屏幕保护程序是一个WebBrowser显示 RSS、图像... 和两个按钮的人。我正在使用pGina凭据提供程序。特定参数允许为非本地用户创建本地配置文件的权限。

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

对于第一个按钮“Guest”,我想要的是在单击按钮时启动一个会话,而不是在凭据提供程序中输入用户名和密码,而是在关闭之前输入我的屏幕保护程序代码。

事件被正确触发。我的问题是为来宾用户启动会话。我阅读了 pGina 的源代码以记录本地用户(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.

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

Marshal.GetLastWin32Error在LogonUser之后检查,它返回0“操作成功完成。”

编辑: 我多次发现关于使用 LogonUser 登录到 Windows:“不,你不能,使用 LogonUser() 只是登录过程中的许多步骤”

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

4

0 回答 0