3.2.4.13 NetrJoinDomain2 (Opnum 22)
The NetrJoinDomain2 method uses encrypted credentials to join a computer to a domain or a workgroup.<57>
For high-level, informative discussions about domain controller location and domain join and unjoin, see [MS-ADOD] sections 2.7.7 and 3.1. For more information, see the example in section 4.3.
-
unsigned long NetrJoinDomain2( [in] handle_t RpcBindingHandle, [in, string, unique] wchar_t* ServerName, [in, string] wchar_t* DomainNameParam, [in, string, unique] wchar_t* MachineAccountOU, [in, string, unique] wchar_t* AccountName, [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password, [in] unsigned long Options );
RpcBindingHandle: An RPC binding handle [C706].
ServerName: This parameter has no effect on message processing in any environment. The client MUST set this parameter to a value that resolves to the IP protocol layer destination address of the RPC packets it transmits ([MS-RPCE] section 2.1.1.2). The server (2) MUST ignore this parameter.
DomainNameParam: A pointer to a string that specifies the domain name (2) or workgroup name to join, and optionally the domain controller machine name within the domain. This parameter MUST NOT be NULL.
-
If the string specifies the name of the preferred domain controller to perform the join operation, the string MUST be of the form DomainNameToJoin\MachineName, where DomainNameToJoin is the domain to join, "\" is a delimiter, and MachineName is the name of the domain controller to perform the join operation. In all cases, the DomainNameToJoin portion of this parameter MUST be either the NetBIOS name of the domain or the fully qualified domain name (FQDN) (2) of the domain. If the MachineName is passed, it MUST be either the NetBIOS name of the domain controller or the Internet host name of the domain controller. The format of DomainNameToJoin places no constraint on the format of MachineName and vice versa; thus, each of the following permutations are accepted:
NetBIOS name\NetBIOS name
NetBIOS name\Internet host name
FQDN (2)\NetBIOS name
MachineAccountOU: A pointer to a string that contains [RFC1777] the format name of the organizational unit (OU) directory object under which the machine account directory object is created. This parameter is optional. If specified, this string MUST contain the full path; for example, OU=testOU,DC=domain,DC=Domain,DC=com.
AccountName: A pointer to a string that specifies an account name in the domain DomainNameParam to use when connecting to a domain controller. This parameter is optional. If this parameter is NULL, the caller's account name MUST be used. If this parameter is specified, the format MUST be one of the following:
<NetBIOSDomainName>\<UserName>
<FullyQualifiedDNSDomainName>\<UserName>
<UserName>@<FullyQualifiedDNSDomainName>
Password: A pointer to a JOINPR_ENCRYPTED_USER_PASSWORD structure (section 2.2.5.18) that specifies the encrypted password to use with the AccountName parameter. Sections 3.2.4.13.1 and 3.2.4.13.3 specify the processing of this parameter.
Options: A 32-bit bitfield that specifies modifications to default server (2) behavior in message processing.<58>
-
Value/code
Meaning
NETSETUP_JOIN_DOMAIN
0x00000001
Joins the computer to a domain. The default action is to join the computer to a workgroup.
NETSETUP_ACCT_CREATE
0x00000002
Creates the account on the domain. The name is the persisted abstract state ComputerNameNetBIOS (section 3.2.1.5) unless this behavior is altered by another option such as NETSETUP_JOIN_WITH_NEW_NAME.
NETSETUP_ACCT_DELETE
0x00000004
Disables the old account when the join operation occurs on a computer that is already joined to a domain.
Important This flag is neither supported nor tested for use with NetrJoinDomain2; therefore, its use is not specified in any message processing.
NETSETUP_DOMAIN_JOIN_IF_JOINED
0x00000020
Allows a join to a new domain even if the computer is already joined to a domain.
NETSETUP_JOIN_UNSECURE
0x00000040
Performs an unsecured join. It MUST be used only in conjunction with the NETSETUP_MACHINE_PWD_PASSED flag.
NETSETUP_MACHINE_PWD_PASSED
0x00000080
Indicates that the Password parameter SHOULD<59> specify the password for the machine joining the domain.
This flag is valid for unsecured joins, which are indicated by setting the NETSETUP_JOIN_UNSECURE flag, or for read-only joins, which are indicated by setting the NETSETUP_JOIN_READONLY flag. If this flag is set, the value of Password determines the value stored for the computer password during the join process.
NETSETUP_DEFER_SPN_SET
0x00000100
Indicates that the service principal name (SPN) and the DnsHostName properties on the computer SHOULD NOT<60> be updated at this time, but instead SHOULD<61> be updated during a subsequent call to NetrRenameMachineInDomain2 (section 3.2.4.15).
NETSETUP_JOIN_DC_ACCOUNT
0x00000200
Indicates that the join SHOULD<62> be allowed if an existing account exists and it is a domain controller account.<63>
NETSETUP_JOIN_WITH_NEW_NAME
0x00000400
Indicates that the join SHOULD<64>occur using the new computer name.
NETSETUP_JOIN_READONLY
0x00000800
Specifies that the join SHOULD<65> be performed in a read-only manner against an existing account object. This option is intended to enable the server to join a domain using a read-only domain controller.
NETSETUP_INSTALL_INVOCATION
0x00040000
Indicates that the protocol method was invoked during installation.
Return Values: When the message processing result meets the description in column two of the following table, this method MUST return one of the following values ([MS-ERREF] section 2.2).
-
Value/code
Meaning
NERR_Success
0x00000000
The operation completed successfully.
ERROR_FILE_NOT_FOUND
0x00000002
The object was not found.
ERROR_ACCESS_DENIED
0x00000005
Access is denied.
ERROR_NOT_SUPPORTED
0x00000032
The request is not supported.
ERROR_INVALID_PASSWORD
0x00000056
The specified network password is not correct.
ERROR_INVALID_PARAMETER
0x00000057
The parameter is incorrect.
ERROR_PASSWORD_RESTRICTION
0x0000052D
Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain.
ERROR_LOGON_FAILURE
0x0000052E
Logon failure: unknown user name or bad password.
ERROR_NONE_MAPPED
0x00000534
The account was not found.
ERROR_INVALID_DOMAIN_ROLE
0x0000054A
The name of a domain controller was provided in the DomainNameParam parameter, and validation of that domain controller failed. Validation is specified in the message-processing steps for the section "Domain Join" later.
ERROR_NO_SUCH_DOMAIN
0x0000054B
The specified domain either does not exist or could not be contacted.
RPC_S_PROTSEQ_NOT_SUPPORTED
0x000006A7
The RPC protocol sequence is not supported.
RPC_S_CALL_IN_PROGRESS
0x000006FF
A remote procedure call is already in progress.<66>
NERR_UserExists
0x000008B0
The user account already exists.
NERR_SetupAlreadyJoined
0x00000A83
This computer is already joined to a domain.
NERR_SetupDomainController
0x00000A85
This computer is a domain controller and cannot be unjoined from a domain.
NERR_InvalidWorkgroupName
0x00000A87
The specified workgroup name is invalid.
Any other return value MUST conform to the error code requirements in Protocol Details (section 3).
Message processing for the NetrJoinDomain2 method specifies the behavior of joining either a domain or a workgroup. The behavior of this method is covered in the following subsections:
Section 3.2.4.13.1 specifies the message processing that is common to both domain and workgroup joins.
Section 3.2.4.13.2 specifies the state transition associated with a domain join.
Section 3.2.4.13.3 specifies the message processing that is involved in a domain join.
Section 3.2.4.13.4 specifies the message processing that is involved in a workgroup join.
Several password data elements are involved in message processing for the NetrJoinDomain2 method, and they are distinguished as follows:
Password: A parameter to this method, either the password corresponding to the AccountName that is used to authenticate (2) at the domain controller or the password used for the computer account. The bits in the Options parameter determine how Password is used. This element is distinct from the client data model element Password that is defined in section 3.2.1.6.
PasswordString: The Unicode UTF-8 string that corresponds to the plaintext form of the password in Password. This variable is relevant to sections 3.2.4.13.1 and 3.2.4.13.3.
ComputerPasswordString: The ASCII string that contains the plaintext form of the password for the computer account. This variable is relevant to section 3.2.4.13.3.