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 不再需要此内存时,调用方必须释放此内存。

返回值

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

注解

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

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

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

获取域控制器的完整列表

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

注意

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

要求

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

另请参阅

目录服务函数

DsGetDcClose

DsGetDcOpen

枚举域控制器

LocalFree

NetApiBufferFree

SOCKET_ADDRESS