Функция 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) пользователя в виде имени входа в интернет-стиле (например, "someone@example.com"). Если этот параметр имеет значение NULL, используется контекст вызывающего объекта.
[in] lpPassword
Если параметр lpAccount указывает имя учетной записи, этот параметр должен указывать на пароль, используемый при подключении к контроллеру домена. В противном случае этот параметр должен иметь значение NULL.
[in] NameType
Тип имени, передаваемого в параметре lpName для проверки. Этот параметр может быть одним из значений из типа перечисления NETSETUP_NAME_TYPE, определенного в файле заголовка Lmjoin.h .
Обратите внимание, что заголовок Lmjoin.h автоматически включается в файл заголовка Lm.h . Файлы заголовков Lmjoin.h не следует использовать напрямую.
В следующем списке показаны возможные значения для этого параметра.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение будет NERR_Success.
Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
DNS-имя содержит недопустимый символ. Эта ошибка возвращается, если указанный параметр NameType имеет значение NetSetupDnsMachine , а DNS-имя в параметре lpName содержит недопустимый символ. |
|
DNS-имя не соответствует спецификациям RFC. Эта ошибка возвращается, если указанный параметр NameType имеет значение NetSetupDnsMachine и DNS-имя в параметре lpName не соответствует спецификациям 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 |
Header | lmjoin.h (включая Lm.h) |
Библиотека | Netapi32.lib |
DLL | Netapi32.dll |