在我的应用程序中,我需要知道计算机是否是域的主域控制器,因此我需要知道计算机的域以调用NetGetDCName函数。
感谢。
编辑:问题与DCOM身份验证有关,因此如果需要使用计算机的本地身份验证数据库,我需要知道在PDC或COMPUTER \ USERNAME的情况下使用DOMAIN \ USERNAME的域。
答案 0 :(得分:13)
NetWkstaGetInfo()
函数返回计算机的域名或工作组,因此不是确定计算机是否为域成员的可靠方法。
GetComputerNameEx()
函数将与ComputerNameDnsDomain
参数一起使用,如下所示。如果计算机位于工作组中,则将返回空字符串,或域的DNS名称:
DWORD bufSize = MAX_PATH;
TCHAR domainNameBuf[ MAX_PATH ];
GetComputerNameEx( ComputerNameDnsDomain, domainNameBuf, &bufSize );
答案 1 :(得分:7)
我会考虑使用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...
}
答案 2 :(得分:2)
答案 3 :(得分:2)
如果您只是想知道代码运行的机器是否是主域控制器,我认为您最好的选择是NetServerGetInfo。如果您将 101 作为级别参数传递,则会返回SERVER_INFO_101 structure。然后查找 sv101_type 成员:
<强> sv101_type 强>
计算机运行的软件类型。该成员可以是以下值之一。
(...)
SV_TYPE_DOMAIN_CTRL
:主域控制器。
答案 4 :(得分:1)
具有确定工作站的加入状态的特定功能。 https://docs.microsoft.com/en-gb/windows/desktop/api/lmjoin/nf-lmjoin-netgetjoininformation
此级别可以是3状态,“加入”到工作组(良好的旧Windows 3.0网络)状态== NetSetupWorkgroupName,或加入域状态== NetSetupDomainName 或未加入(独立)状态== NetSetupUnjoined
因此,如果您知道这一点,则可以可靠的方式调用相应的所需功能。
答案 5 :(得分:0)
最后我使用了这段代码。它在本地机器上工作,远程执行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);
}
}
感谢所有人:)