winapi_ui_automation/um/
lmjoin.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6// Definitions and prototypes for the Net setup apis
7use shared::lmcons::NET_API_STATUS;
8use shared::minwindef::{BYTE, DWORD, PBYTE, PDWORD, ULONG};
9use um::wincrypt::PCCERT_CONTEXT;
10use um::winnt::{HRESULT, LPCWSTR, LPWSTR, PVOID};
11ENUM!{enum NETSETUP_NAME_TYPE {
12    NetSetupUnknown = 0,
13    NetSetupMachine,
14    NetSetupWorkgroup,
15    NetSetupDomain,
16    NetSetupNonExistentDomain,
17    NetSetupDnsMachine,
18}}
19pub type PNETSETUP_NAME_TYPE = *mut NETSETUP_NAME_TYPE;
20ENUM!{enum DSREG_JOIN_TYPE {
21    DSREG_UNKNOWN_JOIN = 0,
22    DSREG_DEVICE_JOIN = 1,
23    DSREG_WORKPLACE_JOIN = 2,
24}}
25pub type PDSREG_JOIN_TYPE = *mut DSREG_JOIN_TYPE;
26STRUCT!{struct DSREG_USER_INFO {
27    pszUserEmail: LPWSTR,
28    pszUserKeyId: LPWSTR,
29    pszUserKeyName: LPWSTR,
30}}
31pub type PDSREG_USER_INFO = *mut DSREG_USER_INFO;
32STRUCT!{struct DSREG_JOIN_INFO {
33    joinType: DSREG_JOIN_TYPE,
34    pJoinCertificate: PCCERT_CONTEXT,
35    pszDeviceId: LPWSTR,
36    pszIdpDomain: LPWSTR,
37    pszTenantId: LPWSTR,
38    pszJoinUserEmail: LPWSTR,
39    pszTenantDisplayName: LPWSTR,
40    pszMdmEnrollmentUrl: LPWSTR,
41    pszMdmTermsOfUseUrl: LPWSTR,
42    pszMdmComplianceUrl: LPWSTR,
43    pszUserSettingSyncUrl: LPWSTR,
44    pUserInfo: *mut DSREG_USER_INFO,
45}}
46pub type PDSREG_JOIN_INFO = *mut DSREG_JOIN_INFO;
47pub const NETSETUP_JOIN_DOMAIN: DWORD = 0x00000001;
48pub const NETSETUP_ACCT_CREATE: DWORD = 0x00000002;
49pub const NETSETUP_ACCT_DELETE: DWORD = 0x00000004;
50pub const NETSETUP_WIN9X_UPGRADE: DWORD = 0x00000010;
51pub const NETSETUP_DOMAIN_JOIN_IF_JOINED: DWORD = 0x00000020;
52pub const NETSETUP_JOIN_UNSECURE: DWORD = 0x00000040;
53pub const NETSETUP_MACHINE_PWD_PASSED: DWORD = 0x00000080;
54pub const NETSETUP_DEFER_SPN_SET: DWORD = 0x00000100;
55pub const NETSETUP_JOIN_DC_ACCOUNT: DWORD = 0x00000200;
56pub const NETSETUP_JOIN_WITH_NEW_NAME: DWORD = 0x00000400;
57pub const NETSETUP_JOIN_READONLY: DWORD = 0x00000800;
58pub const NETSETUP_DNS_NAME_CHANGES_ONLY: DWORD = 0x00001000;
59pub const NETSETUP_INSTALL_INVOCATION: DWORD = 0x00040000;
60pub const NETSETUP_AMBIGUOUS_DC: DWORD = 0x00001000;
61pub const NETSETUP_NO_NETLOGON_CACHE: DWORD = 0x00002000;
62pub const NETSETUP_DONT_CONTROL_SERVICES: DWORD = 0x00004000;
63pub const NETSETUP_SET_MACHINE_NAME: DWORD = 0x00008000;
64pub const NETSETUP_FORCE_SPN_SET: DWORD = 0x00010000;
65pub const NETSETUP_NO_ACCT_REUSE: DWORD = 0x00020000;
66pub const NETSETUP_ALT_SAMACCOUNTNAME: DWORD = 0x00020000;
67pub const NETSETUP_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x10000000;
68pub const NETSETUP_VALID_UNJOIN_FLAGS: DWORD = NETSETUP_ACCT_DELETE
69    | NETSETUP_IGNORE_UNSUPPORTED_FLAGS | NETSETUP_JOIN_DC_ACCOUNT;
70pub const NETSETUP_PROCESS_OFFLINE_FLAGS: DWORD = NETSETUP_JOIN_DOMAIN
71    | NETSETUP_DOMAIN_JOIN_IF_JOINED | NETSETUP_JOIN_WITH_NEW_NAME | NETSETUP_DONT_CONTROL_SERVICES
72    | NETSETUP_MACHINE_PWD_PASSED;
73extern "system" {
74    pub fn NetJoinDomain(
75        lpServer: LPCWSTR,
76        lpDomain: LPCWSTR,
77        lpMachineAccountOU: LPCWSTR,
78        lpAccount: LPCWSTR,
79        lpPassword: LPCWSTR,
80        fJoinOptions: DWORD,
81    ) -> NET_API_STATUS;
82    pub fn NetUnjoinDomain(
83        lpServer: LPCWSTR,
84        lpAccount: LPCWSTR,
85        lpPassword: LPCWSTR,
86        fUnjoinOptions: DWORD,
87    ) -> NET_API_STATUS;
88    pub fn NetRenameMachineInDomain(
89        lpServer: LPCWSTR,
90        lpNewMachineName: LPCWSTR,
91        lpAccount: LPCWSTR,
92        lpPassword: LPCWSTR,
93        fRenameOptions: DWORD,
94    ) -> NET_API_STATUS;
95    pub fn NetValidateName(
96        lpServer: LPCWSTR,
97        lpName: LPCWSTR,
98        lpAccount: LPCWSTR,
99        lpPassword: LPCWSTR,
100        NameType: NETSETUP_NAME_TYPE,
101    ) -> NET_API_STATUS;
102    pub fn NetGetJoinableOUs(
103        lpServer: LPCWSTR,
104        lpDomain: LPCWSTR,
105        lpAccount: LPCWSTR,
106        lpPassword: LPCWSTR,
107        OUCount: *mut DWORD,
108        OUs: *mut *mut LPWSTR,
109    ) -> NET_API_STATUS;
110}
111pub const NET_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x01;
112extern "system" {
113    pub fn NetAddAlternateComputerName(
114        Server: LPCWSTR,
115        AlternateName: LPCWSTR,
116        DomainAccount: LPCWSTR,
117        DomainAccountPassword: LPCWSTR,
118        Reserved: ULONG,
119    ) -> NET_API_STATUS;
120    pub fn NetRemoveAlternateComputerName(
121        Server: LPCWSTR,
122        AlternateName: LPCWSTR,
123        DomainAccount: LPCWSTR,
124        DomainAccountPassword: LPCWSTR,
125        Reserved: ULONG,
126    ) -> NET_API_STATUS;
127    pub fn NetSetPrimaryComputerName(
128        Server: LPCWSTR,
129        PrimaryName: LPCWSTR,
130        DomainAccount: LPCWSTR,
131        DomainAccountPassword: LPCWSTR,
132        Reserved: ULONG,
133    ) -> NET_API_STATUS;
134}
135ENUM!{enum NET_COMPUTER_NAME_TYPE {
136    NetPrimaryComputerName,
137    NetAlternateComputerNames,
138    NetAllComputerNames,
139    NetComputerNameTypeMax,
140}}
141pub type PNET_COMPUTER_NAME_TYPE = *mut NET_COMPUTER_NAME_TYPE;
142extern "system" {
143    pub fn NetEnumerateComputerNames(
144        Server: LPCWSTR,
145        NameType: NET_COMPUTER_NAME_TYPE,
146        Reserved: ULONG,
147        EntryCount: PDWORD,
148        ComputerNames: *mut *mut LPWSTR,
149    ) -> NET_API_STATUS;
150}
151pub const NETSETUP_PROVISION_DOWNLEVEL_PRIV_SUPPORT: DWORD = 0x00000001;
152pub const NETSETUP_PROVISION_REUSE_ACCOUNT: DWORD = 0x00000002;
153pub const NETSETUP_PROVISION_USE_DEFAULT_PASSWORD: DWORD = 0x00000004;
154pub const NETSETUP_PROVISION_SKIP_ACCOUNT_SEARCH: DWORD = 0x00000008;
155pub const NETSETUP_PROVISION_ROOT_CA_CERTS: DWORD = 0x00000010;
156pub const NETSETUP_PROVISION_PERSISTENTSITE: DWORD = 0x00000020;
157pub const NETSETUP_PROVISION_ONLINE_CALLER: DWORD = 0x40000000;
158pub const NETSETUP_PROVISION_CHECK_PWD_ONLY: DWORD = 0x80000000;
159extern "system" {
160    pub fn NetProvisionComputerAccount(
161        lpDomain: LPCWSTR,
162        lpMachineName: LPCWSTR,
163        lpMachineAccountOU: LPCWSTR,
164        lpDcName: LPCWSTR,
165        dwOptions: DWORD,
166        pProvisionBinData: *mut PBYTE,
167        pdwProvisionBinDataSize: *mut DWORD,
168        pProvisionTextData: *mut LPWSTR,
169    ) -> NET_API_STATUS;
170    pub fn NetRequestOfflineDomainJoin(
171        pProvisionBinData: *mut BYTE,
172        cbProvisionBinDataSize: DWORD,
173        dwOptions: DWORD,
174        lpWindowsPath: LPCWSTR,
175    ) -> NET_API_STATUS;
176}
177pub const NETSETUP_PROVISIONING_PARAMS_WIN8_VERSION: DWORD = 0x00000001;
178pub const NETSETUP_PROVISIONING_PARAMS_CURRENT_VERSION: DWORD = 0x00000002;
179STRUCT!{struct NETSETUP_PROVISIONING_PARAMS {
180    dwVersion: DWORD,
181    lpDomain: LPCWSTR,
182    lpHostName: LPCWSTR,
183    lpMachineAccountOU: LPCWSTR,
184    lpDcName: LPCWSTR,
185    dwProvisionOptions: DWORD,
186    aCertTemplateNames: *mut LPCWSTR,
187    cCertTemplateNames: DWORD,
188    aMachinePolicyNames: *mut LPCWSTR,
189    cMachinePolicyNames: DWORD,
190    aMachinePolicyPaths: *mut LPCWSTR,
191    cMachinePolicyPaths: DWORD,
192    lpNetbiosName: LPWSTR,
193    lpSiteName: LPWSTR,
194    lpPrimaryDNSDomain: LPWSTR,
195}}
196pub type PNETSETUP_PROVISIONING_PARAMS = *mut NETSETUP_PROVISIONING_PARAMS;
197extern "system" {
198    pub fn NetCreateProvisioningPackage(
199        pProvisioningParams: PNETSETUP_PROVISIONING_PARAMS,
200        ppPackageBinData: *mut PBYTE,
201        pdwPackageBinDataSize: *mut DWORD,
202        ppPackageTextData: *mut LPWSTR,
203    ) -> NET_API_STATUS;
204    pub fn NetRequestProvisioningPackageInstall(
205        pPackageBinData: *mut BYTE,
206        dwPackageBinDataSize: DWORD,
207        dwProvisionOptions: DWORD,
208        lpWindowsPath: LPCWSTR,
209        pvReserved: PVOID,
210    ) -> NET_API_STATUS;
211    pub fn NetGetAadJoinInformation(
212        pcszTenantId: LPCWSTR,
213        ppJoinInfo: *mut PDSREG_JOIN_INFO,
214    ) -> HRESULT;
215    pub fn NetFreeAadJoinInformation(
216        pJoinInfo: PDSREG_JOIN_INFO,
217    );
218}
219ENUM!{enum NETSETUP_JOIN_STATUS {
220    NetSetupUnknownStatus = 0,
221    NetSetupUnjoined,
222    NetSetupWorkgroupName,
223    NetSetupDomainName,
224}}
225pub type PNETSETUP_JOIN_STATUS = *mut NETSETUP_JOIN_STATUS;
226extern "system" {
227    pub fn NetGetJoinInformation(
228        lpServer: LPCWSTR,
229        lpNameBuffer: *mut LPWSTR,
230        BufferType: PNETSETUP_JOIN_STATUS,
231    ) -> NET_API_STATUS;
232}