LSA_GET_CREDENTIALS回调函数 (ntsecpkg.h)

检索与登录会话关联的凭据。

较新的身份验证包(如 Kerberos)不使用此函数。

语法

LSA_GET_CREDENTIALS LsaGetCredentials;

NTSTATUS LsaGetCredentials(
  [in]      PLUID LogonId,
  [in]      ULONG AuthenticationPackage,
  [in, out] PULONG QueryContext,
  [in]      BOOLEAN RetrieveAllCredentials,
  [in, out] PLSA_STRING PrimaryKeyValue,
  [out]     PULONG PrimaryKeyLength,
  [out]     PLSA_STRING Credentials
)
{...}

参数

[in] LogonId

指向 LUID 结构的指针,该结构包含要从中检索凭据的登录会话的会话 ID。

[in] AuthenticationPackage

调用身份验证包的身份验证包 ID。 身份验证包应仅检索其自己的凭据。

[in, out] QueryContext

指向跨连续调用用于检索多个凭据的无符号 LONG 值的指针。 首次使用此函数时,此参数指向的值应为零。 此后,此值将更新,以允许在中断的位置继续检索。 因此,在检索到给定查询操作的所有凭据之前,不应更改此值。

[in] RetrieveAllCredentials

指示是应 (TRUE) 检索指定登录会话的所有凭据,还是仅检索与指定 PrimaryKeyValue 匹配的凭据 (FALSE) 。

[in, out] PrimaryKeyValue

此参数有两个用途。 如果 RetrieveAllCredentials 参数为 FALSE,则此字符串包含要用作主查找键的值。 在这种情况下,将仅检索属于正确登录会话且主查找键与此值匹配的凭据。

如果 RetrieveAllCredentialsTRUE,则忽略输入时此字符串的值,并且检索到的每个凭据的主查找键将在此字符串中返回。

[out] PrimaryKeyLength

如果 RetrieveAllCredentials 参数为 TRUE,则此参数接收存储 PrimaryKeyValue 字符串所需的长度。

[out] Credentials

指向接收检索到的凭据的缓冲区的指针。 每次调用仅检索一个凭据。 凭据在函数通过调用 AllocateLsaHeap 函数分配的缓冲区中返回。 调用方负责在不再需要 凭据 缓冲区时通过调用 FreeLsaHeap 来释放该缓冲区。

返回值

如果函数成功,该函数将返回 NTSTATUS 代码(STATUS_SUCCESS),指示已成功检索凭据。

如果函数失败,则返回值为 NTSTATUS 代码,可以是以下值之一或 LSA 策略函数返回值之一。

返回代码 说明
ERROR_GEN_FAILURE
不再有可用的凭据。 如果在第一次调用时返回此代码,则没有与选择条件匹配的凭据。
STATUS_MORE_ENTRIES
为接收 PrimaryKeyValue 而提供的字符串不够大,无法容纳数据。 在这种情况下,不会检索任何数据,并且不会修改 QueryContext 值。 这允许使用更大的字符串缓冲区再次进行相同的调用。
STATUS_NO_SUCH_LOGON_SESSION
找不到指定的登录会话。
 

LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 ntsecpkg.h

另请参阅

LSA_DISPATCH_TABLE

LSA_SECPKG_FUNCTION_TABLE