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