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 參數中要驗證的名稱類型。 此參數可以是 Lmjoin.h 頭檔中所定義之NETSETUP_NAME_TYPE列舉類型的其中一個值。
請注意,Lm.h 頭文件會自動包含 Lmjoin.h 標頭。 不應該直接使用 Lmjoin.h 頭檔。
下列清單顯示此參數的可能值。
傳回值
如果函式成功,傳回值會NERR_Success。
如果函式失敗,傳回值可以是下列其中一個錯誤碼。
傳回碼 | Description |
---|---|
|
DNS 名稱包含無效的字元。 如果指定的 NameType 參數是 NetSetupDnsMachine , 且 lpName 參數中的 DNS 名稱包含無效的字元,就會傳回此錯誤。 |
|
DNS 名稱不符合 RFC 規格。 如果指定的 NameType 參數是 NetSetupDnsMachine , 且 lpName 參數中的 DNS 名稱不符合 RFC 規格,就會傳回此錯誤。 |
|
網路上已有重複的名稱。 |
|
指定計算機名稱的格式無效。 |
|
參數不正確。 如果 lpName 參數為 NULL 或 NameType 參數指定為 NetSetupUnknown 或未知的 nametype,則會傳回此錯誤。 |
|
指定的網域不存在。 |
|
不支援此要求。 如果在 lpServer 參數中指定遠端電腦,而且遠端電腦上不支援此呼叫,就會傳回此錯誤。 |
|
指定的電腦名稱無效。 如果指定的 NameType 參數是 NetSetupDnsMachine 或 NetSetupMachine 且指定的電腦名稱無效,就會傳回此錯誤。 |
|
指定的工作組名稱無效。 如果指定的 NameType 參數是 NetSetupWorkgroup 且指定的工作組名稱無效,就會傳回此錯誤。 |
|
RPC 伺服器無法使用。 如果在 lpServer 參數中指定遠端電腦,且 RPC 伺服器無法使用,就會傳回此錯誤。 |
|
此程式不允許遠端呼叫。 如果 lpServer 參數中指定遠端電腦,而且此程式不允許遠端呼叫,就會傳回此錯誤。 |
備註
NetValidateName 函式會根據指定的 nametype 來驗證名稱。
如果 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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | lmjoin.h (包含 Lm.h) |
程式庫 | Netapi32.lib |
Dll | Netapi32.dll |