Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 自定义Windows身份验证包LsaApUserLogonEx的实现_C_Winapi_Windows Authentication_Winlogon_Local Security Authority - Fatal编程技术网

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

C 自定义Windows身份验证包LsaApUserLogonEx的实现,c,winapi,windows-authentication,winlogon,local-security-authority,C,Winapi,Windows Authentication,Winlogon,Local Security Authority,我一直在开发LSA auth软件包,以便在windows 10中引入我的自定义登录机制。到目前为止,我已经成功地注册了auth包,并获得了LSA调用的LsaLogonUserEx方法。现在我要做的是如何准备LsaApLogOnUser方法的OUT参数 NTSTATUS NTAPI LsaApLogonUserEx( IN PLSA_CLIENT_REQUEST ClientRequest, IN SECURITY_LOGON_TYPE LogonType, IN PVOID ProtocolSu

我一直在开发LSA auth软件包,以便在windows 10中引入我的自定义登录机制。到目前为止,我已经成功地注册了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
);

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

以下内容都在文档中,尽管如果您不习惯,可能会有点复杂

  • TokenInformation:返回的结构类型由TokenInformationType参数决定,您也可以自行设置该参数。因此,最终确定返回的结构类型。下面是一组可能的类型和相关结构。基本上,它是
    LSA\u令牌\u信息\u V1
    LSA\u令牌\u信息\u NULL

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

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


最后一点也是您需要为
ProfileBuffer
参数使用
AllocateClientBuffer
函数的原因:这样LSA就可以使用匹配的“free”函数而不会损坏内存。

您没有读过MSDN上的参数说明吗?配置文件缓冲区是您想要的,并且令牌必须是您在MSDN上看到的结构。@Anders我确实阅读了MSDN文档,但它只提供了这些参数的简要说明,没有提供有关这些结构内容的任何信息。比如,auth pack应该填充的这些缓冲区的内容是什么。这就是我最讨厌的。