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
7 use shared::lmcons::NET_API_STATUS;
8 use shared::minwindef::{BYTE, DWORD, PBYTE, PDWORD, ULONG};
9 use um::wincrypt::PCCERT_CONTEXT;
10 use um::winnt::{HRESULT, LPCWSTR, LPWSTR, PVOID};
11 ENUM!{enum NETSETUP_NAME_TYPE {
12     NetSetupUnknown = 0,
13     NetSetupMachine,
14     NetSetupWorkgroup,
15     NetSetupDomain,
16     NetSetupNonExistentDomain,
17     NetSetupDnsMachine,
18 }}
19 pub type PNETSETUP_NAME_TYPE = *mut NETSETUP_NAME_TYPE;
20 ENUM!{enum DSREG_JOIN_TYPE {
21     DSREG_UNKNOWN_JOIN = 0,
22     DSREG_DEVICE_JOIN = 1,
23     DSREG_WORKPLACE_JOIN = 2,
24 }}
25 pub type PDSREG_JOIN_TYPE = *mut DSREG_JOIN_TYPE;
26 STRUCT!{struct DSREG_USER_INFO {
27     pszUserEmail: LPWSTR,
28     pszUserKeyId: LPWSTR,
29     pszUserKeyName: LPWSTR,
30 }}
31 pub type PDSREG_USER_INFO = *mut DSREG_USER_INFO;
32 STRUCT!{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 }}
46 pub type PDSREG_JOIN_INFO = *mut DSREG_JOIN_INFO;
47 pub const NETSETUP_JOIN_DOMAIN: DWORD = 0x00000001;
48 pub const NETSETUP_ACCT_CREATE: DWORD = 0x00000002;
49 pub const NETSETUP_ACCT_DELETE: DWORD = 0x00000004;
50 pub const NETSETUP_WIN9X_UPGRADE: DWORD = 0x00000010;
51 pub const NETSETUP_DOMAIN_JOIN_IF_JOINED: DWORD = 0x00000020;
52 pub const NETSETUP_JOIN_UNSECURE: DWORD = 0x00000040;
53 pub const NETSETUP_MACHINE_PWD_PASSED: DWORD = 0x00000080;
54 pub const NETSETUP_DEFER_SPN_SET: DWORD = 0x00000100;
55 pub const NETSETUP_JOIN_DC_ACCOUNT: DWORD = 0x00000200;
56 pub const NETSETUP_JOIN_WITH_NEW_NAME: DWORD = 0x00000400;
57 pub const NETSETUP_JOIN_READONLY: DWORD = 0x00000800;
58 pub const NETSETUP_DNS_NAME_CHANGES_ONLY: DWORD = 0x00001000;
59 pub const NETSETUP_INSTALL_INVOCATION: DWORD = 0x00040000;
60 pub const NETSETUP_AMBIGUOUS_DC: DWORD = 0x00001000;
61 pub const NETSETUP_NO_NETLOGON_CACHE: DWORD = 0x00002000;
62 pub const NETSETUP_DONT_CONTROL_SERVICES: DWORD = 0x00004000;
63 pub const NETSETUP_SET_MACHINE_NAME: DWORD = 0x00008000;
64 pub const NETSETUP_FORCE_SPN_SET: DWORD = 0x00010000;
65 pub const NETSETUP_NO_ACCT_REUSE: DWORD = 0x00020000;
66 pub const NETSETUP_ALT_SAMACCOUNTNAME: DWORD = 0x00020000;
67 pub const NETSETUP_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x10000000;
68 pub const NETSETUP_VALID_UNJOIN_FLAGS: DWORD = NETSETUP_ACCT_DELETE
69     | NETSETUP_IGNORE_UNSUPPORTED_FLAGS | NETSETUP_JOIN_DC_ACCOUNT;
70 pub 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;
73 extern "system" {
NetJoinDomain( lpServer: LPCWSTR, lpDomain: LPCWSTR, lpMachineAccountOU: LPCWSTR, lpAccount: LPCWSTR, lpPassword: LPCWSTR, fJoinOptions: DWORD, ) -> NET_API_STATUS74     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;
NetUnjoinDomain( lpServer: LPCWSTR, lpAccount: LPCWSTR, lpPassword: LPCWSTR, fUnjoinOptions: DWORD, ) -> NET_API_STATUS82     pub fn NetUnjoinDomain(
83         lpServer: LPCWSTR,
84         lpAccount: LPCWSTR,
85         lpPassword: LPCWSTR,
86         fUnjoinOptions: DWORD,
87     ) -> NET_API_STATUS;
NetRenameMachineInDomain( lpServer: LPCWSTR, lpNewMachineName: LPCWSTR, lpAccount: LPCWSTR, lpPassword: LPCWSTR, fRenameOptions: DWORD, ) -> NET_API_STATUS88     pub fn NetRenameMachineInDomain(
89         lpServer: LPCWSTR,
90         lpNewMachineName: LPCWSTR,
91         lpAccount: LPCWSTR,
92         lpPassword: LPCWSTR,
93         fRenameOptions: DWORD,
94     ) -> NET_API_STATUS;
NetValidateName( lpServer: LPCWSTR, lpName: LPCWSTR, lpAccount: LPCWSTR, lpPassword: LPCWSTR, NameType: NETSETUP_NAME_TYPE, ) -> NET_API_STATUS95     pub fn NetValidateName(
96         lpServer: LPCWSTR,
97         lpName: LPCWSTR,
98         lpAccount: LPCWSTR,
99         lpPassword: LPCWSTR,
100         NameType: NETSETUP_NAME_TYPE,
101     ) -> NET_API_STATUS;
NetGetJoinableOUs( lpServer: LPCWSTR, lpDomain: LPCWSTR, lpAccount: LPCWSTR, lpPassword: LPCWSTR, OUCount: *mut DWORD, OUs: *mut *mut LPWSTR, ) -> NET_API_STATUS102     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 }
111 pub const NET_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x01;
112 extern "system" {
NetAddAlternateComputerName( Server: LPCWSTR, AlternateName: LPCWSTR, DomainAccount: LPCWSTR, DomainAccountPassword: LPCWSTR, Reserved: ULONG, ) -> NET_API_STATUS113     pub fn NetAddAlternateComputerName(
114         Server: LPCWSTR,
115         AlternateName: LPCWSTR,
116         DomainAccount: LPCWSTR,
117         DomainAccountPassword: LPCWSTR,
118         Reserved: ULONG,
119     ) -> NET_API_STATUS;
NetRemoveAlternateComputerName( Server: LPCWSTR, AlternateName: LPCWSTR, DomainAccount: LPCWSTR, DomainAccountPassword: LPCWSTR, Reserved: ULONG, ) -> NET_API_STATUS120     pub fn NetRemoveAlternateComputerName(
121         Server: LPCWSTR,
122         AlternateName: LPCWSTR,
123         DomainAccount: LPCWSTR,
124         DomainAccountPassword: LPCWSTR,
125         Reserved: ULONG,
126     ) -> NET_API_STATUS;
NetSetPrimaryComputerName( Server: LPCWSTR, PrimaryName: LPCWSTR, DomainAccount: LPCWSTR, DomainAccountPassword: LPCWSTR, Reserved: ULONG, ) -> NET_API_STATUS127     pub fn NetSetPrimaryComputerName(
128         Server: LPCWSTR,
129         PrimaryName: LPCWSTR,
130         DomainAccount: LPCWSTR,
131         DomainAccountPassword: LPCWSTR,
132         Reserved: ULONG,
133     ) -> NET_API_STATUS;
134 }
135 ENUM!{enum NET_COMPUTER_NAME_TYPE {
136     NetPrimaryComputerName,
137     NetAlternateComputerNames,
138     NetAllComputerNames,
139     NetComputerNameTypeMax,
140 }}
141 pub type PNET_COMPUTER_NAME_TYPE = *mut NET_COMPUTER_NAME_TYPE;
142 extern "system" {
NetEnumerateComputerNames( Server: LPCWSTR, NameType: NET_COMPUTER_NAME_TYPE, Reserved: ULONG, EntryCount: PDWORD, ComputerNames: *mut *mut LPWSTR, ) -> NET_API_STATUS143     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 }
151 pub const NETSETUP_PROVISION_DOWNLEVEL_PRIV_SUPPORT: DWORD = 0x00000001;
152 pub const NETSETUP_PROVISION_REUSE_ACCOUNT: DWORD = 0x00000002;
153 pub const NETSETUP_PROVISION_USE_DEFAULT_PASSWORD: DWORD = 0x00000004;
154 pub const NETSETUP_PROVISION_SKIP_ACCOUNT_SEARCH: DWORD = 0x00000008;
155 pub const NETSETUP_PROVISION_ROOT_CA_CERTS: DWORD = 0x00000010;
156 pub const NETSETUP_PROVISION_PERSISTENTSITE: DWORD = 0x00000020;
157 pub const NETSETUP_PROVISION_ONLINE_CALLER: DWORD = 0x40000000;
158 pub const NETSETUP_PROVISION_CHECK_PWD_ONLY: DWORD = 0x80000000;
159 extern "system" {
NetProvisionComputerAccount( lpDomain: LPCWSTR, lpMachineName: LPCWSTR, lpMachineAccountOU: LPCWSTR, lpDcName: LPCWSTR, dwOptions: DWORD, pProvisionBinData: *mut PBYTE, pdwProvisionBinDataSize: *mut DWORD, pProvisionTextData: *mut LPWSTR, ) -> NET_API_STATUS160     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;
NetRequestOfflineDomainJoin( pProvisionBinData: *mut BYTE, cbProvisionBinDataSize: DWORD, dwOptions: DWORD, lpWindowsPath: LPCWSTR, ) -> NET_API_STATUS170     pub fn NetRequestOfflineDomainJoin(
171         pProvisionBinData: *mut BYTE,
172         cbProvisionBinDataSize: DWORD,
173         dwOptions: DWORD,
174         lpWindowsPath: LPCWSTR,
175     ) -> NET_API_STATUS;
176 }
177 pub const NETSETUP_PROVISIONING_PARAMS_WIN8_VERSION: DWORD = 0x00000001;
178 pub const NETSETUP_PROVISIONING_PARAMS_CURRENT_VERSION: DWORD = 0x00000002;
179 STRUCT!{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 }}
196 pub type PNETSETUP_PROVISIONING_PARAMS = *mut NETSETUP_PROVISIONING_PARAMS;
197 extern "system" {
NetCreateProvisioningPackage( pProvisioningParams: PNETSETUP_PROVISIONING_PARAMS, ppPackageBinData: *mut PBYTE, pdwPackageBinDataSize: *mut DWORD, ppPackageTextData: *mut LPWSTR, ) -> NET_API_STATUS198     pub fn NetCreateProvisioningPackage(
199         pProvisioningParams: PNETSETUP_PROVISIONING_PARAMS,
200         ppPackageBinData: *mut PBYTE,
201         pdwPackageBinDataSize: *mut DWORD,
202         ppPackageTextData: *mut LPWSTR,
203     ) -> NET_API_STATUS;
NetRequestProvisioningPackageInstall( pPackageBinData: *mut BYTE, dwPackageBinDataSize: DWORD, dwProvisionOptions: DWORD, lpWindowsPath: LPCWSTR, pvReserved: PVOID, ) -> NET_API_STATUS204     pub fn NetRequestProvisioningPackageInstall(
205         pPackageBinData: *mut BYTE,
206         dwPackageBinDataSize: DWORD,
207         dwProvisionOptions: DWORD,
208         lpWindowsPath: LPCWSTR,
209         pvReserved: PVOID,
210     ) -> NET_API_STATUS;
NetGetAadJoinInformation( pcszTenantId: LPCWSTR, ppJoinInfo: *mut PDSREG_JOIN_INFO, ) -> HRESULT211     pub fn NetGetAadJoinInformation(
212         pcszTenantId: LPCWSTR,
213         ppJoinInfo: *mut PDSREG_JOIN_INFO,
214     ) -> HRESULT;
NetFreeAadJoinInformation( pJoinInfo: PDSREG_JOIN_INFO, )215     pub fn NetFreeAadJoinInformation(
216         pJoinInfo: PDSREG_JOIN_INFO,
217     );
218 }
219 ENUM!{enum NETSETUP_JOIN_STATUS {
220     NetSetupUnknownStatus = 0,
221     NetSetupUnjoined,
222     NetSetupWorkgroupName,
223     NetSetupDomainName,
224 }}
225 pub type PNETSETUP_JOIN_STATUS = *mut NETSETUP_JOIN_STATUS;
226 extern "system" {
NetGetJoinInformation( lpServer: LPCWSTR, lpNameBuffer: *mut LPWSTR, BufferType: PNETSETUP_JOIN_STATUS, ) -> NET_API_STATUS227     pub fn NetGetJoinInformation(
228         lpServer: LPCWSTR,
229         lpNameBuffer: *mut LPWSTR,
230         BufferType: PNETSETUP_JOIN_STATUS,
231     ) -> NET_API_STATUS;
232 }
233