0

我一直致力于在 Windows 10 中引入我的自定义登录机制的 LSA auth 包。到目前为止,我已经成功注册了 auth 包并获得了 LSA 调用的 LsaLogonUserEx 方法。现在我遇到的问题是如何准备 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
);

特别是 Profile 缓冲区和 Token 信息。我应该只为它们分配内存还是需要正确确定那里的值然后分配它们?

4

1 回答 1

0

以下是文档中的全部内容,尽管如果您不习惯会有些复杂。

  • TokenInformation:您返回的结构类型由您自己设置的TokenInformationType参数确定。所以最后你决定你返回什么类型的结构。这是可能的类型和相关结构的列表。基本上,它要么是LSA_TOKEN_INFORMATION_V1要么LSA_TOKEN_INFORMATION_NULL

  • ProfileBuffer:请注意文档“此缓冲区的内容由身份验证包确定。”。所以你把你认为对你的提供者/身份验证有用的东西放在那里。只需确保(引用自文档)“身份验证包负责通过调用 AllocateClientBuffer 函数在客户端进程中分配 ProfileBuffer 缓冲区”。

通常,文档LsaApLogonUserEx文档说明了您(作为一个包)何时需要分配(或释放!)参数/内存以及 LSA 何时为您执行此操作。对于您特别关心的参数,它也这样做。

最后一点也是您需要使用AllocateClientBuffer函数作为ProfileBuffer参数的原因:以便 LSA 可以使用匹配的“空闲”函数而不破坏内存。

于 2018-06-20T06:09:28.383 回答