使用GetComputerObjectName启用哪些访问权限?

时间:2012-07-04 11:06:32

标签: c++ winapi visual-c++

我想通过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 *, 但这也不起作用。

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

2 个答案:

答案 0 :(得分:3)

为什么不使用GetComputerNameEx功能。
尝试类似下面的内容,

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

效果很好。我只是在网络上的机器上尝试了你的代码,它也很适合我。但是这段代码给出了网络中机器的全名。我想它也适用于独立机器(就像使用NET command)。

答案 1 :(得分:0)

如果计算机不属于域,则会显示错误ERROR_CANT_ACCESS_DOMAIN_INFO正常。 如果您确定它是域的一部分,则可以检查防火墙是否在传出端口135上阻塞。