2009-05-18 59 views
4

私のアプリケーションでは、コンピュータがドメインのプライマリドメインコントローラであるかどうかを知る必要があるため、NetGetDCName関数を呼び出すためにコンピュータのドメインを知る必要があります。Windows APIからコンピュータのドメイン名を取得する

ありがとうございました。

EDIT:この問題はDCOM認証と関連しているため、PDCの場合はDOMAIN \ USERNAME、コンピュータのローカル認証データベースを使用する場合はCOMPUTER \ USERNAMEを使用する必要があります。

+1

C++およびWinAPIタグはまだプログラミング関連ではないように編集されていますか? –

+1

プログラミング関連ではないように思われますが、プログラミング関連ではないと誤解されるかもしれない非常に単純な質問です。 –

+0

私はwinapiを使用して名前を取得する必要があるので、プログラミング関連です。私は考える: –

答えて

6

私はNetWkstaGetInfo()を使用することを検討し、ローカルコンピュータ名を渡すことはその最初のパラメータです。

#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... 
} 
+0

私はこれを試してみるつもりです。 –

2

NetWkstaGetInfo機能を使用できます。

コンピュータ名にnullを渡すと、ローカルコンピュータに関する情報が返されます。

ドメイン名を含むWKSTA_INFO_100インスタンスが返されます。

2

コードが実行されているマシンがプライマリドメインコントローラであるかどうかを知りたいのであれば、最良の選択肢はNetServerGetInfoだと思います。 をレベルのパラメータとして渡すと、SERVER_INFO_101 structureが返されます。そして、そのsv101_typeメンバーを探します。

sv101_type

コンピュータが実行されているソフトウェアの種類を。このメンバーは、次のいずれかの値になります。

SV_TYPE_DOMAIN_CTRL

(...):プライマリドメインコントローラ。

+0

私はコンピュータがPDCとドメインの名前かどうかを知る必要があります。ありがとう。 –

0

最後に、私はこのコードを使用しています。ローカルマシンで動作し、リモートで実行されます。nStatusはACCESS_DENIEDエラーを出します。すべての

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

感謝:)

12

NetWkstaGetInfo()機能は、ドメイン名またはコンピュータのワークグループのいずれかを返しますので、コンピュータがドメインのメンバであるかどうかを判断するための信頼できる方法ではありません。

GetComputerNameEx()関数は、次のようにComputerNameDnsDomainパラメータとともに使用すると便利です。コンピュータがワークグループまたはドメインのDNS名である場合、空の文字列が返されます。

DWORD bufSize = MAX_PATH; 
TCHAR domainNameBuf[ MAX_PATH ]; 

GetComputerNameEx(ComputerNameDnsDomain, domainNameBuf, &bufSize); 
関連する問題