KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST 结构 (ntsecapi.h)
允许用户 (DC) 绑定到特定的域控制器,从而覆盖 Kerberos 域绑定缓存。 启用动态访问控制 (DAC) 时,Kerberos 强制实施 DC 查找,因此通常不会将身份验证绑定到特定 DC。 某些用户可能希望绑定到创建帐户的特定 DC,或者设置新密码以避免 DC 复制延迟。 必须设置 SeTcbPrivilege 特权。
语法
typedef struct _KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST {
KERB_PROTOCOL_MESSAGE_TYPE MessageType;
UNICODE_STRING RealmName;
UNICODE_STRING KdcAddress;
ULONG AddressType;
ULONG DcFlags;
} KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST, *PKERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST;
成员
MessageType
KERB_PROTOCOL_MESSAGE_TYPE 枚举的值,其中列出了可以通过调用 LsaCallAuthenticationPackage 函数发送到 Kerberos 身份验证包的消息类型。 此成员必须设置为 KerbAddBindingCacheEntryExMessage。
RealmName
域控制器领域的名称。
KdcAddress
密钥分发中心的地址 (要绑定到的服务器的 KDC) 。
AddressType
KdcAddress 成员中包含的字符串的类型。 这可以是以下值之一。
值 | 含义 |
---|---|
|
地址是域控制器的字符串 IP 地址,例如,“\\157.55.94.74”) 。 |
|
地址是域控制器的 NetBIOS 名称,例如“\\phoenix”。 |
DcFlags
调用方提供的域控制器标志。 需要这些标志才能传递到 DsGetDcName 函数。
注解
若要同时满足用户的要求和 Kerberos 的要求,需要进行两次调用以覆盖 Kerberos 域绑定缓存。
- 首先,构造一个请求消息类型 KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST ,其中 MessageType 成员必须设置为 KerbQueryDomainExtendedPoliciesMessage。 DomainName 成员设置为查询扩展域策略的实际域名。 如果 DomainName 设置为 null,则假定为本地计算机的域。
-
接下来,使用 Kerberos 身份验证包和请求消息调用 LsaCallAuthenticationPackage 函数。 成功返回后, 返回KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE 。
- 如果本地计算机已禁用 DAC, 则 Flags 成员将设置为 KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE_FLAG_DAC_DISABLED。
- 如果指定的域启用了灵活身份验证安全隧道 (FAST) , 则 ExtendedPolicies 成员设置为 KERB_EXTENDED_POLICY_FAST_CAPABLE (0x10000) 。
- 如果指定的域已启用声明, 则 ExtendedPolicies 成员设置为 KERB_EXTENDED_POLICY_CLAIMS_CAPABLE (0x40000) 。
- 如果本地计算机域未禁用 DAC,并且指定的域已启用 FAST 或 Claims,则 DsGetDcName 函数的 DsFlags 成员将设置为 DS_DIRECTORY_SERVICE_8_REQUIRED。 否则, DsFlags 为 0。
- 如果函数在 ProtocolStatus 成员中返回失败,STATUS_NOT_FOUND指示无法查询指定的域,因为本地计算机不信任指定的域。 其他错误代码指示实际遇到的故障。
- 然后,必须使用返回的 DsFlags 调用 DsGetDcName,这些标志代表你自己的要求(可能是多个),因此请使用逻辑运算符 OR。 返回 DomainControllerInfo 成员。
- 最后,使用 Kerberos 身份验证包和请求KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST再次调用 LsaCallAuthenticationPackage 函数,其中 DcFlags 成员设置为 DomainControllerInfo 标志。 所有其他成员的填充方式应与 KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST 相同。 如果KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE的 DsFlags 为零,则在调用 KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST 时,DcFlags 应设置为零,或者默认返回现有KERB_ADD_BINDING_CACHE_ENTRY_REQUEST请求。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
标头 | ntsecapi.h |