标签: winlogon

如何以编程方式与winlogon交互?

我有一个Windows服务,我想使用帐户用户名和密码以编程方式解锁工作站.

本文https://technet.microsoft.com/en-us/library/dn751047(v=ws.11).aspx解释了Windows上的登录验证工作流程,如下图所示: 认证工作流程

如上所述,在步骤5,用户将凭证输入到登录UI中.我想要实现的是让Windows服务输入凭据并让winlogon执行登录.

没有winlogon API来实现这一目标.如在其他问题中所见,使用winapi LogonUser函数成功执行身份验证并返回令牌,但它不会切换到应用程序桌面,并且Logon UI仍保留在屏幕上.

大多数文章和SO答案暗示了凭证提供者,但所有凭据提供者样本都需要用户与Logon UI进行交互.

更新:我看到一些用户还没有完全理解这个问题,并提出了对我的案例无用的解决方法.我正在尝试实现的工作流程如下:

  1. Windows服务在Windows启动(完成)时启动.
  2. 相同的Windows服务具有Web服务,并通过API(完成)接受HTTP请求.
  3. 用户通过API从另一个设备(完成)向服务提供凭据.
  4. 提供的凭据用于登录工作站.
    4.1提供的凭证用于在锁定时解锁工作站(WinKey + L).
  5. (可选)该服务通过API公开Windows帐户.
  6. (可选)用户可以向服务指定要用于登录的帐户.

目前,我有兴趣制定第4步和第4.1步.

c# winapi winlogon credential-providers

28
推荐指数
1
解决办法
2321
查看次数

自定义Windows身份验证包

所以,这是场景.我正在Windows 7中开发一个登录系统.我创建了一个Credential Provider,其中包含一个Credential.凭证有三个输入字段,用户名,密码和PIN.

据我所知,文档(CMIIW)是当我们填写字段并单击登录时,WINLOGON将检索用户名和密码,并通过调用LSALogonUser()进行身份验证将其发送到LSA.然后LSA将尝试与Authentication Package KERBEROS(用于远程登录)或MSV1_0(用于本地登录)进行协商.

仅假设现在的本地方案,用户名和密码将传递给MSV1_0,并与SAM数据库中的用户和密码一起检查.现在的问题是,我不希望用SAM数据库检查它.假设我有一个文件C:\ users.txt,其中包含三元组:{username; 密码; 销}.这里的所有用户名都是Windows中的现有用户.如何使身份验证遵循我的方式(检查文件C:\ users.txt.

如果我没弄错的话,我们可以创建自己的身份验证包来"包装"MSV1_0.你们有一个示例代码吗?还是有另一种更合适的方式吗?

谢谢,非常感谢你的帮助.

c++ winlogon windows-authentication lsa credential-providers

10
推荐指数
1
解决办法
3051
查看次数

如何在默认桌面和Winlogon桌面之间切换进程?

我正在Windows 7(x64)和Windows 8(x64)上用C++ 编写远程桌面应用程序,如TeamViewer.

是什么让我陷入困境

我已经使用SendInput()实现了鼠标输入和键盘输入.我发现当进程运行时SendInput()工作正常winsta0\desktop.但是在用户锁定计算机或启动屏幕保护程序后,它无法正常工作.

如果我在下面运行该过程winsta0\winlogon,SendInput()则无法正常工作winsta0\default.

2.我尝试过的

我已经尝试使用SetThreadDesktop()将进程从切换winsta0\desktopwinsta0\winlogon,但我收到错误170:"请求的资源正在使用中",我坚持了下来.

3.我想知道什么

我注意到TeamViewer有一个名为的进程TeamViewer_Desktop.exe,可以在Winlogon,Default和Screensaver下控制鼠标和键盘.它是如何做到的?

你能提供代码来帮助我理解如何解决我的问题吗?

我想知道**如何在默认桌面和Winlogon桌面之间切换应用程序.因此,我可以在安全的桌面上控制鼠标和键盘,而无需在其下创建另一个进程winlogon.exe.

c++ windows winlogon

10
推荐指数
1
解决办法
7894
查看次数

创建交互式登录会话

我正在尝试创建一个类似于微软废弃的超级快速用户切换器(下载)的实用程序,它允许快速用户切换而无需通过欢迎屏幕.

我有一个使用未记录的WinStationConnectWAPI(连同WTSEnumerateSessions)的工作实现,但它只能切换到已登录的用户.

如何创建登录会话以便切换到未登录的用户?
我只需要支持XP,虽然在Vista/Seven上工作会很好.(我目前的代码已经做了)

我知道这是可能的,因为Super Fast User Switcher可以做到这一点.(虽然它需要Windows服务才能完成)

我正在编写C#,但我可以将任何答案翻译成C#.

.net c# c++ session winlogon

8
推荐指数
1
解决办法
3365
查看次数

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

我想在预登录屏幕(用户通常输入用户名/密码的屏幕)上显示一个与用户交互的UI.
我读到Winlogon软件包的体系结构已经改变,在Windows 7中对我没用.我被推荐了使用WTS功能,但我仍然不清楚如何使用它们或哪些.

我已经创建了一个提供notepad.exe的服务(现在),但是当用户处于登录前屏幕时我需要触发此服务.我不确定是什么或如何实现它.

c# winlogon windows-7

7
推荐指数
1
解决办法
5523
查看次数

是否可以在Windows登录屏幕上显示我的窗口?

我正在编写一个服务/用户模式应用程序,可能会在一段可定制的不活动时间后将系统置于睡眠状态.用户模式过程可能需要在执行电源操作之前显示用户消息/警告.如果用户已登录,则此方法很有用,但如果工作站已锁定,则用户会看到如下显示:

在此输入图像描述

所以我很好奇是否可以在这样的登录屏幕上方显示我自己的窗口(叠加)?

c++ windows winapi winlogon

7
推荐指数
1
解决办法
1239
查看次数

LogonUser 可能太慢 - 寻找一种仅在本地对用户进行身份验证的方法,或减少中央验证超时

我无法快速找到对用户进行身份验证的方法。 当与域控制器的连接缓慢或不可用时,LogonUser需要几秒钟才能返回。

我使用 LOGON32_LOGON_NETWORK 作为登录类型,我读过它更快,但在这些情况下该函数仍然需要几秒钟才能返回。我认为这是在使用缓存凭据之前的服务器超时。

由于我不需要/不需要域验证:

  1. 在使用缓存的凭据之前,有什么方法可以减少超时?
  2. 有没有办法只在本地进行身份验证(根本不检查域控制器)?
  3. 是否有其他方法可以更快地对登录用户进行身份验证?

windows authentication winapi winlogon

5
推荐指数
0
解决办法
806
查看次数

如何在 C# 中创建自定义 Windows 登录屏幕?

我想在相对较新的 Windows 计算机(7、8 或 10)上实现自定义登录屏幕(使用自定义登录方法,例如指纹或其他方法)。

不知何故,我找不到这个主题的真实描述,我要么在 GINA (现在似乎已弃用),要么在这个(据说非常有用)链接:http ://msdn.microsoft.com/ en-us/magazine/cc163489.aspx只会引导我找到所有 MSDN 杂志的存档...

所有这些看起来都有点旧了,是不是有一些更新的东西?

更新:我查阅了 pGina,因为它在一个被标记为重复的问题中被建议。然而,在我看来,pGina 不支持将自定义 UI 添加到登录屏幕,这对我来说至关重要。另外,虽然我发现提到能够使用辅助信用提供商(https://github.com/pgina/pgina/issues/105),但我找不到关于如何实现的描述。

所以请证明我错了,或者只是给我指出一些其他资源!

提前致谢!

.net c# windows winlogon

5
推荐指数
1
解决办法
4043
查看次数

自定义 Windows 凭据提供程序 azure 广告

我创建了自己的实施ICredentialProviderICredentialProviderCredential适用于Windows的示例代码,这样我就可以用我自己的过程,在登录窗口REF

它适用于来自简单 Windows 用户帐户的凭据,但对于来自Azure Active Directory(Azure AD)相关用户的凭据,它不起作用。

是否可以将凭据直接移交给 azure ad 以登录 Windows?

或者有人知道我在哪里可以找到使用 azure 广告的自己的 Windows 凭据提供程序的示例代码或描述吗?

winlogon active-directory azure credential-providers

5
推荐指数
1
解决办法
600
查看次数

自定义 Windows 身份验证包的实现

我一直致力于为 Windows 10 实现自定义身份验证包。阅读以下 Windows 文档https://msdn.microsoft.com/en-us/library/windows/desktop/aa374731(v=vs.85).aspx #functions_implemented_by_authentication_packages 我实现了 auth 包所需的方法。我为 auth 包实现编写的代码:

    LSA_DISPATCH_TABLE DispatchTable;

NTSTATUS NTAPI
LsaApCallPackagePassthrough(IN PLSA_CLIENT_REQUEST ClientRequest,
    IN PVOID ProtocolSubmitBuffer,
    IN PVOID ClientBufferBase,
    IN ULONG SubmitBufferLength,
    OUT PVOID *ProtocolReturnBuffer,
    OUT PULONG ReturnBufferLength,
    OUT PNTSTATUS ProtocolStatus);
NTSTATUS NTAPI
LsaApCallPackage(
    IN PLSA_CLIENT_REQUEST ClientRequest,
    IN PVOID ProtocolSubmitBuffer,
    IN PVOID ClientBufferBase,
    IN ULONG SubmitBufferLength,
    OUT PVOID *ProtocolReturnBuffer,
    OUT PULONG ReturnBufferLength,
    OUT PNTSTATUS ProtocolStatus
);
NTSTATUS
NTAPI
LsaApCallPackageUntrusted(IN PLSA_CLIENT_REQUEST ClientRequest,
    IN PVOID ProtocolSubmitBuffer,
    IN PVOID ClientBufferBase,
    IN ULONG SubmitBufferLength,
    OUT PVOID *ProtocolReturnBuffer, …
Run Code Online (Sandbox Code Playgroud)

c winapi winlogon windows-authentication local-security-authority

5
推荐指数
0
解决办法
1090
查看次数