身份验证函数

身份验证函数根据使用情况进行分类,如下所示:

SSPI 函数

安全支持提供程序接口 (SSPI) 函数分为以下主要类别。

包管理

SSPI 包管理功能启动 安全包,枚举可用包,并查询安全包的属性。 以下 SSPI 函数为安全包提供管理服务。

函数 说明
EnumerateSecurityPackages 列出可用的安全包及其功能。
InitSecurityInterface 检索指向安全支持提供程序 (SSP) 调度表的指针。
QuerySecurityPackageInfo 检索有关指定 安全包的信息。 此信息包括身份验证信息、 凭据和上下文的大小限制。

凭据管理

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

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

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

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

以下函数用于凭据管理。

函数 说明
AcquireCredentialsHandle (General) 获取指定主体的预先存在凭据的句柄。
ExportSecurityContext 将安全上下文导出到上下文缓冲区中。
FreeCredentialsHandle 释放凭据句柄和关联的资源。
ImportSecurityContext 使用 ExportSecurityContext 导出的安全上下文导入当前进程。
QueryCredentialsAttributes 检索凭据的属性,例如与凭据关联的名称。

上下文管理

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

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

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

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

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

函数 说明
AcceptSecurityContext (常规) 由服务器用来基于从客户端收到的不透明消息创建 安全上下文
ApplyControlToken 将补充安全消息应用于现有安全上下文。
CompleteAuthToken 完成身份验证令牌。 此函数由协议(如 DCE)使用,这些协议需要在传输应用程序更新某些消息参数后修改安全信息。
DeleteSecurityContext 释放安全上下文和关联的资源。
FreeContextBuffer 释放由安全包分配的内存缓冲区。
ImpersonateSecurityContext 模拟安全上下文,以在系统中显示为客户端。
InitializeSecurityContext (常规) 由客户端通过生成要传递给服务器的不透明消息来启动安全上下文。
QueryContextAttributes (常规) 使传输应用程序能够查询安全上下文的某些属性的安全包。
QuerySecurityContextToken 获取客户端安全上下文的访问令牌并直接使用它。
SetContextAttributes 允许传输应用程序为安全包设置安全上下文的属性。 只有 Schannel 安全包支持此函数。
RevertSecurityContext 允许 安全包 停止模拟调用方并还原其自己的 安全上下文

消息支持

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

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

函数 说明
DecryptMessage (常规) 使用安全上下文中的会话密钥解密加密的消息。
EncryptMessage (常规) 使用安全上下文中的会话密钥加密消息。
MakeSignature 生成消息的加密校验和,还包含防止消息丢失或插入的排序信息。
VerifySignature 验证使用 MakeSignature 函数由发件人签名的邮件的签名。

由 SSP/AP 实现的函数

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

在下表中,第一组函数由 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 安全包实现。

函数 说明
SpAcceptCredentials 本地安全机构 (LSA) 调用,以向安全包传递为经过身份验证的安全主体存储的任何凭据
SpAcceptLsaModeContext 服务器调度函数,用于创建由服务器和客户端共享 的安全上下文
SpAcquireCredentialsHandle 调用以获取主体 凭据的句柄。
SpAddCredentials 用于添加安全主体凭据
SpApplyControlToken 将控制令牌应用于 安全上下文本地安全机构 (LSA) 当前不调用此函数。
SpDeleteContext 删除 安全上下文
SpDeleteCredentials 安全包的主凭据补充凭据列表中删除凭据。
SpFreeCredentialsHandle 释放通过调用 SpAcquireCredentialsHandle 函数获取的凭据
SpGetCredentials 检索用户凭据。
SpGetExtendedInformation 提供有关 安全包的扩展信息。
SpGetInfo 提供有关 安全包的一般信息,例如其名称和功能。
SpGetUserInfo 检索有关登录 会话的信息。
SPInitialize 本地安全机构 (LSA) 调用一次,以提供包含常规安全信息和支持功能的调度表的安全
SpInitLsaModeContext 用于在服务器和客户端之间建立 安全上下文 的客户端调度函数。
SpQueryContextAttributes 检索 安全上下文的属性。
SpQueryCredentialsAttributes 检索 凭据的属性。
SpSaveCredentials 补充凭据 保存到用户对象。
SpSetExtendedInformation 设置有关 安全包的扩展信息。
SpShutdown 在卸载 SSP/AP 之前执行所需的任何清理。
SslCrackCertificate 返回一个 X509Certificate 结构,其中包含指定证书 BLOB 中包含的信息。
SslEmptyCache 从 Schannel 缓存中删除指定的字符串。
SslFreeCertificate 释放先前调用 SslCrackCertificate 函数时分配的证书。

用户模式 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) 函数来访问用户模式功能。 安全提供程序 DLL 使用包提供的 SECPKG_USER_FUNCTION_TABLE 映射 SSPI 函数。

函数 说明
SpCompleteAuthToken 完成身份验证令牌。
实现 SSPI CompleteAuthToken 函数。
SpDeleteContext 删除 安全上下文
实现 SSPI DeleteSecurityContext 函数。
SpExportSecurityContext 将安全上下文导出到另一个进程。
实现 SSPI ExportSecurityContext 函数。
SpFormatCredentials 设置要存储在用户对象中的 凭据 的格式。
SpGetContextToken 获取要模拟的令牌。
由 SSPI ImpersonateSecurityContext 函数使用。
SpImportSecurityContext 从另一个进程导入安全上下文。
实现 SSPI ImportSecurityContext 函数。
SpInitUserModeContext 从打包的本地安全机构 (LSA) 模式上下文创建用户模式安全上下文。
SpInstanceInit 初始化 SSP/AP 中的用户模式安全包。
SpMakeSignature 基于指定的消息和安全上下文生成签名
实现 SSPI MakeSignature 函数。
SpMarshallSupplementalCreds 补充凭据 从公共格式转换为适合本地过程调用的格式。
SpQueryContextAttributes 检索 安全上下文的属性。
实现 SSPI QueryContextAttributes (General) 函数。
SpSealMessage 加密在客户端和服务器之间交换的消息。
实现 SSPI EncryptMessage (General) 函数。
SpUnsealMessage 解密以前使用 SpSealMessage 函数加密的消息。
实现 SSPI DecryptMessage (General) 函数。
SpUserModeInitialize 安全支持提供程序/身份验证包 (SSP/AP) DLL 加载到客户端/服务器应用程序的进程空间时调用。 此函数为 SSP/AP DLL 中的每个安全包提供SECPKG_USER_FUNCTION_TABLE表。
SpVerifySignature 根据 签名验证收到的消息是否正确。
实现 SSPI VerifySignature 函数。

由 SSP/AP 调用的 LSA 函数

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

函数 说明
AddCredential 添加用户 凭据
AllocateClientBuffer 在包的客户端的地址空间中分配内存。
AllocateLsaHeap 在堆上分配内存。 传递回 LSA 的某些信息应使用此函数进行分配。
CopyFromClientBuffer 将客户端进程的地址空间中的信息复制到当前进程中的缓冲区中。
CopyToClientBuffer 将当前进程中的缓冲区中的信息复制到客户端进程的地址空间中。
CreateLogonSession 创建登录会话。
DeleteCredential 删除用户凭据。
DeleteLogonSession 删除 LSA 登录会话。
FreeClientBuffer 释放包客户端的地址空间中的内存。
FreeLsaHeap 解除分配以前由 AllocateLsaHeap 分配的堆内存。
GetCredentials 检索与登录会话关联的凭据。

SSP/AP 可以使用以下函数。

函数 说明
AllocateSharedMemory 分配共享内存的一部分。
AuditAccountLogon 为尝试的登录创建审核记录。
AuditLogon 为登录会话创建审核线索。
CallPackage 调用包。
CallPackageEx 调用另一个包。
CallPackagePassthrough 从另一个安全包调用一个安全包。
CancelNotification 取消特殊事件的通知。
ClientCallback 允许安全包在客户端进程中调用函数。
有关 ClientCallback 函数原型,请参阅 ClientCallback 函数原型
CloseSamUser 关闭安全帐户管理器数据库条目的句柄。
ConvertAuthDataToToken 将授权数据转换为用户令牌。
CrackSingleName 将名称从一种格式转换为另一种格式。
CreateSharedMemory 创建客户端与 SSP/AP 之间共享的内存部分。
CreateThread 创建新线程。
CreateToken 创建令牌。
DeleteSharedMemory 删除共享内存的一部分。
DuplicateHandle 复制句柄。
FreeReturnBuffer 释放 LSA 分配的缓冲区。
FreeSharedMemory 释放共享内存的一部分。
GetAuthDataForUser 检索用户帐户的授权数据。
GetCallInfo 检索有关最近函数调用的信息。
GetClientInfo 检索有关安全包的用户进程的信息。
GetUserAuthData 返回用户的授权数据。
GetUserCredentials 尚未实现。
ImpersonateClient 安全包 调用以模拟包用户。
MapBuffer SecBuffer 结构映射到 安全支持提供程序/身份验证包 (SSP/AP) 的地址空间。
OpenSamUser 检索 安全帐户管理器 (SAM) 数据库中用户帐户的句柄。
RegisterNotification 提供一种机制,用于通知 安全包 。 通知可以固定的时间间隔发生,当事件对象被发出信号时,或者在某些系统事件期间发生。
SaveSupplementalCredentials 已过时。 请勿使用。
UnloadPackage (SSP/AP) 卸载 安全支持提供程序/身份验证包
UpdateCredentials 为一个安全包提供一种机制,以通知其他包登录会话凭据已更改。

由用户模式 SSP/AP 调用的 LSA 函数

安全支持提供程序/身份验证包 ( SSP/AP) 在用户模式进程中执行的安全包可以使用SECPKG_DLL_FUNCTIONS表中的指针来访问以下函数。

函数 PSDK 状态
AllocateHeap 为返回给 本地安全机构 (LSA) 的缓冲区分配内存。
FreeHeap 释放以前使用 AllocateHeap 分配的内存。
RegisterCallback 注册用户模式回调函数。

GINA 导出函数

GINA DLL 必须导出以下函数。

注意

在 Windows Vista 中忽略 GINA DLL。

函数 说明
WlxActivateUserShell 激活用户 shell 程序。
WlxDisplayLockedNotice 允许 GINA 显示有关锁的信息,例如锁定工作站的人员以及锁定时间。
WlxDisplaySASNotice Winlogon 在没有用户登录时调用此函数。
WlxDisplayStatusMessage 当 GINA DLL 应显示消息时,Winlogon 调用此函数。
WlxGetConsoleSwitchCredentials Winlogon 调用此函数来读取当前登录的用户凭据,以透明方式将其传输到目标会话。
WlxGetStatusMessage Winlogon 调用此函数以获取 GINA DLL 显示的状态消息。
WlxInitialize Winlogon 在计算机上存在的每个窗口工作站调用一次此函数。 目前,操作系统支持每个工作站一个窗口工作站。
WlxIsLockOk Winlogon 在尝试锁定工作站之前调用此函数。
WlxIsLogoffOk 当用户启动注销操作时,Winlogon 会调用此函数。
WlxLoggedOnSAS Winlogon 在用户登录且工作站未锁定时收到 安全关注序列 (SAS) 事件时调用此函数。
WlxLoggedOutSAS Winlogon 在没有用户登录时收到 安全关注序列 (SAS) 事件时调用此函数。
WlxLogoff Winlogon 调用此函数以通知 GINA 此工作站上的注销操作,从而允许 GINA 执行可能需要的任何注销操作。
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) 且工作站被锁定时调用此函数。

登录用户函数

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

函数 说明
LogonUser 尝试将用户登录到本地计算机。
LogonUserEx 尝试将用户登录到本地计算机。 此函数是 LogonUser 函数的扩展版本,检索有关登录用户 的安全标识符 的信息 (SID) 、配置文件和配额限制。
LogonUserExExW LogonUserExExW 函数尝试将用户登录到本地计算机。 此函数未在公共标头中声明,并且没有关联的导入库。 必须使用 LoadLibraryGetProcAddress 函数动态链接到 Advapi32.dll。

Winlogon 支持函数

吉娜 DLL 可以调用以下 Winlogon 支持函数。

注意

在 Windows Vista 中忽略 GINA DLL。

函数 由 GINA 调用
WlxAssignShellProtection GINA 调用,以向新登录用户的 shell 程序分配保护。
WlxChangePasswordNotify GINA 调用以指示它已更改密码。
WlxChangePasswordNotifyEx GINA 调用,以告知特定网络提供商 (或所有网络提供商) 密码已更改。
WlxCloseUserDesktop GINA 调用以关闭备用用户桌面并在关闭桌面后进行清理。
WlxCreateUserDesktop GINA 调用,为用户创建备用应用程序桌面。
WlxDialogBox GINA 调用以从对话框模板创建模式对话框。
WlxDialogBoxIndirect GINA 调用以从内存中的对话框模板创建模式对话框。
WlxDialogBoxIndirectParam GINA 调用以初始化对话框控件,然后从内存中的对话框模板创建模式对话框。
WlxDialogBoxParam GINA 调用以初始化对话框控件,然后从对话框模板资源创建模式对话框。
WlxDisconnect 如果启用了终端服务,则由替换 GINA DLL 调用。 GINA 调用此函数以断开与终端服务网络会话的连接。
WlxGetOption GINA 调用以检索选项的当前值。
WlxGetSourceDesktop GINA 调用,以确定 在 Winlogon 切换到 Winlogon 桌面之前当前桌面的名称和句柄。
WlxMessageBox GINA 调用以创建、显示和操作消息框。
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 调用,以指定当当前安全关注序列 (SAS) 事件处理函数完成时,Winlogon 将切换到的备用应用程序桌面。
WlxSetTimeout GINA 调用以更改与对话框关联的超时。 默认超时为两分钟。
WlxSwitchDesktopToUser GINA 调用以切换到应用程序桌面。
WlxSwitchDesktopToWinlogon 允许 GINA DLL 切换到 Winlogon 桌面。
WlxUseCtrlAltDel GINA 调用,以告知 Winlogon 使用标准 CTRL+ALT+DEL 组合键作为 SAS) (安全注意序列
WlxWin31Migrate 如果启用了终端服务,则由替换 GINA DLL 调用。 GINA 调用此函数以完成终端服务客户端的设置。

网络提供程序函数

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

主题 说明
网络提供商实现的函数 可由网络提供商实现的详细信息函数。
支持函数 详细说明了由操作系统实现且可由网络提供程序调用的函数。
连接通知函数 在连接或断开连接网络资源时,需要从 多提供程序路由器 (MPR) 接收通知的应用程序实现的详细信息。

网络提供商实现的函数

网络提供商可以实现以下函数。 网络提供程序需要支持的唯一功能是 NPGetCaps

函数 说明
NPAddConnection 将本地设备连接到网络资源。
NPAddConnection3 将本地设备连接到网络资源。
NPCancelConnection 断开网络连接的连接。
NPCloseEnum 关闭枚举。
NPDeviceMode 指定设备的父窗口。 此窗口拥有源自设备的任何对话框。
NPDirectoryNotify 通知网络提供商某些目录操作。
NPEnumResource 根据 NPOpenEnum 返回的句柄执行枚举。
NPFormatNetworkName 以特定于提供程序的格式设置网络名称的格式,以便在控件中显示。
NPGetCaps 返回有关网络上支持哪些服务的信息。
NPGetConnection 检索有关连接的信息。
NPGetConnection3 检索有关网络连接的信息,即使它当前已断开连接。
NPGetConnectionPerformance 返回有关用于访问网络资源的连接的预期性能的信息。 请求只能针对当前连接的网络资源。
NPGetDirectoryType 确定网络目录的类型。
NPGetPropertyText 检索要添加到网络资源的属性对话框的按钮的名称。
NPGetResourceInformation 将通过 WNet API 访问的网络资源部分与通过特定于资源类型的 API 访问的部分分开。
NPGetResourceParent 检索浏览层次结构中指定网络资源的父级。
NPGetUniversalName 检索网络资源的通用名称。 NPGetUniversalName 函数可以以 UNC 格式或较旧的远程名称格式检索此通用名称。
NPGetUser 检索当前默认用户名或用于建立网络连接的用户名的值。
NPOpenEnum 打开网络资源或现有连接的枚举。 必须调用 NPOpenEnum 函数才能获取枚举的有效句柄。
NPPropertyDialog 当用户单击使用 NPPropertyDialog 函数添加的按钮时调用。 NPPropertyDialog 函数仅针对文件和目录网络属性调用。
NPSearchDialog 使网络供应商能够提供自己的浏览和搜索形式,这超出了 “连接 ”对话框中显示的分层视图。

支持函数

以下函数由操作系统实现,可由网络提供程序调用。

函数 说明
WNetSetLastError 设置扩展的错误信息。 网络提供商应调用此函数,而不是 SetLastError

连接通知函数

以下函数由需要在网络资源连接或断开连接时从 多提供程序路由器 接收通知 (MPR) 的应用程序实现。 有关如何编写接收此类通知的应用程序的详细信息,请参阅 接收连接通知

函数 说明
AddConnectNotify 在每次添加连接操作之前和之后调用 (WNetAddConnectionWNetAddConnection2WNetAddConnection3) 。
CancelConnectNotify 在每个取消连接操作之前和之后调用 (WNetCancelConnectionWNetCancelConnection2) 。

LSA 登录函数

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

函数 说明
LsaCallAuthenticationPackage 从身份验证包请求包特定的服务。
LsaConnectUntrusted 与 LSA 建立不受信任的连接。
LsaDeregisterLogonProcess 断开与 LSA 的连接,并释放分配给调用方上下文的资源。
LsaEnumerateLogonSessions 检索现有登录会话的 本地唯一标识符 (LUID) 。
LsaFreeReturnBuffer 释放为返回到调用方的缓冲区分配的内存。
LsaGetLogonSessionData 检索有关指定登录会话的信息。
LsaLogonUser 根据存储的凭据对用户登录数据进行身份验证。 如果成功,它将创建新的登录会话并返回用户令牌。
LsaLookupAuthenticationPackage 获取身份验证包的唯一标识符。
LsaQueryDomainInformationPolicy Policy 对象检索域信息。
LsaQueryForestTrustInformation 检索指定 本地安全机构TrustedDomain 对象的林信任信息。
LsaRegisterLogonProcess 建立与 LSA 服务器的连接,并验证调用方是否为登录应用程序。
LsaSetDomainInformationPolicy 将域信息设置为 Policy 对象。
LsaSetForestTrustInformation 设置指定 本地安全机构TrustedDomain 对象的林信任信息。

由身份验证包实现的函数

自定义身份验证包必须实现这些函数,这些函数由 本地安全机构 (LSA) 调用。 这些功能由 Microsoft 提供的 MSV1_0 和 Kerberos 身份验证包实现。

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

由身份验证包调用的 LSA 函数

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

函数 说明
AddCredential 将凭据添加到登录会话。
AllocateClientBuffer 在客户端的地址空间中分配缓冲区。
AllocateLsaHeap 将必须从身份验证包返回的缓冲区分配给 LSA。
CopyFromClientBuffer 将客户端地址空间中缓冲区的内容复制到本地缓冲区中。
CopyToClientBuffer 将本地缓冲区的内容复制到客户端的地址空间中。
CreateLogonSession 由身份验证包用于创建登录会话。
DeleteCredential 删除现有凭据。
DeleteLogonSession 清理在确定用户的身份验证信息是否合法时创建的任何登录会话。
FreeClientBuffer 释放以前使用 AllocateClientBuffer 函数分配的客户端缓冲区。
FreeLsaHeap 释放以前使用 AllocateLsaHeap 函数分配的缓冲区。
GetCredentials 检索以前由 AddCredential 缓存的凭据。

子身份验证函数

Microsoft 提供的身份验证包可以调用以下子身份验证函数,以提供用户创建的其他登录身份验证。

函数 说明
Msv1_0SubAuthenticationFilter 执行特定于域控制器的用户登录身份验证。
Msv1_0SubAuthenticationRoutine 执行特定于客户端/服务器的身份验证。

凭据管理功能

以下主题提供了凭据管理功能的参考信息。

主题 说明
凭据管理 UI 函数 用于凭据管理 UI 的详细信息函数。
低级别凭据管理功能 用于低级别凭据管理的详细信息函数。
凭据管理通知函数 凭据管理器实现的在身份验证信息更改时接收通知的详细信息函数。

凭据管理 UI 函数

下面是凭据管理 UI 函数。

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

低级别凭据管理功能

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

函数 说明
CredDelete 从用户的凭据集中删除凭据。
CredEnumerate 列出用户凭据集中的凭据。
CredFindBestCredential 凭据管理 (CredMan) 数据库中搜索与当前登录会话关联且与指定目标资源最匹配的一组通用凭据。
CredFree 释放用于任何凭据管理功能返回的缓冲区的内存。
CredGetSessionTypes 检索当前登录会话支持的最大持久性。
CredGetTargetInfo 检索命名资源的所有已知目标名称信息。
CredIsMarshaledCredential 确定指定的用户名字符串是否是以前由 CredMarshalCredential 封送的封送凭据。
CredIsProtected 指定指定的凭据是否通过对 CredProtect 函数的先前调用进行加密。
CredMarshalCredential 将凭据转换为文本字符串。
CredPackAuthenticationBuffer 将字符串用户名和密码转换为身份验证缓冲区。
CredProtect 加密指定的凭据,以便只有当前安全上下文才能解密它们。
CredRead 从用户的凭据集读取凭据。
CredReadDomainCredentials 从用户的凭据集中读取域凭据。
CredRename 从用户的凭据集中重命名凭据。
CredUnmarshalCredential 将封送凭据字符串转换回其非封送形式。
CredUnPackAuthenticationBuffer 将调用 CredUIPromptForWindowsCredentials 函数返回的身份验证缓冲区转换为字符串用户名和密码。
CredUnprotect 解密以前使用 CredProtect 函数加密的凭据。
CredWrite 创建新凭据或修改用户凭据集中的现有凭据。
CredWriteDomainCredentials 将域凭据写入用户凭据集。

凭据管理通知函数

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

函数 说明
NPLogonNotify MPR 调用此函数以通知凭据管理器发生了登录事件,从而允许凭据管理器返回登录脚本。
NPPasswordChangeNotify MPR 调用此函数以通知凭据管理器密码更改事件。

智能卡函数

智能卡 SDK 提供以下功能。

函数 说明
GetOpenCardName 替换为 SCardUIDlgSelectCard,它显示智能卡选择卡片对话框。
SCardAccessStartedEvent 获取智能卡资源管理器启动信号时的事件句柄。
SCardAddReaderToGroup 读取器 添加到读取器组。
SCardAudit 将事件消息写入 Windows 应用程序日志 Microsoft-Windows-SmartCard-Audit/Authentication。
SCardBeginTransaction 启动 事务
SCardCancel 终止 上下文中所有未完成的操作。
SCardCancelTransaction 保留供将来使用。
SCardConnect 在调用应用程序和智能卡之间建立连接。
SCardControl 在调用 SCardConnect 后获取对读取器的直接控制。
SCardDisconnect 终止调用应用程序和智能卡之间的连接。
SCardEndTransaction 完成 事务
SCardEstablishContext 建立用于访问智能卡数据库的资源管理器上下文
SCardForgetCardType 从智能卡子系统中删除以前定义的智能卡
SCardForgetReader 从智能卡子系统中删除以前定义的读取器。
SCardForgetReaderGroup 从智能卡子系统中删除以前定义的读取器组。
SCardFreeMemory 释放资源管理器分配的内存。
SCardGetAttrib 从给定的读取器、驱动程序或智能卡获取当前读取器的属性。
SCardGetCardTypeProviderName 获取给定卡名称和提供程序类型的提供程序名称。
SCardGetDeviceTypeId 获取给定读取器名称卡读取器的设备类型标识符。 此函数不会影响读取器的状态。
SCardGetProviderId 获取智能卡的主要服务提供商的标识符 (GUID) 。
SCardGetReaderDeviceInstanceId 获取给定读取器名称卡读取器的设备实例标识符。 此函数不会影响读取器的状态。
SCardGetReaderIcon 获取给定读取者名称的智能卡读取器的图标。
SCardGetStatusChange 阻止执行,直到读取器的状态发生更改。
SCardGetTransmitCount 检索自插入指定卡读取器以来已完成的传输操作数。
SCardIntroduceCardType 向智能卡子系统引入新的智能卡
SCardIntroduceReader 向智能卡子系统引入新的读取器。
SCardIntroduceReaderGroup 向智能卡子系统引入新的读取器组。
SCardIsValidContext 验证智能卡上下文句柄。
SCardListCards 提供已引入子系统的智能卡列表。
SCardListInterfaces 提供给定智能卡提供的接口列表。
SCardListReaderGroups 提供已引入子系统的读取器组的列表。
SCardListReaders 提供已引入子系统的读取器列表。
SCardListReadersWithDeviceInstanceId 获取已提供设备实例标识符的读取器列表。 此函数不会影响读取器的状态。
SCardLocateCards 查找与给定 ATR 字符串匹配的卡。
SCardLocateCardsByATR 查找与给定 ATR 字符串匹配的卡。
SCardReadCache 智能卡资源管理器维护的全局缓存中检索名称/值对的值部分。
SCardReconnect 重新建立从调用应用程序到智能卡的现有连接。
SCardReleaseContext 关闭已建立的 资源管理器上下文
SCardReleaseStartedEvent 递减使用 SCardAccessStartedEvent 函数获取的句柄的引用计数。
SCardRemoveReaderFromGroup 从现有读取器组中删除读取器。
SCardSetAttrib 设置给定的读取器属性。
SCardSetCardTypeProviderName 设置卡名称和提供程序类型的提供程序名称。
SCardStatus 获取读取器的当前 状态
SCardTransmit 将服务请求发送到智能卡。
SCardUIDlgSelectCard 显示智能卡选择卡片对话框。
SCardWriteCache 将智能卡的名称/值对写入智能卡资源管理器维护的全局缓存。

SASL 函数

简单身份验证和安全层 (SASL) 提供以下功能。

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

其他函数

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

函数 说明
AddSecurityPackage 安全支持提供程序 添加到 Microsoft Negotiate 支持的提供程序列表中。
ChangeAccountPassword 使用指定的 安全支持提供程序更改 Windows 域帐户的密码。
CredMarshalTargetInfo 将指定目标序列化为字节值的数组。
DeleteSecurityPackage Microsoft Negotiate 支持的提供程序列表中删除安全支持提供程序。
LsaManageSidNameMapping 在注册到 LSA 查找服务的映射集中添加或删除 SID/名称映射。
LsaOpenPolicy 打开本地或远程系统上 Policy 对象的句柄。
LsaQueryInformationPolicy 检索有关 Policy 对象的信息。
LsaSetInformationPolicy 修改 Policy 对象中的信息。
NPFMXEditPerm 允许网络供应商提供其自己的权限编辑器对话框。
NPFMXGetPermCaps 检索权限编辑器的功能。 返回值是一个位掩码,指示要启用文件管理器中的哪些 安全 菜单项。
NPFMXGetPermHelp 当选择“文件管理器 的安全 ”菜单中的菜单项并按下 F1 时,检索权限编辑器对话框的帮助文件和帮助上下文。
SeciAllocateAndSetIPAddress 设置在安全审核事件中显示的调用方 IP 地址。
SeciFreeCallContext 释放 SeciAllocateAndSetIPAddress 分配的内存。
SpGetCredUIContextFn 从凭据提供程序检索上下文信息。
SpLsaModeInitialize 为 LSA 提供指向 SSP/AP DLL 中每个 安全包 实现的函数的指针。
SpQueryMetaDataFn 在启动安全上下文时,从安全支持提供程序 (SSP) 获取元数据。
SpUpdateCredentialsFn 汇报与指定上下文关联的凭据。
SspiCompareAuthIdentities 比较两个指定的凭据。
SspiCopyAuthIdentity 创建指定不透明凭据结构的副本。
SspiDecryptAuthIdentity 解密指定的加密凭据。
SspiEncodeAuthIdentityAsStrings 将指定的身份验证标识编码为三个字符串。
SspiEncodeStringsAsAuthIdentity 将一组三个凭据字符串编码为身份验证标识结构。
SspiEncryptAuthIdentity 加密指定的标识结构。
SspiExcludePackage 创建一个新的标识结构,该结构是修改后的指定标识结构的副本,以排除指定的 安全支持提供程序 (SSP) 。
SspiFreeAuthIdentity 释放为指定标识结构分配的内存。
SspiGetCredUIContext 从凭据提供程序检索上下文信息。
SspiGetTargetHostName 获取与指定目标关联的主机名。
SspiIsAuthIdentityEncrypted 指示指定的标识结构是否加密。
SspiIsPromptingNeeded 指示在调用 InitializeSecurityContextAcceptSecurityContext 函数后返回的错误是否需要对 SspiPromptForCredentials 函数进行额外调用。
SspiLocalFree 释放与指定缓冲区关联的内存。
SspiMarshalAuthIdentity 将指定的标识结构序列化为字节数组。
SspiPrepareForCredRead 从指定的标识结构生成目标名称和凭据类型。
SspiPrepareForCredWrite 从标识结构生成值,该结构可以作为 对 CredWrite 函数的调用中的参数值传递。
SspiPromptForCredentials 允许 安全支持提供程序接口 (SSPI) 应用程序提示用户输入凭据。
SspiUnmarshalAuthIdentity 将指定的字节值数组反序列化为标识结构。
SspiUnmarshalCredUIContext 反序列化凭据提供程序在上一次调用 ICredentialProvider::SetSerialization 方法期间获取的凭据信息。
SspiUpdateCredentials 汇报与指定上下文关联的凭据。
SspiValidateAuthIdentity 指示指定的标识结构是否有效。
SspiZeroAuthIdentity 用零填充与指定标识结构关联的内存块。
WlxQueryTsLogonCredentials 如果启用了终端服务,则由替换 GINA DLL 调用以检索 凭据 信息。 然后,GINA DLL 可以使用此信息自动填写登录框并尝试将用户登录。