Tag: winlogon

通过服务删除Windows登录屏幕

我试图从服务启动的可执行文件中删除Windows登录屏幕(winlogon)。 该服务将自动启动Windows并等待来自另一台计算机的命令。 当它收到命令时,它将启动一个exe,它将在特定的用户名下启动cmd.exe。 该服务已经存在。 我有编写这个可执行文件的工作。 目前,我编写了可执行文件(CmdLogin),它通过调用LogonUserW,ImpersonateUser和CreateProcessWithLogonW在不同的用户下启动cmd.exe。 我将lpDesktop指定为“WinSta0 \ Default”。 唯一的问题是该服务必须在管理员帐户下运行(但这是一个不同的问题)。 从命令提示符调用时(即使在Windows 7上),这完全正常。 当用户登录并查看他的桌面时(例如我在同一台机器上进行调试时)从服务调用时,这也有效。 但是,正如我上面所说,我的真正要求是即使显示Windows登录屏幕也能正常工作。 目前,exe提供了正确的退出代码,但窗口没有出现。 但是,当用户登录时,他会在桌面上看到cmd窗口。 我找到的一个解决方案是使用“WinSta0 \ WinLogon”代替默认的lpDesktop。 我还没试过。 但是,这看起来会在登录屏幕上显示cmd窗口。 我真正需要的是实际模拟用户登录winlogon并显示他的实际桌面(以及cmd窗口)。 我环顾四周,发现了GINA和Winlogon通知包。 他们看起来像是一种矫枉过正,我不确定这是否能解决这里的目的。 此外,这些在Windows Vista中已被弃用,这使我认为有一种更好,更简洁的方法来解决这个问题。 有关我应该用什么来实现这一目标的任何建议? 为了记录,可执行文件在C#中,使用P / Invoke进行API调用。 我愿意使用我可以从这个C#应用程序调用的C dll。 谢谢, 侯赛因

在Windows登录屏幕中运行表单C#

我需要编写一个小工具,在每个userdesktop上运行,如果没有人登录,则直接在登录屏幕上运行。 也许一个表单开始的服务? 我已经找到了这个问题(和答案): 在Windows 7欢迎屏幕上运行一个进程 // grab the winlogon process Process winLogon = null; foreach (Process p in Process.GetProcesses()) { if (p.ProcessName.Contains(“winlogon”)) { winLogon = p; break; } } // grab the winlogon’s token IntPtr userToken = IntPtr.Zero; if (!OpenProcessToken(winLogon.Handle, TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, out userToken)) { log(“ERROR: OpenProcessToken returned false – ” + […]

如何在Windows 7中的登录屏幕上显示UI

我想在预登录屏幕(用户通常输入用户名/密码的屏幕)上显示与用户交互的UI 我读到Winlogon软件包的体系结构已经改变,并且在Windows 7中无法帮助我。我被称为使用WTS函数,但是我仍然不清楚如何使用它们或哪些。 我已经创建了一个带有notepad.exe的服务(现在),但是当用户处于登录前屏幕时我需要触发此服务。 我不确定是什么或如何实现它。

创建交互式登录会话

我正在尝试创建一个类似于微软废弃的超级快速用户切换器 ( 下载 )的实用程序,它允许快速用户切换而无需通过欢迎屏幕。 我有一个使用未记录的WinStationConnectW API(以及WTSEnumerateSessions )的工作实现,但它只能切换到已登录的用户。 如何创建登录会话以便切换到未登录的用户? 我只需要支持XP,虽然在Vista / Seven上工作会很好。 (我目前的代码已经做了) 我知道这是可能的,因为Super Fast User Switcher可以做到这一点。 (虽然它需要Windows服务才能完成) 我正在编写C#,但我可以将任何答案翻译成C#。

在Windows XP中使用C#在登录屏幕上显示窗口

我正在尝试使用C#创建一个服务,启动一个可以在Windows XP登录屏幕上显示的进程。 我发现一些代码在C ++中执行此操作。 C ++代码用于创建另一个进程,STARTUPINFO.lpDesktop设置为“WinSta0 \ WinLogon”。 然后,创建的进程将显示在Windows登录屏幕上。 我似乎找不到使用System.Diagnostic.Process类在C#中指定新进程的“桌面”的方法。 有谁知道如何用C#做到这一点?