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 //! Contains public interfaces to query the network roles of workstations, servers, and DCs 7 use shared::guiddef::GUID; 8 use shared::minwindef::{DWORD, PBYTE, ULONG}; 9 use um::winnt::{LPCWSTR, LPWSTR, PVOID}; 10 ENUM!{enum DSROLE_MACHINE_ROLE { 11 DsRole_RoleStandaloneWorkstation, 12 DsRole_RoleMemberWorkstation, 13 DsRole_RoleStandaloneServer, 14 DsRole_RoleMemberServer, 15 DsRole_RoleBackupDomainController, 16 DsRole_RolePrimaryDomainController, 17 }} 18 ENUM!{enum DSROLE_SERVER_STATE { 19 DsRoleServerUnknown = 0, 20 DsRoleServerPrimary, 21 DsRoleServerBackup, 22 }} 23 pub type PDSROLE_SERVER_STATE = *mut DSROLE_SERVER_STATE; 24 ENUM!{enum DSROLE_PRIMARY_DOMAIN_INFO_LEVEL { 25 DsRolePrimaryDomainInfoBasic = 1, 26 DsRoleUpgradeStatus, 27 DsRoleOperationState, 28 }} 29 pub const DSROLE_PRIMARY_DS_RUNNING: ULONG = 0x00000001; 30 pub const DSROLE_PRIMARY_DS_MIXED_MODE: ULONG = 0x00000002; 31 pub const DSROLE_UPGRADE_IN_PROGRESS: ULONG = 0x00000004; 32 pub const DSROLE_PRIMARY_DS_READONLY: ULONG = 0x00000008; 33 pub const DSROLE_PRIMARY_DOMAIN_GUID_PRESENT: ULONG = 0x01000000; 34 STRUCT!{struct DSROLE_PRIMARY_DOMAIN_INFO_BASIC { 35 MachineRole: DSROLE_MACHINE_ROLE, 36 Flags: ULONG, 37 DomainNameFlat: LPWSTR, 38 DomainNameDns: LPWSTR, 39 DomainForestName: LPWSTR, 40 DomainGuid: GUID, 41 }} 42 pub type PDSROLE_PRIMARY_DOMAIN_INFO_BASIC = *mut DSROLE_PRIMARY_DOMAIN_INFO_BASIC; 43 STRUCT!{struct DSROLE_UPGRADE_STATUS_INFO { 44 OperationState: ULONG, 45 PreviousServerState: DSROLE_SERVER_STATE, 46 }} 47 pub type PDSROLE_UPGRADE_STATUS_INFO = *mut DSROLE_UPGRADE_STATUS_INFO; 48 ENUM!{enum DSROLE_OPERATION_STATE { 49 DsRoleOperationIdle = 0, 50 DsRoleOperationActive, 51 DsRoleOperationNeedReboot, 52 }} 53 STRUCT!{struct DSROLE_OPERATION_STATE_INFO { 54 OperationState: DSROLE_OPERATION_STATE, 55 }} 56 pub type PDSROLE_OPERATION_STATE_INFO = *mut DSROLE_OPERATION_STATE_INFO; 57 extern "system" { DsRoleGetPrimaryDomainInformation( lpServer: LPCWSTR, InfoLevel: DSROLE_PRIMARY_DOMAIN_INFO_LEVEL, Buffer: *mut PBYTE, ) -> DWORD58 pub fn DsRoleGetPrimaryDomainInformation( 59 lpServer: LPCWSTR, 60 InfoLevel: DSROLE_PRIMARY_DOMAIN_INFO_LEVEL, 61 Buffer: *mut PBYTE, 62 ) -> DWORD; DsRoleFreeMemory( Buffer: PVOID, )63 pub fn DsRoleFreeMemory( 64 Buffer: PVOID, 65 ); 66 } 67