DsGetDcNextA 函数 (dsgetdc.h)

DsGetDcNext 函数检索域控制器枚举操作中的下一个域控制器。

语法

DSGETDCAPI DWORD DsGetDcNextA(
  [in]            HANDLE           GetDcContextHandle,
  [out, optional] PULONG           SockAddressCount,
  [out, optional] LPSOCKET_ADDRESS *SockAddresses,
  [out, optional] LPSTR            *DnsHostName
);

参数

[in] GetDcContextHandle

包含由 DsGetDcOpen 函数提供的域控制器枚举上下文句柄。

[out, optional] SockAddressCount

指向 ULONG 值的指针,该值接收 SockAddresses 数组中的元素数。 如果此参数 NULL,则不会检索套接字地址。

[out, optional] SockAddresses

指向接收域控制器套接字地址数据的 SOCKET_ADDRESS 结构的数组的指针。 SockAddressCount 接收此数组中的元素数。

所有返回的地址的类型为 AF_INETAF_INET6sin_port 成员包含服务器记录中的端口。 端口 0 表示 DNS 中没有可用的端口。

调用方必须通过调用 localFree不再需要该内存时释放此内存。

如果 SockAddressCountNULL,则忽略此参数。

[out, optional] DnsHostName

指向接收域控制器 DNS 名称的字符串指针的指针。 如果不知道主机名,此参数将接收 NULL。 调用方必须通过调用 netApiBufferFree不再需要此内存。

返回值

如果成功或 Win32 或 RPC 错误,则返回 ERROR_SUCCESS 否则返回。 可能的错误值包括以下内容。

言论

若要重置枚举,请通过调用 DsGetDcClose 关闭当前枚举,然后再次调用 DsGetDcOpen 重新打开枚举。

DsGetDcNext 返回的 DC 不是只读 DC(RODC),因为这些 DC 仅注册特定于站点的记录和 CName 记录,DsGetDcNextDsGetDcOpen 查找 DNS SRV 记录。

以下过程演示如何从运行 Windows Server 2008 的计算机获取完整的 DC 列表。

获取域控制器的完整列表

  1. 使用 DsGetDcName 获取域控制器名称。
  2. 使用 DsBind 连接到该域控制器。
  3. 使用 InfoLevel 3 (DS_DOMAIN_CONTROLLER_INFO_3) 调用 DsGetDomainControllerInfo 以获取完整列表,包括 RODC。

注意

dsgetdc.h 标头将 DsGetDcNext 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows Vista
支持的最低服务器 Windows Server 2008
目标平台 窗户
标头 dsgetdc.h
Netapi32.lib
DLL Netapi32.dll

另请参阅

目录服务函数

DsGetDcClose

DsGetDcOpen

枚举域控制器

LocalFree

NetApiBufferFree

SOCKET_ADDRESS