在我的應用程序中,我需要知道計算機是否是域的主域控制器,因此我需要知道計算機的域以調用NetGetDCName函數。從Windows API獲取計算機的域名
謝謝。
編輯:該問題與DCOM身份驗證有關,因此如果需要使用計算機的本地身份驗證數據庫,則需要知道該域使用PDC或COMPUTER \ USERNAME的情況下的域\用戶名。
在我的應用程序中,我需要知道計算機是否是域的主域控制器,因此我需要知道計算機的域以調用NetGetDCName函數。從Windows API獲取計算機的域名
謝謝。
編輯:該問題與DCOM身份驗證有關,因此如果需要使用計算機的本地身份驗證數據庫,則需要知道該域使用PDC或COMPUTER \ USERNAME的情況下的域\用戶名。
我會考慮使用NetWkstaGetInfo()並通過本地計算機名稱是第一個參數。
#include <Lmwksta.h>
#include <StrSafe.h>
WCHAR domain_name[256];
WKSTA_INFO_100 info = {0};
if (NERR_Success == NetWkstaGetInfo(L"THIS-COMPUTER", 100, &info) &&
SUCCEEDED(StringCchCopy(domain_name, ARRAYSIZE(domain_name), info.wki100_langroup))) {
// use domain_name here...
}
如果您只是想知道代碼運行的機器是否是主域控制器,我認爲您的最佳選擇是NetServerGetInfo。如果您通過作爲級別參數,它將返回SERVER_INFO_101 structure。然後尋找其sv101_type成員:
sv101_type
計算機運行軟件的類型。該成員可以是以下值之一。
(...)
SV_TYPE_DOMAIN_CTRL
:一個主域控制器。
最後我已經使用這個代碼。它在本地機器上工作,遠程執行nStatus給出ACCESS_DENIED錯誤。
NET_API_STATUS nStatus;
TOleString oleServerName=strServerName.c_str();
DWORD dwLevel=101;
LPSERVER_INFO_101 pBufServer=NULL;
LPWKSTA_INFO_100 pBufWksta = NULL;
nStatus=NetServerGetInfo(oleServerName, dwLevel,
(LPBYTE*)&pBufServer);
if(nStatus==NERR_Success &&
(pBufServer->sv101_type & SV_TYPE_DOMAIN_CTRL))
{
dwLevel=100;
nStatus=NetWkstaGetInfo(oleServerName, 100,
(LPBYTE*)&pBufWksta);
if(nStatus==NERR_Success)
{
AnsiString strDomain(pBufWksta->wki100_langroup);
m_pgServerConnection->SetDomain(strDomain);
}
}
感謝所有:)
的NetWkstaGetInfo()
函數返回域名或計算機的工作組中,並且因此不以確定該計算機是一個域的成員的可靠方法。
GetComputerNameEx()
函數將幫助,與ComputerNameDnsDomain
參數一起使用,如下所示。這將返回一個空字符串,如果該計算機在工作組中,或域的DNS名稱:
DWORD bufSize = MAX_PATH;
TCHAR domainNameBuf[ MAX_PATH ];
GetComputerNameEx(ComputerNameDnsDomain, domainNameBuf, &bufSize);
C++和WinAPI標記尚未編輯,使無法編程相關? – 2009-05-18 16:47:02
它似乎是編程相關的,只是一個非常簡單的問題,可能會被誤認爲與編程無關。 – 2009-05-18 16:48:42
我需要使用winapi來獲取名稱,編程相關。我認爲:s – 2009-05-18 16:49:35