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 //! This file contains structures, function prototypes, and definitions for the DsGetDcName API. 7 use shared::guiddef::GUID; 8 use shared::minwindef::{DWORD, PULONG, ULONG}; 9 use shared::ws2def::{LPSOCKET_ADDRESS, PSOCKET_ADDRESS}; 10 use um::ntsecapi::PLSA_FOREST_TRUST_INFORMATION; 11 use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PHANDLE, PSID}; 12 pub const DS_FORCE_REDISCOVERY: ULONG = 0x00000001; 13 pub const DS_DIRECTORY_SERVICE_REQUIRED: ULONG = 0x00000010; 14 pub const DS_DIRECTORY_SERVICE_PREFERRED: ULONG = 0x00000020; 15 pub const DS_GC_SERVER_REQUIRED: ULONG = 0x00000040; 16 pub const DS_PDC_REQUIRED: ULONG = 0x00000080; 17 pub const DS_BACKGROUND_ONLY: ULONG = 0x00000100; 18 pub const DS_IP_REQUIRED: ULONG = 0x00000200; 19 pub const DS_KDC_REQUIRED: ULONG = 0x00000400; 20 pub const DS_TIMESERV_REQUIRED: ULONG = 0x00000800; 21 pub const DS_WRITABLE_REQUIRED: ULONG = 0x00001000; 22 pub const DS_GOOD_TIMESERV_PREFERRED: ULONG = 0x00002000; 23 pub const DS_AVOID_SELF: ULONG = 0x00004000; 24 pub const DS_ONLY_LDAP_NEEDED: ULONG = 0x00008000; 25 pub const DS_IS_FLAT_NAME: ULONG = 0x00010000; 26 pub const DS_IS_DNS_NAME: ULONG = 0x00020000; 27 pub const DS_TRY_NEXTCLOSEST_SITE: ULONG = 0x00040000; 28 pub const DS_DIRECTORY_SERVICE_6_REQUIRED: ULONG = 0x00080000; 29 pub const DS_WEB_SERVICE_REQUIRED: ULONG = 0x00100000; 30 pub const DS_DIRECTORY_SERVICE_8_REQUIRED: ULONG = 0x00200000; 31 pub const DS_DIRECTORY_SERVICE_9_REQUIRED: ULONG = 0x00400000; 32 pub const DS_DIRECTORY_SERVICE_10_REQUIRED: ULONG = 0x00800000; 33 pub const DS_RETURN_DNS_NAME: ULONG = 0x40000000; 34 pub const DS_RETURN_FLAT_NAME: ULONG = 0x80000000; 35 pub const DSGETDC_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_DIRECTORY_SERVICE_REQUIRED 36 | DS_DIRECTORY_SERVICE_PREFERRED | DS_GC_SERVER_REQUIRED | DS_PDC_REQUIRED | DS_BACKGROUND_ONLY 37 | DS_IP_REQUIRED | DS_KDC_REQUIRED | DS_TIMESERV_REQUIRED | DS_WRITABLE_REQUIRED 38 | DS_GOOD_TIMESERV_PREFERRED | DS_AVOID_SELF | DS_ONLY_LDAP_NEEDED | DS_IS_FLAT_NAME 39 | DS_IS_DNS_NAME | DS_TRY_NEXTCLOSEST_SITE | DS_DIRECTORY_SERVICE_6_REQUIRED 40 | DS_DIRECTORY_SERVICE_8_REQUIRED | DS_DIRECTORY_SERVICE_9_REQUIRED 41 | DS_DIRECTORY_SERVICE_10_REQUIRED | DS_WEB_SERVICE_REQUIRED | DS_RETURN_FLAT_NAME 42 | DS_RETURN_DNS_NAME; 43 STRUCT!{struct DOMAIN_CONTROLLER_INFOA { 44 DomainControllerName: LPSTR, 45 DomainControllerAddress: LPSTR, 46 DomainControllerAddressType: ULONG, 47 DomainGuid: GUID, 48 DomainName: LPSTR, 49 DnsForestName: LPSTR, 50 Flags: ULONG, 51 DcSiteName: LPSTR, 52 ClientSiteName: LPSTR, 53 }} 54 pub type PDOMAIN_CONTROLLER_INFOA = *mut DOMAIN_CONTROLLER_INFOA; 55 STRUCT!{struct DOMAIN_CONTROLLER_INFOW { 56 DomainControllerName: LPWSTR, 57 DomainControllerAddress: LPWSTR, 58 DomainControllerAddressType: ULONG, 59 DomainGuid: GUID, 60 DomainName: LPWSTR, 61 DnsForestName: LPWSTR, 62 Flags: ULONG, 63 DcSiteName: LPWSTR, 64 ClientSiteName: LPWSTR, 65 }} 66 pub type PDOMAIN_CONTROLLER_INFOW = *mut DOMAIN_CONTROLLER_INFOW; 67 pub const DS_INET_ADDRESS: ULONG = 1; 68 pub const DS_NETBIOS_ADDRESS: ULONG = 2; 69 pub const DS_PDC_FLAG: ULONG = 0x00000001; 70 pub const DS_GC_FLAG: ULONG = 0x00000004; 71 pub const DS_LDAP_FLAG: ULONG = 0x00000008; 72 pub const DS_DS_FLAG: ULONG = 0x00000010; 73 pub const DS_KDC_FLAG: ULONG = 0x00000020; 74 pub const DS_TIMESERV_FLAG: ULONG = 0x00000040; 75 pub const DS_CLOSEST_FLAG: ULONG = 0x00000080; 76 pub const DS_WRITABLE_FLAG: ULONG = 0x00000100; 77 pub const DS_GOOD_TIMESERV_FLAG: ULONG = 0x00000200; 78 pub const DS_NDNC_FLAG: ULONG = 0x00000400; 79 pub const DS_SELECT_SECRET_DOMAIN_6_FLAG: ULONG = 0x00000800; 80 pub const DS_FULL_SECRET_DOMAIN_6_FLAG: ULONG = 0x00001000; 81 pub const DS_WS_FLAG: ULONG = 0x00002000; 82 pub const DS_DS_8_FLAG: ULONG = 0x00004000; 83 pub const DS_DS_9_FLAG: ULONG = 0x00008000; 84 pub const DS_DS_10_FLAG: ULONG = 0x00010000; 85 pub const DS_PING_FLAGS: ULONG = 0x000FFFFF; 86 pub const DS_DNS_CONTROLLER_FLAG: ULONG = 0x20000000; 87 pub const DS_DNS_DOMAIN_FLAG: ULONG = 0x40000000; 88 pub const DS_DNS_FOREST_FLAG: ULONG = 0x80000000; 89 extern "system" { DsGetDcNameA( ComputerName: LPCSTR, DomainName: LPCSTR, DomainGuid: *mut GUID, SiteName: LPCSTR, Flags: ULONG, DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOA, ) -> DWORD90 pub fn DsGetDcNameA( 91 ComputerName: LPCSTR, 92 DomainName: LPCSTR, 93 DomainGuid: *mut GUID, 94 SiteName: LPCSTR, 95 Flags: ULONG, 96 DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOA, 97 ) -> DWORD; DsGetDcNameW( ComputerName: LPCWSTR, DomainName: LPCWSTR, DomainGuid: *mut GUID, SiteName: LPCWSTR, Flags: ULONG, DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOW, ) -> DWORD98 pub fn DsGetDcNameW( 99 ComputerName: LPCWSTR, 100 DomainName: LPCWSTR, 101 DomainGuid: *mut GUID, 102 SiteName: LPCWSTR, 103 Flags: ULONG, 104 DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOW, 105 ) -> DWORD; DsGetSiteNameA( ComputerName: LPCSTR, SiteName: *mut LPSTR, ) -> DWORD106 pub fn DsGetSiteNameA( 107 ComputerName: LPCSTR, 108 SiteName: *mut LPSTR, 109 ) -> DWORD; DsGetSiteNameW( ComputerName: LPCWSTR, SiteName: *mut LPWSTR, ) -> DWORD110 pub fn DsGetSiteNameW( 111 ComputerName: LPCWSTR, 112 SiteName: *mut LPWSTR, 113 ) -> DWORD; DsValidateSubnetNameW( SubnetName: LPCWSTR, ) -> DWORD114 pub fn DsValidateSubnetNameW( 115 SubnetName: LPCWSTR, 116 ) -> DWORD; DsValidateSubnetNameA( SubnetName: LPCSTR, ) -> DWORD117 pub fn DsValidateSubnetNameA( 118 SubnetName: LPCSTR, 119 ) -> DWORD; DsAddressToSiteNamesW( ComputerName: LPCWSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPWSTR, ) -> DWORD120 pub fn DsAddressToSiteNamesW( 121 ComputerName: LPCWSTR, 122 EntryCount: DWORD, 123 SocketAddresses: PSOCKET_ADDRESS, 124 SiteNames: *mut *mut LPWSTR, 125 ) -> DWORD; DsAddressToSiteNamesA( ComputerName: LPCSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPSTR, ) -> DWORD126 pub fn DsAddressToSiteNamesA( 127 ComputerName: LPCSTR, 128 EntryCount: DWORD, 129 SocketAddresses: PSOCKET_ADDRESS, 130 SiteNames: *mut *mut LPSTR, 131 ) -> DWORD; DsAddressToSiteNamesExW( ComputerName: LPCWSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPWSTR, SubnetNames: *mut *mut LPWSTR, ) -> DWORD132 pub fn DsAddressToSiteNamesExW( 133 ComputerName: LPCWSTR, 134 EntryCount: DWORD, 135 SocketAddresses: PSOCKET_ADDRESS, 136 SiteNames: *mut *mut LPWSTR, 137 SubnetNames: *mut *mut LPWSTR, 138 ) -> DWORD; DsAddressToSiteNamesExA( ComputerName: LPCSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPSTR, SubnetNames: *mut *mut LPSTR, ) -> DWORD139 pub fn DsAddressToSiteNamesExA( 140 ComputerName: LPCSTR, 141 EntryCount: DWORD, 142 SocketAddresses: PSOCKET_ADDRESS, 143 SiteNames: *mut *mut LPSTR, 144 SubnetNames: *mut *mut LPSTR, 145 ) -> DWORD; 146 } 147 pub const DS_DOMAIN_IN_FOREST: ULONG = 0x0001; 148 pub const DS_DOMAIN_DIRECT_OUTBOUND: ULONG = 0x0002; 149 pub const DS_DOMAIN_TREE_ROOT: ULONG = 0x0004; 150 pub const DS_DOMAIN_PRIMARY: ULONG = 0x0008; 151 pub const DS_DOMAIN_NATIVE_MODE: ULONG = 0x0010; 152 pub const DS_DOMAIN_DIRECT_INBOUND: ULONG = 0x0020; 153 pub const DS_DOMAIN_VALID_FLAGS: ULONG = DS_DOMAIN_IN_FOREST | DS_DOMAIN_DIRECT_OUTBOUND 154 | DS_DOMAIN_TREE_ROOT | DS_DOMAIN_PRIMARY | DS_DOMAIN_NATIVE_MODE | DS_DOMAIN_DIRECT_INBOUND; 155 STRUCT!{struct DS_DOMAIN_TRUSTSW { 156 NetbiosDomainName: LPWSTR, 157 DnsDomainName: LPWSTR, 158 Flags: ULONG, 159 ParentIndex: ULONG, 160 TrustType: ULONG, 161 TrustAttributes: ULONG, 162 DomainSid: PSID, 163 DomainGuid: GUID, 164 }} 165 pub type PDS_DOMAIN_TRUSTSW = *mut DS_DOMAIN_TRUSTSW; 166 STRUCT!{struct DS_DOMAIN_TRUSTSA { 167 NetbiosDomainName: LPSTR, 168 DnsDomainName: LPSTR, 169 Flags: ULONG, 170 ParentIndex: ULONG, 171 TrustType: ULONG, 172 TrustAttributes: ULONG, 173 DomainSid: PSID, 174 DomainGuid: GUID, 175 }} 176 pub type PDS_DOMAIN_TRUSTSA = *mut DS_DOMAIN_TRUSTSA; 177 extern "system" { DsEnumerateDomainTrustsW( ServerName: LPWSTR, Flags: ULONG, Domains: *mut PDS_DOMAIN_TRUSTSW, DomainCount: PULONG, ) -> DWORD178 pub fn DsEnumerateDomainTrustsW( 179 ServerName: LPWSTR, 180 Flags: ULONG, 181 Domains: *mut PDS_DOMAIN_TRUSTSW, 182 DomainCount: PULONG, 183 ) -> DWORD; DsEnumerateDomainTrustsA( ServerName: LPSTR, Flags: ULONG, Domains: *mut PDS_DOMAIN_TRUSTSA, DomainCount: PULONG, ) -> DWORD184 pub fn DsEnumerateDomainTrustsA( 185 ServerName: LPSTR, 186 Flags: ULONG, 187 Domains: *mut PDS_DOMAIN_TRUSTSA, 188 DomainCount: PULONG, 189 ) -> DWORD; DsGetForestTrustInformationW( ServerName: LPCWSTR, TrustedDomainName: LPCWSTR, Flags: DWORD, ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, ) -> DWORD190 pub fn DsGetForestTrustInformationW( 191 ServerName: LPCWSTR, 192 TrustedDomainName: LPCWSTR, 193 Flags: DWORD, 194 ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, 195 ) -> DWORD; DsMergeForestTrustInformationW( DomainName: LPCWSTR, NewForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, MergedForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, ) -> DWORD196 pub fn DsMergeForestTrustInformationW( 197 DomainName: LPCWSTR, 198 NewForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, 199 OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, 200 MergedForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, 201 ) -> DWORD; DsGetDcSiteCoverageW( ServerName: LPCWSTR, EntryCount: PULONG, SiteNames: *mut *mut LPWSTR, ) -> DWORD202 pub fn DsGetDcSiteCoverageW( 203 ServerName: LPCWSTR, 204 EntryCount: PULONG, 205 SiteNames: *mut *mut LPWSTR, 206 ) -> DWORD; DsGetDcSiteCoverageA( ServerName: LPCSTR, EntryCount: PULONG, SiteNames: *mut *mut LPSTR, ) -> DWORD207 pub fn DsGetDcSiteCoverageA( 208 ServerName: LPCSTR, 209 EntryCount: PULONG, 210 SiteNames: *mut *mut LPSTR, 211 ) -> DWORD; DsDeregisterDnsHostRecordsW( ServerName: LPWSTR, DnsDomainName: LPWSTR, DomainGuid: *mut GUID, DsaGuid: *mut GUID, DnsHostName: LPWSTR, ) -> DWORD212 pub fn DsDeregisterDnsHostRecordsW( 213 ServerName: LPWSTR, 214 DnsDomainName: LPWSTR, 215 DomainGuid: *mut GUID, 216 DsaGuid: *mut GUID, 217 DnsHostName: LPWSTR, 218 ) -> DWORD; DsDeregisterDnsHostRecordsA( ServerName: LPSTR, DnsDomainName: LPSTR, DomainGuid: *mut GUID, DsaGuid: *mut GUID, DnsHostName: LPSTR, ) -> DWORD219 pub fn DsDeregisterDnsHostRecordsA( 220 ServerName: LPSTR, 221 DnsDomainName: LPSTR, 222 DomainGuid: *mut GUID, 223 DsaGuid: *mut GUID, 224 DnsHostName: LPSTR, 225 ) -> DWORD; 226 } 227 pub const DS_ONLY_DO_SITE_NAME: ULONG = 0x01; 228 pub const DS_NOTIFY_AFTER_SITE_RECORDS: ULONG = 0x02; 229 pub const DS_OPEN_VALID_OPTION_FLAGS: ULONG = DS_ONLY_DO_SITE_NAME 230 | DS_NOTIFY_AFTER_SITE_RECORDS; 231 pub const DS_OPEN_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_ONLY_LDAP_NEEDED 232 | DS_KDC_REQUIRED | DS_PDC_REQUIRED | DS_GC_SERVER_REQUIRED | DS_WRITABLE_REQUIRED; 233 extern "system" { DsGetDcOpenW( DnsName: LPCWSTR, OptionFlags: ULONG, SiteName: LPCWSTR, DomainGuid: *mut GUID, DnsForestName: LPCWSTR, DcFlags: ULONG, RetGetDcContext: PHANDLE, ) -> DWORD234 pub fn DsGetDcOpenW( 235 DnsName: LPCWSTR, 236 OptionFlags: ULONG, 237 SiteName: LPCWSTR, 238 DomainGuid: *mut GUID, 239 DnsForestName: LPCWSTR, 240 DcFlags: ULONG, 241 RetGetDcContext: PHANDLE, 242 ) -> DWORD; DsGetDcOpenA( DnsName: LPCSTR, OptionFlags: ULONG, SiteName: LPCSTR, DomainGuid: *mut GUID, DnsForestName: LPCSTR, DcFlags: ULONG, RetGetDcContext: PHANDLE, ) -> DWORD243 pub fn DsGetDcOpenA( 244 DnsName: LPCSTR, 245 OptionFlags: ULONG, 246 SiteName: LPCSTR, 247 DomainGuid: *mut GUID, 248 DnsForestName: LPCSTR, 249 DcFlags: ULONG, 250 RetGetDcContext: PHANDLE, 251 ) -> DWORD; DsGetDcNextA( GetDcContextHandle: HANDLE, SockAddressCount: PULONG, SockAddresses: *mut LPSOCKET_ADDRESS, DnsHostName: *mut LPSTR, ) -> DWORD252 pub fn DsGetDcNextA( 253 GetDcContextHandle: HANDLE, 254 SockAddressCount: PULONG, 255 SockAddresses: *mut LPSOCKET_ADDRESS, 256 DnsHostName: *mut LPSTR, 257 ) -> DWORD; DsGetDcNextW( GetDcContextHandle: HANDLE, SockAddressCount: PULONG, SockAddresses: *mut LPSOCKET_ADDRESS, DnsHostName: *mut LPWSTR, ) -> DWORD258 pub fn DsGetDcNextW( 259 GetDcContextHandle: HANDLE, 260 SockAddressCount: PULONG, 261 SockAddresses: *mut LPSOCKET_ADDRESS, 262 DnsHostName: *mut LPWSTR, 263 ) -> DWORD; DsGetDcCloseW( GetDcContextHandle: HANDLE, )264 pub fn DsGetDcCloseW( 265 GetDcContextHandle: HANDLE, 266 ); 267 } 268