我想通过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 *,
但这也不起作用。
任何人都知道如何做到这一点?
答案 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上阻塞。