添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

SSPI 凭据管理功能提供用于访问主体的 凭据 句柄、对不透明安全对象的引用。 安全对象不透明,因为应用程序只能访问句柄,而不能访问结构的实际内容。

对凭据上下文内容的所有引用都通过对象的句柄和 安全包 取消引用句柄以访问凭据的具体信息。 凭据句柄是 {0x00000000、 0x00000000} 和 {0xFFFFFFFF, 0xFFFFFFFE} 之间的 64 位值。

应用程序使用凭据句柄和 上下文管理功能 来创建 安全上下文

凭据管理功能还释放凭据句柄并查询 凭据 的属性 。 目前,与凭据关联的名称是唯一可以查询的属性。

以下函数用于凭据管理。

上下文管理

SSPI 上下文管理功能创建和使用 安全上下文

在通信链接中,客户端和服务器合作创建共享安全上下文。 客户端和服务器都将安全上下文与 消息支持 函数结合使用,以确保连接期间的消息 完整性 隐私

安全上下文是不透明的安全对象。 安全上下文中的信息对应用程序不可用。 上下文管理功能创建和使用上下文句柄,安全包取消引用上下文句柄以访问其安全内容。

上下文句柄是 {0x00000000、 0x00000000} 和 {0xFFFFFFFF, 0xFFFFFFFE} 之间的 64 位值。

以下函数用于上下文管理。

SSPI 消息支持函数使应用程序能够传输和接收防篡改消息,以及加密和解密消息。 这些函数处理包含消息的一个或多个缓冲区,以及 上下文管理功能 创建 的安全上下文 。 函数的行为因连接、 数据报 还是流上下文正在使用而有所不同。 有关这些差异的说明,请参阅 SSPI 上下文语义

以下函数为消息提供安全支持。

由 SSP/AP 实现的函数

以下函数由 安全支持提供程序 / 身份验证包 中包含的 安全包 实现, (SSP/APS) 。

在下表中,第一组函数由 Windows XP SSP/AP 安全包实现。 第二组函数仅由 SSP/AP 安全包实现。

本地安全机构 (LSA) 通过使用 SSP/AP 的 SpLsaModeInitialize 函数提供的 SECPKG_FUNCTION_TABLE 结构来访问这些函数。

以下函数由所有身份验证包实现。

LsaApCallPackage 当与 LSA 建立受信任连接的登录应用程序调用 LsaCallAuthenticationPackage 函数并指定身份验证包的标识符时, 本地安全机构 (LSA) 调用。
LsaApCallPackagePassthrough 发送到 LsaCallAuthenticationPackage 函数的传递登录请求的调度函数。
LsaApCallPackageUntrusted 当与 LSA 建立不受信任的连接的应用程序调用 LsaCallAuthenticationPackage 函数并指定身份验证包的标识符时, 本地安全机构 (LSA) 调用。
LsaApInitializePackage 本地安全机构 在系统初始化期间 (LSA) 调用一次,以提供身份验证包初始化自身的机会。
LsaApLogonTerminated 用于在登录会话终止时通知身份验证包。 引用登录会话的最后一个令牌被删除时,登录会话将终止。
LsaApLogonUser 对用户的登录凭据进行身份验证。
LsaApLogonUserEx 对用户的登录凭据进行身份验证。
LsaApLogonUserEx2 用于对用户的初始登录尝试进行身份验证。 为用户建立新的登录会话,并返回用户的验证信息。

以下附加函数由 SSP/AP 安全包实现。

由用户模式 SSP/AP 实现的函数

以下函数由 安全支持提供程序 / 身份验证包 实现, (SSP/AP) ,这些包可以加载到客户端/服务器应用程序中。

SSP/AP 指示它在 SpInitLsaModeContext SpAcceptLsaModeContext 函数的 MappedContext 参数中返回 TRUE 来实现用户模式函数。 SpInitLsaModeContext 函数由传输级别应用程序的客户端使用,而 SpAcceptLsaModeContext 则由服务器端使用。

将 SSP/AP 加载到客户端进程或服务器进程由安全提供程序 DLL 处理,Security.dll或Secur32.dll。 安全提供程序 DLL 通过查找 SSP/AP 实现的 SpUserModeInitialize 函数的地址并调用它来加载 SSP/AP。 此函数返回一组表,其中包含指向每个 安全包 中实现的用户模式函数的指针。

将 SSP/AP 加载到客户端或服务器进程后, 本地安全机构 (LSA) 将复制 SpInitLsaModeContext SpAcceptLsaModeContext ) 返回的安全上下文 (信息,并调用安全包的 SpInitUserModeContext 函数。

客户端/服务器应用程序通过调用 安全支持提供程序接口 (SSPI) 函数来访问用户模式功能。 SSPI 函数通过使用包提供的 SECPKG_USER_FUNCTION_TABLE 由安全提供程序 DLL 映射。

SpUserModeInitialize 安全支持提供程序 / 身份验证包 (SSP/AP) DLL 加载到客户端/服务器应用程序的进程空间时调用。 此函数为 SSP/AP DLL 中的每个 安全包 提供 SECPKG_USER_FUNCTION_TABLE 表。
SpVerifySignature 根据 签名 验证收到的消息是否正确。
实现 SSPI VerifySignature 函数。

SSP/APS 调用的 LSA 函数

本地安全机构 (LSA) 为 安全支持提供程序 / 身份验证包 中部署 的安全包 提供了以下功能, (SSP/APS) 。 这些函数在 LSA_SECPKG_FUNCTION_TABLE 结构中可用,可以在 SSP/AP 加载到 LSA 的进程空间中时调用。 以下函数适用于所有 AP。

WlxNegotiate WlxNegotiate 函数必须由替换 GINA DLL 实现。 这是 Winlogon 对 GINA DLL 进行的第一次调用。 WlxNegotiate 允许 GINA 验证它是否支持已安装的 Winlogon 版本。
WlxNetworkProviderLoad Winlogon 调用此函数来收集有效的身份验证和标识信息。
WlxRemoveStatusMessage Winlogon 调用此函数,告知 GINA DLL 停止显示状态消息。
WlxScreenSaverNotify Winlogon 在激活屏幕保存程序之前立即调用此函数,使 GINA 能够与屏幕保存程序进行交互。
WlxShutdown Winlogon 在关闭之前调用此函数,允许 GINA 执行任何关闭任务,例如从 读取器 弹出 智能卡
WlxStartApplication 当系统需要在用户的 上下文 中启动应用程序时, Winlogon 将调用此函数。
WlxWkstaLockedSAS Winlogon 在收到 安全关注序列 (SAS) 且工作站处于锁定状态时调用此函数。

登录用户函数

以下函数提供登录用户的功能。

WlxQueryClientCredentials 如果启用了终端服务,则由替换 GINA DLL 调用。 GINA 调用此函数以检索不使用 Internet 连接器许可证的远程终端服务客户端的凭据。
WlxQueryConsoleSwitchCredentials GINA 调用以读取从临时会话的 Winlogon 传输到目标会话的 Winlogon 的凭据。
WlxQueryInetConnectorCredentials 如果启用了终端服务,则由替换 GINA DLL 调用。 GINA 调用此函数以确定终端服务器是否使用 Internet 连接器许可和检索 凭据 信息。
WlxQueryTerminalServicesData GINA 调用,以在用户登录后检索终端服务用户配置信息。
WlxSasNotify GINA 调用以通知 Winlogon (SAS) 事件 的安全关注序列
WlxSetContextPointer GINA 调用,以指定 Winlogon 传递的 上下文 指针作为对 GINA 函数的所有未来调用的第一个参数。
WlxSetOption GINA 调用以设置选项的值。
WlxSetReturnDesktop GINA 调用以指定 Winlogon 将在当前 安全关注序列 (SAS) 事件处理函数完成时切换到的备用应用程序桌面。
WlxSetTimeout GINA 调用以更改与对话框关联的超时。 默认超时为两分钟。
WlxSwitchDesktopToUser GINA 调用以切换到应用程序桌面。
WlxSwitchDesktopToWinlogon 允许 GINA DLL 切换到 Winlogon 桌面。
WlxUseCtrlAltDel GINA 调用,告知 Winlogon 使用标准 CTRL+ALT+DEL 键组合作为 安全关注序列 , (SAS) 。
WlxWin31Migrate 如果启用了终端服务,则由替换 GINA DLL 调用。 GINA 调用此函数以完成终端服务客户端的设置。

网络提供程序函数

以下主题提供网络提供程序函数的参考信息。

AddConnectNotify 每次添加连接操作前后调用 ( WNetAddConnection WNetAddConnection2 WNetAddConnection3 ) 。
CancelConnectNotify 每次取消连接操作前后调用 ( WNetCancelConnection WNetCancelConnection2 ) 。

LSA 登录函数

以下 本地安全机构 (LSA) 身份验证功能对用户进行身份验证和登录,并提供登录会话信息。

LsaApCallPackage 使用受信任的连接的应用程序在调用 LsaCallAuthenticationPackage 时调用身份验证包的标识符时调用。
此函数提供登录应用程序直接与身份验证包通信的方法。
LsaApCallPackagePassthrough 在调用 LsaCallAuthenticationPackage 以获取直通登录请求时调用身份验证包的标识符时调用。
LsaApCallPackageUntrusted 使用不受信任的连接的应用程序在调用 LsaCallAuthenticationPackage 时调用身份验证包的标识符时调用。 此函数用于与没有 SeTcbPrivilege 权限的进程通信。
LsaApInitializePackage 在系统初始化期间调用,以允许身份验证包执行初始化任务。
LsaApLogonTerminated 登录会话结束时调用,以允许身份验证包释放为登录会话分配的任何资源。
LsaApLogonUser 在调用 LsaLogonUser 时指定身份验证包时调用。 此函数对 安全主体的 登录数据进行身份验证。
LsaApLogonUserEx LsaApLogonUser 相同,但出于审核目的,它返回工作站名称。
身份验证包可以实现 LsaApLogonUser LsaApLogonUserEx LsaApLogonUserEx2 。 它不需要全部实现。
LsaApLogonUserEx2 LsaApLogonUserEx 相同,只不过它返回安全主体的主要凭据和补充凭据。 身份验证包可以实现 LsaApLogonUser LsaApLogonUserEx LsaApLogonUserEx2 。 它不需要全部实现。

身份验证包调用的 LSA 函数

可以从自定义身份验证包调用以下 本地安全机构 (LSA) 函数。 当 LSA 调用 LsaApInitializePackage 以初始化包时,它将传递支持函数表。

CredUIConfirmCredentials 确认 CredUIPromptForCredentials CredUICmdLinePromptForCredentials 返回的凭据的有效性。
CredUIParseUserName 从完全限定的用户名中提取域和用户帐户名称。
CredUIPromptForCredentials 显示一个对话框,该对话框接受来自用户的凭据信息。
CredUIPromptForWindowsCredentials 创建并显示一个可配置的对话框,该对话框允许用户使用本地计算机上安装的任何凭据提供程序提供凭据信息。
CredUIReadSSOCredW 检索单个登录凭据的用户名。
CredUIStoreSSOCredW 存储单个登录凭据。

低级别凭据管理功能

下面是低级别凭据管理功能。

CredUnPackAuthenticationBuffer 将调用 CredUIPromptForWindowsCredentials 函数返回的身份验证缓冲区转换为字符串用户名和密码。
CredUnprotect 解密以前使用 CredProtect 函数加密的凭据。
CredWrite 创建新的凭据或修改用户凭据集中的现有凭据。
CredWriteDomainCredentials 将域凭据写入到用户的凭据集。

凭据管理通知函数

以下函数由凭据管理器实现,用于在身份验证信息更改时接收通知。

SaslAcceptSecurityContext 包装对 SSPI AcceptSecurityContext (常规) 函数的标准调用,包括创建 SASL 服务器 Cookie。 SaslEnumerateProfiles 列出提供 SASL 接口的包。 SaslGetContextOption 检索指定 SASL 上下文的指定属性。 SaslGetProfilePackage 返回指定包的包信息。 SaslIdentifyPackage 返回与指定的 SASL 协商缓冲区匹配的协商前缀。 SaslInitializeSecurityContext 包装对 SSPI InitializeSecurityContext 的标准调用 (常规) 函数并从服务器处理 SASL 服务器 Cookie。 SaslSetContextOption 设置指定 SASL 上下文的指定属性的值。

下面是用于身份验证的其他函数。

SspiIsPromptingNeeded 指示在调用 InitializeSecurityContext AcceptSecurityContext 函数后返回的错误是否需要对 SspiPromptForCredentials 函数进行额外的调用。
SspiLocalFree 释放与指定缓冲区关联的内存。
SspiMarshalAuthIdentity 将指定的标识结构序列化为字节数组。
SspiPrepareForCredRead 从指定的标识结构生成目标名称和凭据类型。
SspiPrepareForCredWrite 从标识结构中生成值,该结构可作为参数值传递给 CredWrite 函数中的参数值。
SspiPromptForCredentials 允许 安全支持提供程序接口 (SSPI) 应用程序提示用户输入凭据。
SspiUnmarshalAuthIdentity 将指定的字节值数组反序列化为标识结构。
SspiUnmarshalCredUIContext 在上一次调用 ICredentialProvider::SetSerialization 方法期间,反序列化凭据提供程序获取的凭据信息。
SspiUpdateCredentials 更新与指定上下文关联的凭据。
SspiValidateAuthIdentity 指示指定的标识结构是否有效。
SspiZeroAuthIdentity 用零填充与指定标识结构关联的内存块。
WlxQueryTsLogonCredentials 如果启用了终端服务,则由替换 GINA DLL 调用以检索 凭据 信息。 然后,GINA DLL 可以使用此信息自动填写登录框,并尝试登录用户。