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 头文件。
以下列表显示了此参数的可能值。
返回值
如果函数成功,则返回值NERR_Success。
如果函数失败,则返回值可能是以下错误代码之一。
返回代码 | 说明 |
---|---|
|
DNS 名称包含无效字符。 如果指定的 NameType 参数为 NetSetupDnsMachine ,并且 lpName 参数中的 DNS 名称包含无效字符,则返回此错误。 |
|
DNS 名称不符合 RFC 规范。 如果指定的 NameType 参数为 NetSetupDnsMachine ,并且 lpName 参数中的 DNS 名称不符合 RFC 规范,则返回此错误。 |
|
网络上已存在重复的名称。 |
|
指定的计算机名称的格式无效。 |
|
参数不正确。 如果 lpName 参数为 NULL 或 NameType 参数指定为 NetSetupUnknown 或未知名称类型,则返回此错误。 |
|
指定的域不存在。 |
|
不支持该请求。 如果在 lpServer 参数中指定了远程计算机,并且远程计算机上不支持此调用,则返回此错误。 |
|
指定的计算机名称无效。 如果指定的 NameType 参数为 NetSetupDnsMachine 或 NetSetupMachine ,并且指定的计算机名称无效,则返回此错误。 |
|
指定的工作组名称无效。 如果指定的 NameType 参数为 NetSetupWorkgroup 并且指定的工作组名称无效,则返回此错误。 |
|
RPC 服务器不可用。 如果在 lpServer 参数中指定了远程计算机,并且 RPC 服务器不可用,则返回此错误。 |
|
此过程不允许远程调用。 如果在 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 |