C++ 从Windows API获取计算机的域名

C++ 从Windows API获取计算机的域名,c++,winapi,C++,Winapi,在我的应用程序中,我需要知道计算机是否是域的主域控制器,因此我需要知道计算机的域以调用NetGetDCName函数 谢谢 < >编辑:问题与DCOM认证有关,所以如果需要使用计算机的本地身份验证数据库,我需要知道域使用域名\用户名作为PDC或计算机用户名。 < P>我会考虑使用并通过本地计算机名称是第一个参数。< /P> #include <Lmwksta.h> #include <StrSafe.h> WCHAR domain_name[256]; WKSTA_INF

在我的应用程序中,我需要知道计算机是否是域的主域控制器,因此我需要知道计算机的域以调用NetGetDCName函数

谢谢

< >编辑:问题与DCOM认证有关,所以如果需要使用计算机的本地身份验证数据库,我需要知道域使用域名\用户名作为PDC或计算机用户名。

< P>我会考虑使用并通过本地计算机名称是第一个参数。< /P>
#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...
}
#包括
#包括
WCHAR域名[256];
WKSTAU_INFO_100 INFO={0};
如果(NERR_Success==NetWkstaGetInfo(L“THIS-COMPUTER”,100,&info)和
成功(StringCchCopy(域名,数组化(域名),info.wki100\u langroup))){
//在这里使用域名。。。
}
您可以使用该功能执行此操作

如果为计算机名传入null,它将返回有关本地计算机的信息


它将返回一个
WKSTA_INFO_100
实例,其中包括域名。

如果您只想知道代码运行的机器是否是主域控制器,我认为您最好的选择是。如果将101作为级别参数传递,则返回一个。然后查找其sv101_类型的成员:

sv101\U型

计算机正在运行的软件类型。此成员可以是以下值之一

(……)

SV\u TYPE\u DOMAIN\u CTRL
:主域控制器


最后我使用了这个代码。它在本地机器上工作,远程执行。nStatus给出一个拒绝访问的错误

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);
    }
}
多亏了all:)

该函数返回计算机的域名或工作组,因此不是确定计算机是否为域成员的可靠方法

该功能将与
ComputerNameDnsDomain
参数一起使用,如下所示。如果计算机在工作组中,或域的DNS名称中,这将返回空字符串:

DWORD bufSize = MAX_PATH;
TCHAR domainNameBuf[ MAX_PATH ];

GetComputerNameEx( ComputerNameDnsDomain, domainNameBuf, &bufSize );

有一个特定的函数来确定工作站的连接状态。

可以有3种状态,“已加入”到工作组(旧的Windows 3.0网络)状态==NetSetupWorkgroupName,或已加入到域状态==NetSetupDomainName 或未连接(独立)状态==NetSetupUnjoined


因此,如果您知道这一点,您可以可靠地调用相应的所需函数。

C++和WinAPI标记尚未编辑为与编程无关?它似乎与编程相关,只是一个非常简单的问题,可能会被误认为与编程无关。我需要使用WinAPI获取名称,因此与编程相关。我想:我把标签移走了。我还不能编辑这个问题来充实它,这有点令人沮丧……实用性很好,但我更喜欢按程序进行。:-)我需要知道计算机是否为PDC以及域名。谢谢。我在本地机器上也被拒绝访问。它需要管理员权限才能正常工作。