Функция 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 не следует использовать напрямую.

В следующем списке показаны возможные значения для этого параметра.

Значение Значение
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 , а DNS-имя в параметре lpName содержит недопустимый символ.
DNS_ERROR_NON_RFC_NAME
DNS-имя не соответствует спецификациям RFC. Эта ошибка возвращается, если указанный параметр NameType имеет значение NetSetupDnsMachine и DNS-имя в параметре lpName не соответствует спецификациям RFC.
ERROR_DUP_NAME
Повторяющееся имя уже существует в сети.
ERROR_INVALID_COMPUTERNAME
Недопустимый формат указанного имени компьютера.
ERROR_INVALID_PARAMETER
Неправильный параметр. Эта ошибка возвращается, если параметр lpName имеет значение NULL или параметр NameType указан как NetSetupUnknown или неизвестный тип имени.
ERROR_NO_SUCH_DOMAIN
Указанный домен не существует.
ERROR_NOT_SUPPORTED
Запрос не поддерживается. Эта ошибка возвращается, если удаленный компьютер был указан в параметре lpServer и этот вызов не поддерживается на удаленном компьютере.
NERR_InvalidComputer
Недопустимое имя указанного компьютера. Эта ошибка возвращается, если указанный параметр NameType имеет значение NetSetupDnsMachine или NetSetupMachine , а указанное имя компьютера недопустимо.
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
Header lmjoin.h (включая Lm.h)
Библиотека Netapi32.lib
DLL Netapi32.dll

См. также раздел

Функции службы каталогов

NetGetJoinInformation

NetGetJoinableOUs

NetJoinDomain

NetRenameMachineInDomain

NetUnjoinDomain

Функции управления сетью

Общие сведения об управлении сетью