身份验证函数

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

SSPI 函数

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

包管理

SSPI 包管理函数会启动安全包、枚举可用包并查询安全包的属性。 以下 SSPI 函数提供针对安全包的管理服务。

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

凭据管理

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

对凭据上下文内容的所有引用均会通过对象的句柄来完成,而安全包会取消引用句柄以访问凭据的特定信息。 凭据句柄是介于 {0x00000000, 0x00000000} 与 {0xFFFFFFFF, 0xFFFFFFFE} 之间的一个 64 位值。

应用程序使用带有上下文管理函数的凭据句柄来创建安全上下文

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

以下函数将与凭据管理一起使用。

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

上下文管理

SSPI 上下文管理函数会创建并使用安全上下文

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

安全上下文是一种不透明的安全对象。 安全上下文中的信息无法用于应用程序。 上下文管理函数会创建并使用上下文句柄,而安全包则会取消引用上下文句柄以访问其安全内容。

上下文句柄是介于 {0x00000000, 0x00000000} 与 {0xFFFFFFFF, 0xFFFFFFFE} 之间的一个 64 位值。

以下函数将与上下文管理一起使用。

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

消息支持

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

以下函数提供针对消息的安全支持。

函数 说明
DecryptMessage (常规) 使用安全上下文中的会话密钥来解密已加密的消息。
EncryptMessage (常规) 使用安全上下文中的会话密钥来加密消息。
MakeSignature 生成消息的加密校验和,同时包括排序信息以免出现消息丢失或插入。
VerifySignature 验证发送者使用 MakeSignature 函数来签名的已收到消息的签名。

SSP/AP 实现的函数

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

在下表中,第一组函数由 Windows XP SSP/AP 安全包实现。 第二组函数则仅由 Windows XP 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) (LSA) 调用一次,以便提供安全包(其中包含一般安全信息和受支持函数的调度表。)
SpInitLsaModeContext 客户端调度函数,它可用于在服务器与客户端之间建立安全上下文
SpQueryContextAttributes 检索安全上下文的属性。
SpQueryCredentialsAttributes 检索凭据的属性。
SpSaveCredentials 补充凭据保存到用户对象。
SpSetExtendedInformation 设置有关安全包的扩展信息。
SpShutdown 在卸载 SSP/AP 之前执行所需的全部清理。
SslCrackCertificate 返回一个 X509Certificate 结构,其中包含指定证书 Blob 中所含的信息。
SslEmptyCache 从 Schannel 缓存中删除指定的字符串。
SslFreeCertificate 释放由 SslCrackCertificate 函数的上一次调用所分配的证书。

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

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

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

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

将 SSP/AP 加载到客户端或服务器进程后,本地安全机构 (LSA) 会将安全上下文信息(由 SpInitLsaModeContextSpAcceptLsaModeContext 返回)和所有其他与上下文相关的数据复制到此进程并调用安全包的 SpInitUserModeContext 函数。

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

函数 说明
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(常规)函数。
SpSealMessage 对客户端和服务器之间交换的消息进行加密。
实现 SSPI EncryptMessage(常规)函数。
SpUnsealMessage 解密先前使用 SpSealMessage 函数加密的消息。
实现 SSPI DecryptMessage(常规)函数。
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 关闭 Security Accounts Manager 数据库条目的句柄。
ConvertAuthDataToToken 将授权数据转换为用户令牌。
CrackSingleName 将名称从一种格式转换为另一种格式。
CreateSharedMemory 在客户端与 SSP/AP 之间共享一部分内存。
CreateThread 创建新线程。
CreateToken 创建令牌。
DeleteSharedMemory 删除一部分共享内存。
DuplicateHandle 复制句柄。
FreeReturnBuffer 释放 LSA 分配的缓冲区。
FreeSharedMemory 释放一部分共享内存。
GetAuthDataForUser 检索用户帐户的授权数据。
GetCallInfo 检索有关最近函数调用的信息。
GetClientInfo 检索有关安全包的用户进程的信息。
GetUserAuthData 返回用户的授权数据。
GetUserCredentials 尚未实现。
ImpersonateClient 安全包进行调用,以模拟包用户。
MapBuffer SecBuffer 结构映射到安全支持提供程序/身份验证包 (SSP/AP) 的地址空间中。
OpenSamUser 检索 Security Accounts Manager (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 Winlogon 会在 GINA DLL 应显示消息时调用此函数。
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 支持函数

GINA 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 搜索 Credentials Management (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 可使用此信息自动填充登录框并尝试登录该用户。