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

时间:2018-06-18 18:47:12

标签: c winapi windows-authentication winlogon local-security-authority

我一直在研究LSA auth包,用于在Windows 10中引入我的自定义登录机制。到目前为止,我已经成功注册了auth包并获得了LSA调用的Lsa​​LogonUserEx方法。现在我坚持的是如何准备LsaApLogOnUser方法的OUT参数。

NTSTATUS NTAPI
LsaApLogonUserEx(
IN PLSA_CLIENT_REQUEST ClientRequest,
IN SECURITY_LOGON_TYPE LogonType,
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN ULONG SubmitBufferSize,
OUT PVOID *ProfileBuffer,
OUT PULONG ProfileBufferSize,
OUT PLUID LogonId,
OUT PNTSTATUS SubStatus,
OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
OUT PVOID *TokenInformation,
OUT PUNICODE_STRING *AccountName,
OUT PUNICODE_STRING *AuthenticatingAuthority,
OUT PUNICODE_STRING *MachineName
);

特别是配置文件缓冲区和令牌信息。我应该只为他们分配内存,还是需要正确确定值,然后分配它们?

1 个答案:

答案 0 :(得分:0)

以下是文档中的全部内容,但如果您不习惯的话,可能会有些困惑。

  • TokenInformation :您返回的结构类型由 TokenInformationType 参数确定,您也可以自行设置。因此,最后确定返回的结构类型。这是list种可能的类型和相关结构。基本上是LSA_TOKEN_INFORMATION_V1LSA_TOKEN_INFORMATION_NULL

  • ProfileBuffer :请注意文档“此缓冲区的内容由身份验证程序包确定。”。因此,您将任何您认为对提供者/身份验证有用的内容放入其中。只需确保(从文档中引用)“身份验证包负责通过调用AllocateClientBuffer函数在客户端进程内分配ProfileBuffer缓冲区”。

通常,LsaApLogonUserEx文档的文档会说明有关何时(作为软件包)何时需要分配(或免费!)参数/内存以及LSA何时为您执行操作的一些信息。对于您特别关注的参数,它也会这样做。

最后一点也是为什么需要对AllocateClientBuffer参数使用ProfileBuffer函数的原因:LSA可以使用匹配的“ free”函数而不破坏内存。