0

我想通过GetComputerObjectName尝试获得计算机的简单 DisplayName:

//Get the buffer size
    bRet = GetComputerObjectName(NameDisplay, NULL, & ulSize);
    if(!bRet)
    {
        DWORD dw = 0;
        dw = GetLastError();
        MessageBox(NULL, TEXT("Could not get the computer name size."), TEXT("Failure."), MB_OK | MB_ICONERROR);
        exit(-1);
    }

    //Create a buffer large enough to contain the display name
    pBuffer = new TCHAR[ulSize+1];

    //Obtain the computer object name
    bRet = GetComputerObjectName(NameDisplay, pBuffer, &ulSize);
    if(!bRet)
    {
        MessageBox(NULL, TEXT("Could not get the computer name."), TEXT("Failure."), MB_OK | MB_ICONERROR);
        exit(-1);
    }

但是调用GetComputerObjectName失败并显示ERROR_CANT_ACCESS_DOMAIN_INFO。 我已经尝试启用特权*SE_SECURITY_NAME* 和 *SE_SYSTEM_PROFILE_NAME*,但这也不起作用。

任何人都知道如何做到这一点?

4

2 回答 2

3

为什么不使用该GetComputerNameEx功能。
试试下面的东西,

ULONG sz = 0;
GetComputerNameEx(ComputerNameDnsFullyQualified, NULL,&sz);
cout << "size : " << (int)sz << endl;

它运作良好。我刚刚在网络中的机器上尝试了你的代码,它对我来说也很好用。但是这段代码给出了网络中机器的全名。我猜它也适用于独立机器(就像使用NET 命令一样)。

于 2012-07-04T12:09:09.663 回答
0

如果机器不是域的一部分,则正常显示错误 ERROR_CANT_ACCESS_DOMAIN_INFO。如果您确定它是域的一部分,则可以检查防火墙是否阻止了传出端口 135。

于 2012-07-04T12:19:38.767 回答