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 成员中包含的字符串的类型。 这可以是以下值之一。

含义
DS_INET_ADDRESS
地址是域控制器的字符串 IP 地址,例如,“\\157.55.94.74”) 。
DS_NETBIOS_ADDRESS
地址是域控制器的 NetBIOS 名称,例如“\\phoenix”。

DcFlags

调用方提供的域控制器标志。 需要这些标志才能传递到 DsGetDcName 函数。

注解

若要同时满足用户的要求和 Kerberos 的要求,需要进行两次调用以覆盖 Kerberos 域绑定缓存。

  1. 首先,构造一个请求消息类型 KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST ,其中 MessageType 成员必须设置为 KerbQueryDomainExtendedPoliciesMessageDomainName 成员设置为查询扩展域策略的实际域名。 如果 DomainName 设置为 null,则假定为本地计算机的域。
  2. 接下来,使用 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指示无法查询指定的域,因为本地计算机不信任指定的域。 其他错误代码指示实际遇到的故障。
  3. 然后,必须使用返回的 DsFlags 调用 DsGetDcName,这些标志代表你自己的要求(可能是多个),因此请使用逻辑运算符 OR。 返回 DomainControllerInfo 成员。
  4. 最后,使用 Kerberos 身份验证包和请求KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST再次调用 LsaCallAuthenticationPackage 函数,其中 DcFlags 成员设置为 DomainControllerInfo 标志。 所有其他成员的填充方式应与 KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST 相同。 如果KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSEDsFlags 为零,则在调用 KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST 时,DcFlags 应设置为零,或者默认返回现有KERB_ADD_BINDING_CACHE_ENTRY_REQUEST请求。

要求

要求
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
标头 ntsecapi.h

另请参阅

LsaCallAuthenticationPackage