NetValidateName 函数 (lmjoin.h)

NetValidateName 函数验证名称是否对 (计算机名称、工作组名称、域名或 DNS 计算机名称) 指定的名称类型有效。

语法

NET_API_STATUS NET_API_FUNCTION NetValidateName(
  [in] LPCWSTR            lpServer,
  [in] LPCWSTR            lpName,
  [in] LPCWSTR            lpAccount,
  [in] LPCWSTR            lpPassword,
  [in] NETSETUP_NAME_TYPE NameType
);

参数

[in] lpServer

指向常量字符串的指针,该常量字符串指定要调用函数的计算机的 DNS 或 NetBIOS 名称。 如果此参数为 NULL,则使用本地计算机。

[in] lpName

指向常量字符串的指针,该常量字符串指定要验证的名称。 根据 NameType 参数中指定的值, lpName 参数可以指向计算机名称、工作组名称、域名或 DNS 计算机名称。

[in] lpAccount

如果 lpName 参数是域名,则此参数指向连接到域控制器时要使用的帐户名称。 字符串必须指定域 NetBIOS 名称和用户帐户 (例如“REDMOND\user”) ,或者用户主体名称 (UPN) ,其格式为 Internet 样式登录名 (“someone@example.com”) 。 如果此参数为 NULL,则使用调用方上下文。

[in] lpPassword

如果 lpAccount 参数指定帐户名称,则此参数必须指向连接到域控制器时要使用的密码。 否则,此参数必须为 NULL

[in] NameType

要验证的 lpName 参数中传递的名称的类型。 此参数可以是 Lmjoin.h 头文件中定义的 NETSETUP_NAME_TYPE 枚举类型的值之一。

请注意,Lm.h 头文件会自动包含 Lmjoin.h 标头。 不应直接使用 Lmjoin.h 头文件。

以下列表显示了此参数的可能值。

含义
NetSetupUnknown
0
名称类型未知。 如果使用此值, NetValidateName 函数将失败并 ERROR_INVALID_PARAMETER
NetSetupMachine
1
验证 NetBIOS 计算机名称是否有效且未使用。
NetSetupWorkgroup
2
验证工作组名称是否有效。
NetSetupDomain
3
验证域名是否存在,以及它是一个域。
NetSetupNonExistentDomain
4
验证域名是否未使用。
NetSetupDnsMachine
5
验证 DNS 计算机名称是否有效。

Windows 2000 及更高版本支持此值。 必须使用 _WIN32_WINNT = 0x0500 > 编译应用程序才能使用此值。

返回值

如果函数成功,则返回值NERR_Success。

如果函数失败,则返回值可能是以下错误代码之一。

返回代码 说明
DNS_ERROR_INVALID_NAME_CHAR
DNS 名称包含无效字符。 如果指定的 NameType 参数为 NetSetupDnsMachine ,并且 lpName 参数中的 DNS 名称包含无效字符,则返回此错误。
DNS_ERROR_NON_RFC_NAME
DNS 名称不符合 RFC 规范。 如果指定的 NameType 参数为 NetSetupDnsMachine ,并且 lpName 参数中的 DNS 名称不符合 RFC 规范,则返回此错误。
ERROR_DUP_NAME
网络上已存在重复的名称。
ERROR_INVALID_COMPUTERNAME
指定的计算机名称的格式无效。
ERROR_INVALID_PARAMETER
参数不正确。 如果 lpName 参数为 NULLNameType 参数指定为 NetSetupUnknown 或未知名称类型,则返回此错误。
ERROR_NO_SUCH_DOMAIN
指定的域不存在。
ERROR_NOT_SUPPORTED
不支持该请求。 如果在 lpServer 参数中指定了远程计算机,并且远程计算机上不支持此调用,则返回此错误。
NERR_InvalidComputer
指定的计算机名称无效。 如果指定的 NameType 参数为 NetSetupDnsMachineNetSetupMachine ,并且指定的计算机名称无效,则返回此错误。
NERR_InvalidWorkgroupName
指定的工作组名称无效。 如果指定的 NameType 参数为 NetSetupWorkgroup 并且指定的工作组名称无效,则返回此错误。
RPC_S_SERVER_UNAVAILABLE
RPC 服务器不可用。 如果在 lpServer 参数中指定了远程计算机,并且 RPC 服务器不可用,则返回此错误。
RPC_E_REMOTE_DISABLED
此过程不允许远程调用。 如果在 lpServer 参数中指定了远程计算机,并且此过程不允许远程调用,则返回此错误。

注解

NetValidateName 函数根据指定的名称类型验证名称。

如果 NameType 参数为 NetSetupMachine,则 lpName 参数中传递的名称在语法上必须正确作为 NetBIOS 名称,并且该名称当前不得在网络上使用。

如果 NameType 参数是 NetSetupWorkgroup,则 传入 lpName 参数的名称在语法上必须正确为 NetBIOS 名称,该名称当前不得在网络上用作唯一名称,并且名称必须与计算机名称不同。

如果 NameType 参数是 NetSetupDomain,则 传入 lpName 参数的名称在语法上必须正确为 NetBIOS 或 DNS 名称,并且该名称当前必须注册为域名。

如果 NameType 参数是 NetSetupNonExistentDomain,则 lpName 参数中传递的名称在语法上必须正确为 NetBIOS 或 DNS 名称,并且该名称当前不得注册为域名。

如果 NameType 参数为 NetSetupDnsMachine,则 lpName 参数中传递的名称在语法上必须正确作为 DNS 名称。

NetBIOS 名称的最大长度限制为 16 个字符。

无需特殊的组成员身份即可成功执行 NetValidateName 函数。

示例

以下示例验证特定类型的名称。

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>

int wmain(int argc, wchar_t * argv[])
{

    NET_API_STATUS nStatus;

    LPCWSTR lpServer = NULL;
    LPCWSTR lpName = NULL;
    LPCWSTR lpAccount = NULL;
    LPCWSTR lpPassword = NULL;
    DWORD dwNameType = NetSetupUnknown; // unknown name type

    if (argc != 3 && argc != 4 && argc != 6) {
        wprintf(L"Usage: %ws Server Name AccountName Password> nametype\n",
                argv[0]);
        wprintf(L"Usage: %ws Server Name nametype\n", argv[0]);
        wprintf(L"Usage: %ws Name nametype\n", argv[0]);
        wprintf(L"     %ws Client2 2\n", argv[0]);
        wprintf(L"     %ws Myserver Client2 3\n", argv[0]);
        wprintf(L"     %ws Myserver Client2 domain\\user password 3\n", argv[0]);
        exit(1);
    }
    // The request is not for the primary domain.
    //
    if (argc == 3) {
        lpName = argv[1];
        dwNameType = _wtoi(argv[2]);
    }

    if (argc == 4) {
        lpServer = argv[1];
        lpName = argv[2];
        dwNameType = _wtoi(argv[3]);
    }

    if (argc == 6) {
        lpServer = argv[1];
        lpName = argv[2];
        lpAccount = argv[3];
        lpPassword = argv[4];
        dwNameType = _wtoi(argv[5]);
    }

    wprintf(L"Calling NetValidateName with parameters\n");
    wprintf(L"    lpServer = %ws\n", lpServer);
    wprintf(L"    lpName = %ws\n", lpName);
    wprintf(L"    lpAccount = %ws\n", lpAccount);
    wprintf(L"    lpPassword = %ws\n", lpPassword);
    wprintf(L"    NameType  = %d ", dwNameType);
    switch (dwNameType) {
    case NetSetupUnknown:
        wprintf(L"(NetSetupUnknown)\n");
        break;
    case NetSetupMachine:
        wprintf(L"(NetSetupMachine)\n");
        break;
    case NetSetupWorkgroup:
        wprintf(L"(NetSetupWorkgroup)\n");
        break;
    case NetSetupDomain:
        wprintf(L"(NetSetupDomain)\n");
        break;
    case NetSetupNonExistentDomain:
        wprintf(L"(NetSetupNonExistentDomain)\n");
        break;
#if(_WIN32_WINNT >= 0x0500)
    case NetSetupDnsMachine:
        wprintf(L"(NetSetupDnsMachine)\n");
        break;
#endif
    default:
        wprintf(L"Other unknown nametype)\n");
        break;
    }

    //
    // Call the NetValidateName function to validate the name
    //
    nStatus = NetValidateName(lpServer,
                              lpName, lpAccount, lpPassword, (NETSETUP_NAME_TYPE) dwNameType);
    //
    // If the call succeeds,
    //
    if ((nStatus == NERR_Success)) {
        wprintf(L"NetValidateName was successful\n", nStatus);
    } else {
        wprintf(L"NetValidateName failed with error: %lu (0x%lx)\n", nStatus,
                nStatus);
        wprintf(L"   Error = ");
        switch (nStatus) {
        case ERROR_INVALID_PARAMETER:
            wprintf(L"ERROR_INVALID_PARAMETER\n");
            break;
        case ERROR_DUP_NAME:
            wprintf(L"ERROR_DUP_NAME\n");
            break;
        case ERROR_NO_SUCH_DOMAIN:
            wprintf(L"ERROR_NO_SUCH_DOMAIN\n");
            break;
        case ERROR_NOT_SUPPORTED:
            wprintf(L"ERROR_NOT_SUPPORTED\n");
            break;
        case ERROR_INVALID_COMPUTERNAME:
            wprintf(L"ERROR_INVALID_COMPUTERNAME\n");
            break;
        case DNS_ERROR_INVALID_NAME_CHAR:
            wprintf(L"DNS_ERROR_INVALID_NAME_CHAR\n");
            break;
        case DNS_ERROR_NON_RFC_NAME:
            wprintf(L"DNS_ERROR_NON_RFC_NAME\n");
            break;
        case NERR_InvalidComputer:
            wprintf(L"NERR_InvalidComputer\n");
            break;
        case NERR_InvalidWorkgroupName:
            wprintf(L"NERR_InvalidWorkgroupName\n");
            break;
        case RPC_S_SERVER_UNAVAILABLE:
            wprintf(L"RPC_S_SERVER_UNAVAILABLE\n");
            break;
        case RPC_E_REMOTE_DISABLED:
            wprintf(L"RPC_E_REMOTE_DISABLED\n");
            break;
        default:
            wprintf(L"Other error, see Winerror.h or lmerr.h)\n");
            break;
        }
    }

    return nStatus;
}


要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 lmjoin.h (包括 Lm.h)
Library Netapi32.lib
DLL Netapi32.dll

另请参阅

目录服务函数

NetGetJoinInformation

NetGetJoinableOUs

NetJoinDomain

NetRenameMachineInDomain

NetUnjoinDomain

网络管理功能

网络管理概述