NetJoinDomain 関数 (lmjoin.h)

NetJoinDomain 関数は、コンピューターをワークグループまたはドメインに参加させます。

構文

NET_API_STATUS NET_API_FUNCTION NetJoinDomain(
  [in] LPCWSTR lpServer,
  [in] LPCWSTR lpDomain,
  [in] LPCWSTR lpMachineAccountOU,
  [in] LPCWSTR lpAccount,
  [in] LPCWSTR lpPassword,
  [in] DWORD   fJoinOptions
);

パラメーター

[in] lpServer

ドメイン参加操作を実行するコンピューターの DNS または NetBIOS 名を指定する定数文字列へのポインター。 このパラメーターが NULL の場合は、ローカル コンピューターが使用されます。

[in] lpDomain

参加するドメインまたはワークグループの名前を指定する、null で終わる定数文字列へのポインター。

必要に応じて、参加操作を実行する優先ドメイン コントローラーを指定できます。 このインスタンスでは、文字列は DomainName\MachineName という形式である必要があります。 ここで、DomainName は参加するドメインの名前、 MachineName は参加を実行するドメイン コントローラーの名前です。

[in] lpMachineAccountOU

必要に応じて、コンピューター アカウントの組織単位 (OU) の RFC 1779 形式名を含む定数 null で終わる文字列へのポインターを指定します。 このパラメーターを指定する場合、文字列には完全なパス (OU=testOU,DC=domain,DC=Domain,DC=com など) が含まれている必要があります。 それ以外の場合、このパラメーターは NULL である必要があります。

[in] lpAccount

ドメイン コントローラーへの接続時に使用するアカウント名を指定する、null で終わる定数文字列へのポインター。 この文字列では、ドメイン NetBIOS 名とユーザー アカウント ( REDMOND\user など) またはユーザーのユーザー プリンシパル名 (UPN) をインターネット スタイルのログイン名 ("someone@example.com"など) の形式で指定する必要があります。 このパラメーターが NULL の場合、呼び出し元のコンテキストが使用されます。

[in] lpPassword

lpAccount パラメーターでアカウント名が指定されている場合、このパラメーターはドメイン コントローラーへの接続時に使用するパスワードを指す必要があります。 それ以外の場合、このパラメーターは NULL である必要があります。

セキュリティで保護されていない結合のユーザー パスワードではなく、ローカル コンピューター アカウントのパスワードを指定できます。 詳細については、 fJoinOptions パラメーターで説明されているNETSETUP_MACHINE_PWD_PASSED フラグの説明を参照してください。

[in] fJoinOptions

結合オプションを定義するビット フラグのセット。 このパラメーターには、 Lmjoin.h ヘッダー ファイルで定義されている次の値のうち 1 つ以上を指定できます。

説明
NETSETUP_JOIN_DOMAIN
0x00000001
コンピューターをドメインに参加させます。 この値を指定しない場合は、コンピューターをワークグループに参加させます。
NETSETUP_ACCT_CREATE
0x00000002
ドメインにアカウントを作成します。
NETSETUP_WIN9X_UPGRADE
0x00000010
結合操作は、アップグレードの一環として実行されています。
NETSETUP_DOMAIN_JOIN_IF_JOINED
0x00000020
コンピューターが既にドメインに参加している場合でも、新しいドメインへの参加を許可します。
NETSETUP_JOIN_UNSECURE
0x00000040
セキュリティで保護されていない参加を実行します。

このオプションは、ドメイン ユーザーの資格情報を使用して認証することなく、事前に作成されたアカウントにドメイン参加を要求します。 このオプションは、 NETSETUP_MACHINE_PWD_PASSED オプションと組み合わせて使用できます。 この場合、 lpPassword は事前に作成されたコンピューター アカウントのパスワードです。

SP1 および Windows Server 2008 を使用する Windows Vista より前では、セキュリティで保護されていない参加がドメイン コントローラーに対して認証されませんでした。 すべての通信は、null (認証されていない) セッションを使用して実行されました。 SP1 および Windows Server 2008 の Windows Vista 以降では、コンピューター アカウント名とパスワードを使用してドメイン コントローラーに対する認証が行われます。

NETSETUP_MACHINE_PWD_PASSED
0x00000080
lpPassword パラメーターが、ユーザー パスワードではなくローカル コンピューター アカウントのパスワードを指定することを示します。 このフラグは、セキュリティで保護されていない結合に対してのみ有効です。これは、NETSETUP_JOIN_UNSECURE フラグを設定することによっても指定する必要があります。

このフラグを設定した場合、結合操作が成功すると、その値が有効なマシン パスワードである場合、マシン パスワードは lpPassword の値に設定されます。

NETSETUP_DEFER_SPN_SET
0x00000100
この時点で、コンピューター オブジェクトのサービス プリンシパル名 (SPN) と DnsHostName プロパティを更新しないことを示します。

通常、これらのプロパティは結合操作中に更新されます。 代わりに、これらのプロパティは、 後続の NetRenameMachineInDomain 関数の呼び出し中に更新する必要があります。 これらのプロパティは、名前の変更操作中に常に更新されます。 詳細については、「解説」を参照してください。

NETSETUP_JOIN_DC_ACCOUNT
0x00000200
既存のアカウントがドメイン コントローラーである場合は、ドメイン参加を許可します。
メモ このフラグは、Windows Vista 以降でサポートされています。
 
NETSETUP_JOIN_WITH_NEW_NAME
0x00000400
lpServer パラメーターで指定されたターゲット マシンを、lpServer パラメーターで指定されたマシン上のレジストリから照会された新しい名前で結合します。

このオプションは、マシンを再起動する前に SetComputerNameEx が呼び出された場合に使用されます。 再起動するまで、新しいコンピューター名は有効になりません。 このオプションを使用すると、呼び出し元は、ドメイン参加操作中に新しい名前を使用するように NetJoinDomain 関数に指示します。 NetJoinDomain を正常に呼び出した後に再起動が必要です。この時点で、コンピューター名の変更とドメイン メンバーシップの変更の両方が影響を受けます。

メモ このフラグは、Windows Vista 以降でサポートされています。
 
NETSETUP_JOIN_READONLY
0x00000800
書き込み可能なドメイン コントローラーを必要とせずに、事前に作成されたアカウントを使用して lpServer パラメーターで指定されたターゲット コンピューターに参加します。

このオプションを使用すると、アカウントが既にプロビジョニングされ、読み取り専用ドメイン コントローラーにレプリケートされている場合に、コンピューターをドメインに参加させることができます。 ターゲットの読み取り専用ドメイン コントローラーは、 lpDomain パラメーターの一部として、'\' 文字で区切られたドメイン名の後に指定されます。 このプロビジョニングには、マシン シークレットを含める必要があります。 マシン アカウントは、パスワード レプリケーション ポリシーの許可リストにグループ メンバーシップを介して追加する必要があります。また、アカウント パスワードは、参加操作の前に読み取り専用ドメイン コントローラーにレプリケートする必要があります。 詳細については、「 パスワード レプリケーション ポリシーの管理」の情報を参照してください。

Windows 7 以降では、オフライン ドメイン参加メカニズムを使用する別のメカニズムがあります。 詳細については、 NetProvisionComputerAccount 関数と NetRequestOfflineDomainJoin 関数を参照してください。

メモ このフラグは、Windows Vista 以降でサポートされています。
 
NETSETUP_AMBIGUOUS_DC
0x00001000
ドメインに参加するときは、レジストリで優先ドメイン コントローラーを設定しないでください。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_NO_NETLOGON_CACHE
0x00002000
ドメインに参加する場合、Netlogon キャッシュは作成されません。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_DONT_CONTROL_SERVICES
0x00004000
ドメインに参加するときに、Netlogon サービスを強制的に開始しないでください。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_SET_MACHINE_NAME
0x00008000
オフライン参加専用のドメインに参加する場合は、ターゲット コンピューターのホスト名と NetBIOS 名を設定します。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_FORCE_SPN_SET
0x00010000
ドメインに参加する場合は、ドメイン参加中に他の設定をオーバーライドし、サービス プリンシパル名 (SPN) を設定します。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_NO_ACCT_REUSE
0x00020000
ドメインに参加するときは、既存のアカウントを再利用しないでください。
メモ このフラグは、Windows 7、Windows Server 2008 R2 以降でサポートされています。
 
NETSETUP_IGNORE_UNSUPPORTED_FLAGS
0x10000000
このビットが設定されている場合、認識できないフラグは NetJoinDomain 関数によって無視され、 NetJoinDomain はフラグが設定されていないかのように動作します。

戻り値

関数が成功した場合、戻り値はNERR_Success。

関数が失敗した場合、戻り値には、次のいずれかのエラー コードまたは システム エラー コードのいずれかを指定できます。

リターン コード 説明
ERROR_ACCESS_DENIED
アクセスが拒否されました。 このエラーは、呼び出し元がターゲット コンピューターの Administrators ローカル グループのメンバーでない場合に返されます。
ERROR_INVALID_PARAMETER
パラメーターが正しくありません。 lpDomain パラメーターが NULL の場合、このエラーが返されます。
ERROR_NO_SUCH_DOMAIN
指定されたドメインが存在しませんでした。
ERROR_NOT_SUPPORTED
要求はサポートされていません。 このエラーは、 lpServer パラメーターで指定されたコンピューターが fJoinOptions パラメーターで渡されるオプションの一部をサポートしていない場合に返されます。
NERR_InvalidWorkgroupName
指定されたワークグループ名が無効です。
NERR_SetupAlreadyJoined
コンピューターは既にドメインに参加しています。
NERR_WkstaNotStarted
ワークステーション サービスが開始されていません。
RPC_S_CALL_IN_PROGRESS
このスレッドでリモート プロシージャ コールが既に進行中です。
RPC_S_PROTSEQ_NOT_SUPPORTED
リモート プロシージャ コール プロトコル シーケンスはサポートされていません。

解説

ドメインまたはワークグループへのコンピューターの参加 (および参加解除) は、ターゲット コンピューターの Administrators ローカル グループのメンバーのみが実行できます。 ドメイン管理者は、委任と特権の割り当てを使用して、ドメインに参加するための追加の要件を設定できることに注意してください。

NetJoinDomain 関数をリモートで呼び出す場合は、このような状況では資格情報を委任できないため、資格情報を指定する必要があります。

異なるプロセス、または同じプロセスの異なるスレッドは、 NetJoinDomain 関数を同時に呼び出さないでください。 この状況により、コンピューターの状態が一貫性を失う可能性があります。

参加操作中に問題が発生した場合は、コンピューター アカウントを削除せず、別の参加試行ですぐに削除に従う必要があります。 これにより、調査が困難なレプリケーション関連の問題が発生する可能性があります。 コンピューター アカウントを削除する場合は、変更がすべてのドメイン コントローラーにレプリケートされるまで待ってから、別の参加操作を試みます。

操作を完了するには、 NetJoinDomain 関数を呼び出した後にシステムの再起動が必要です。

Windows Server 2003 および Windows XP: NetJoinDomain 関数の呼び出しが NetRenameMachineInDomain 関数の呼び出しの前にある場合は、コンピューター オブジェクトの SPN プロパティと DnsHostName プロパティの更新を、名前変更操作まで延期する必要があります。 これは、特定の状況で結合操作が失敗する可能性があるためです。 このような状況の例として、現在のコンピューター名から派生した SPN が、コンピューターが参加している新しいドメインでは無効ですが、名前変更操作の後にコンピューターが持つ新しい名前から派生した SPN は、新しいドメインで有効です。 この状況では、 NetJoinDomain を呼び出すときに fJoinOptions パラメーターに NETSETUP_DEFER_SPN_SET フラグを指定して、名前変更操作まで 2 つのプロパティの更新を延期しない限り、 NetJoinDomain の呼び出しは失敗します。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー lmjoin.h (Lm.h を含む)
Library Netapi32.lib
[DLL] Netapi32.dll

関連項目

NetAddAlternateComputerName

NetCreateProvisioningPackage

NetEnumerateComputerNames

NetProvisionComputerAccount

NetRemoveAlternateComputerName

NetRenameMachineInDomain

NetRequestOfflineDomainJoin

NetRequestProvisioningPackageInstall

NetSetPrimaryComputerName

NetUnjoinDomain

ネットワーク管理機能

ネットワーク管理の概要

オフライン ドメイン参加のステップ バイ ステップ ガイド

パスワード レプリケーション ポリシーの管理