// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! This file contains structures, function prototypes, and definitions for the DsGetDcName API. use shared::guiddef::GUID; use shared::minwindef::{DWORD, PULONG, ULONG}; use shared::ws2def::{LPSOCKET_ADDRESS, PSOCKET_ADDRESS}; use um::ntsecapi::PLSA_FOREST_TRUST_INFORMATION; use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PHANDLE, PSID}; pub const DS_FORCE_REDISCOVERY: ULONG = 0x00000001; pub const DS_DIRECTORY_SERVICE_REQUIRED: ULONG = 0x00000010; pub const DS_DIRECTORY_SERVICE_PREFERRED: ULONG = 0x00000020; pub const DS_GC_SERVER_REQUIRED: ULONG = 0x00000040; pub const DS_PDC_REQUIRED: ULONG = 0x00000080; pub const DS_BACKGROUND_ONLY: ULONG = 0x00000100; pub const DS_IP_REQUIRED: ULONG = 0x00000200; pub const DS_KDC_REQUIRED: ULONG = 0x00000400; pub const DS_TIMESERV_REQUIRED: ULONG = 0x00000800; pub const DS_WRITABLE_REQUIRED: ULONG = 0x00001000; pub const DS_GOOD_TIMESERV_PREFERRED: ULONG = 0x00002000; pub const DS_AVOID_SELF: ULONG = 0x00004000; pub const DS_ONLY_LDAP_NEEDED: ULONG = 0x00008000; pub const DS_IS_FLAT_NAME: ULONG = 0x00010000; pub const DS_IS_DNS_NAME: ULONG = 0x00020000; pub const DS_TRY_NEXTCLOSEST_SITE: ULONG = 0x00040000; pub const DS_DIRECTORY_SERVICE_6_REQUIRED: ULONG = 0x00080000; pub const DS_WEB_SERVICE_REQUIRED: ULONG = 0x00100000; pub const DS_DIRECTORY_SERVICE_8_REQUIRED: ULONG = 0x00200000; pub const DS_DIRECTORY_SERVICE_9_REQUIRED: ULONG = 0x00400000; pub const DS_DIRECTORY_SERVICE_10_REQUIRED: ULONG = 0x00800000; pub const DS_RETURN_DNS_NAME: ULONG = 0x40000000; pub const DS_RETURN_FLAT_NAME: ULONG = 0x80000000; pub const DSGETDC_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_DIRECTORY_SERVICE_REQUIRED | DS_DIRECTORY_SERVICE_PREFERRED | DS_GC_SERVER_REQUIRED | DS_PDC_REQUIRED | DS_BACKGROUND_ONLY | DS_IP_REQUIRED | DS_KDC_REQUIRED | DS_TIMESERV_REQUIRED | DS_WRITABLE_REQUIRED | DS_GOOD_TIMESERV_PREFERRED | DS_AVOID_SELF | DS_ONLY_LDAP_NEEDED | DS_IS_FLAT_NAME | DS_IS_DNS_NAME | DS_TRY_NEXTCLOSEST_SITE | DS_DIRECTORY_SERVICE_6_REQUIRED | DS_DIRECTORY_SERVICE_8_REQUIRED | DS_DIRECTORY_SERVICE_9_REQUIRED | DS_DIRECTORY_SERVICE_10_REQUIRED | DS_WEB_SERVICE_REQUIRED | DS_RETURN_FLAT_NAME | DS_RETURN_DNS_NAME; STRUCT!{struct DOMAIN_CONTROLLER_INFOA { DomainControllerName: LPSTR, DomainControllerAddress: LPSTR, DomainControllerAddressType: ULONG, DomainGuid: GUID, DomainName: LPSTR, DnsForestName: LPSTR, Flags: ULONG, DcSiteName: LPSTR, ClientSiteName: LPSTR, }} pub type PDOMAIN_CONTROLLER_INFOA = *mut DOMAIN_CONTROLLER_INFOA; STRUCT!{struct DOMAIN_CONTROLLER_INFOW { DomainControllerName: LPWSTR, DomainControllerAddress: LPWSTR, DomainControllerAddressType: ULONG, DomainGuid: GUID, DomainName: LPWSTR, DnsForestName: LPWSTR, Flags: ULONG, DcSiteName: LPWSTR, ClientSiteName: LPWSTR, }} pub type PDOMAIN_CONTROLLER_INFOW = *mut DOMAIN_CONTROLLER_INFOW; pub const DS_INET_ADDRESS: ULONG = 1; pub const DS_NETBIOS_ADDRESS: ULONG = 2; pub const DS_PDC_FLAG: ULONG = 0x00000001; pub const DS_GC_FLAG: ULONG = 0x00000004; pub const DS_LDAP_FLAG: ULONG = 0x00000008; pub const DS_DS_FLAG: ULONG = 0x00000010; pub const DS_KDC_FLAG: ULONG = 0x00000020; pub const DS_TIMESERV_FLAG: ULONG = 0x00000040; pub const DS_CLOSEST_FLAG: ULONG = 0x00000080; pub const DS_WRITABLE_FLAG: ULONG = 0x00000100; pub const DS_GOOD_TIMESERV_FLAG: ULONG = 0x00000200; pub const DS_NDNC_FLAG: ULONG = 0x00000400; pub const DS_SELECT_SECRET_DOMAIN_6_FLAG: ULONG = 0x00000800; pub const DS_FULL_SECRET_DOMAIN_6_FLAG: ULONG = 0x00001000; pub const DS_WS_FLAG: ULONG = 0x00002000; pub const DS_DS_8_FLAG: ULONG = 0x00004000; pub const DS_DS_9_FLAG: ULONG = 0x00008000; pub const DS_DS_10_FLAG: ULONG = 0x00010000; pub const DS_PING_FLAGS: ULONG = 0x000FFFFF; pub const DS_DNS_CONTROLLER_FLAG: ULONG = 0x20000000; pub const DS_DNS_DOMAIN_FLAG: ULONG = 0x40000000; pub const DS_DNS_FOREST_FLAG: ULONG = 0x80000000; extern "system" { pub fn DsGetDcNameA( ComputerName: LPCSTR, DomainName: LPCSTR, DomainGuid: *mut GUID, SiteName: LPCSTR, Flags: ULONG, DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOA, ) -> DWORD; pub fn DsGetDcNameW( ComputerName: LPCWSTR, DomainName: LPCWSTR, DomainGuid: *mut GUID, SiteName: LPCWSTR, Flags: ULONG, DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOW, ) -> DWORD; pub fn DsGetSiteNameA( ComputerName: LPCSTR, SiteName: *mut LPSTR, ) -> DWORD; pub fn DsGetSiteNameW( ComputerName: LPCWSTR, SiteName: *mut LPWSTR, ) -> DWORD; pub fn DsValidateSubnetNameW( SubnetName: LPCWSTR, ) -> DWORD; pub fn DsValidateSubnetNameA( SubnetName: LPCSTR, ) -> DWORD; pub fn DsAddressToSiteNamesW( ComputerName: LPCWSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPWSTR, ) -> DWORD; pub fn DsAddressToSiteNamesA( ComputerName: LPCSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPSTR, ) -> DWORD; pub fn DsAddressToSiteNamesExW( ComputerName: LPCWSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPWSTR, SubnetNames: *mut *mut LPWSTR, ) -> DWORD; pub fn DsAddressToSiteNamesExA( ComputerName: LPCSTR, EntryCount: DWORD, SocketAddresses: PSOCKET_ADDRESS, SiteNames: *mut *mut LPSTR, SubnetNames: *mut *mut LPSTR, ) -> DWORD; } pub const DS_DOMAIN_IN_FOREST: ULONG = 0x0001; pub const DS_DOMAIN_DIRECT_OUTBOUND: ULONG = 0x0002; pub const DS_DOMAIN_TREE_ROOT: ULONG = 0x0004; pub const DS_DOMAIN_PRIMARY: ULONG = 0x0008; pub const DS_DOMAIN_NATIVE_MODE: ULONG = 0x0010; pub const DS_DOMAIN_DIRECT_INBOUND: ULONG = 0x0020; pub const DS_DOMAIN_VALID_FLAGS: ULONG = DS_DOMAIN_IN_FOREST | DS_DOMAIN_DIRECT_OUTBOUND | DS_DOMAIN_TREE_ROOT | DS_DOMAIN_PRIMARY | DS_DOMAIN_NATIVE_MODE | DS_DOMAIN_DIRECT_INBOUND; STRUCT!{struct DS_DOMAIN_TRUSTSW { NetbiosDomainName: LPWSTR, DnsDomainName: LPWSTR, Flags: ULONG, ParentIndex: ULONG, TrustType: ULONG, TrustAttributes: ULONG, DomainSid: PSID, DomainGuid: GUID, }} pub type PDS_DOMAIN_TRUSTSW = *mut DS_DOMAIN_TRUSTSW; STRUCT!{struct DS_DOMAIN_TRUSTSA { NetbiosDomainName: LPSTR, DnsDomainName: LPSTR, Flags: ULONG, ParentIndex: ULONG, TrustType: ULONG, TrustAttributes: ULONG, DomainSid: PSID, DomainGuid: GUID, }} pub type PDS_DOMAIN_TRUSTSA = *mut DS_DOMAIN_TRUSTSA; extern "system" { pub fn DsEnumerateDomainTrustsW( ServerName: LPWSTR, Flags: ULONG, Domains: *mut PDS_DOMAIN_TRUSTSW, DomainCount: PULONG, ) -> DWORD; pub fn DsEnumerateDomainTrustsA( ServerName: LPSTR, Flags: ULONG, Domains: *mut PDS_DOMAIN_TRUSTSA, DomainCount: PULONG, ) -> DWORD; pub fn DsGetForestTrustInformationW( ServerName: LPCWSTR, TrustedDomainName: LPCWSTR, Flags: DWORD, ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, ) -> DWORD; pub fn DsMergeForestTrustInformationW( DomainName: LPCWSTR, NewForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION, MergedForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION, ) -> DWORD; pub fn DsGetDcSiteCoverageW( ServerName: LPCWSTR, EntryCount: PULONG, SiteNames: *mut *mut LPWSTR, ) -> DWORD; pub fn DsGetDcSiteCoverageA( ServerName: LPCSTR, EntryCount: PULONG, SiteNames: *mut *mut LPSTR, ) -> DWORD; pub fn DsDeregisterDnsHostRecordsW( ServerName: LPWSTR, DnsDomainName: LPWSTR, DomainGuid: *mut GUID, DsaGuid: *mut GUID, DnsHostName: LPWSTR, ) -> DWORD; pub fn DsDeregisterDnsHostRecordsA( ServerName: LPSTR, DnsDomainName: LPSTR, DomainGuid: *mut GUID, DsaGuid: *mut GUID, DnsHostName: LPSTR, ) -> DWORD; } pub const DS_ONLY_DO_SITE_NAME: ULONG = 0x01; pub const DS_NOTIFY_AFTER_SITE_RECORDS: ULONG = 0x02; pub const DS_OPEN_VALID_OPTION_FLAGS: ULONG = DS_ONLY_DO_SITE_NAME | DS_NOTIFY_AFTER_SITE_RECORDS; pub const DS_OPEN_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_ONLY_LDAP_NEEDED | DS_KDC_REQUIRED | DS_PDC_REQUIRED | DS_GC_SERVER_REQUIRED | DS_WRITABLE_REQUIRED; extern "system" { pub fn DsGetDcOpenW( DnsName: LPCWSTR, OptionFlags: ULONG, SiteName: LPCWSTR, DomainGuid: *mut GUID, DnsForestName: LPCWSTR, DcFlags: ULONG, RetGetDcContext: PHANDLE, ) -> DWORD; pub fn DsGetDcOpenA( DnsName: LPCSTR, OptionFlags: ULONG, SiteName: LPCSTR, DomainGuid: *mut GUID, DnsForestName: LPCSTR, DcFlags: ULONG, RetGetDcContext: PHANDLE, ) -> DWORD; pub fn DsGetDcNextA( GetDcContextHandle: HANDLE, SockAddressCount: PULONG, SockAddresses: *mut LPSOCKET_ADDRESS, DnsHostName: *mut LPSTR, ) -> DWORD; pub fn DsGetDcNextW( GetDcContextHandle: HANDLE, SockAddressCount: PULONG, SockAddresses: *mut LPSOCKET_ADDRESS, DnsHostName: *mut LPWSTR, ) -> DWORD; pub fn DsGetDcCloseW( GetDcContextHandle: HANDLE, ); }