/*++ Copyright (c) 1999 Microsoft Corporation Module Name: dsrole.c Abstract: utility to dump output of DsRoleGetPrimaryDomainInformation Author: Charlie Wickham (charlwi) 03-Nov-00 Environment: User mode Revision History: --*/ #define UNICODE 1 #define _UNICODE 1 #include #include #include #include PWSTR RoleNames[] = { L"StandaloneWorkstation", L"MemberWorkstation", L"StandaloneServer", L"MemberServer", L"BackupDomainController", L"PrimaryDomainController " }; typedef struct _FLAG_DATA { ULONG Flag; PWCHAR Name; } FLAG_DATA; FLAG_DATA FlagData[] = { { DSROLE_PRIMARY_DS_RUNNING, L"DS running on this node" }, { DSROLE_PRIMARY_DS_MIXED_MODE, L"DS running in mixed mode" }, { DSROLE_UPGRADE_IN_PROGRESS, L"Node is upgrading" }, { DSROLE_PRIMARY_DOMAIN_GUID_PRESENT, L"Valid GUID" } }; typedef WCHAR GUIDSTR[32 * 3]; VOID formatGuid(LPGUID Guid, PWCHAR buf) { // // GUIDs look like this: 4082164E-A4B5-11D2-89C3-E37CB6BB13FC // wsprintfW( buf, L"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", Guid->Data1, Guid->Data2, Guid->Data3, Guid->Data4[0], Guid->Data4[1], Guid->Data4[2], Guid->Data4[3], Guid->Data4[4], Guid->Data4[5], Guid->Data4[6], Guid->Data4[7] ); } PWCHAR InterpretFlagData( ULONG Flags ) { static WCHAR buffer[1024] = { UNICODE_NULL }; BOOL addComma = FALSE; DWORD i; for ( i = 0; i < sizeof(FlagData)/sizeof(FLAG_DATA); ++i ) { if ( FlagData[i].Flag & Flags ) { if ( addComma ) { wcscat( buffer, L", " ); } wcscat( buffer, FlagData[i].Name ); addComma = TRUE; } } return buffer; } int __cdecl wmain( int argc, WCHAR *argv[] ) /*++ Routine Description: main routine for utility Arguments: standard command line args Return Value: 0 if it worked successfully --*/ { DWORD status; PDSROLE_PRIMARY_DOMAIN_INFO_BASIC domainInfo; status = DsRoleGetPrimaryDomainInformation(argv[1], DsRolePrimaryDomainInfoBasic, (PBYTE *)&domainInfo); printf("status = %u\n", status ); printf("machine role = %ws\n" "flags = %08X (%ws)\n" "flat name = %ws\n" "dns name = %ws\n" "forest name = %ws\n", RoleNames[domainInfo->MachineRole], domainInfo->Flags, InterpretFlagData( domainInfo->Flags ), domainInfo->DomainNameFlat, domainInfo->DomainNameDns, domainInfo->DomainForestName); if ( domainInfo->Flags & DSROLE_PRIMARY_DOMAIN_GUID_PRESENT ) { WCHAR guidBuf[ 64 ]; formatGuid( &domainInfo->DomainGuid, guidBuf ); printf("domain Guid = %ws\n", guidBuf ); } return 0; } // wmain /* end dsrole.c */