0

次のようにして、コンピューターの単純な DisplayName を取得したいと思いますGetComputerObjectName

//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);
    }

しかし、呼び出しはERROR_CANT_ACCESS_DOMAIN_INFOGetComputerObjectNameで失敗します。特権*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 に答える