import "ms-dtyp.idl"; typedef struct _DnsStatHeader { DWORD StatId; WORD wLength; BOOLEAN fClear; UCHAR fReserved; }DNSSRV_STAT_HEADER, *PDNSSRV_STAT_HEADER; typedef struct _DnsStat { DNSSRV_STAT_HEADER Header; BYTE Buffer[1]; }DNSSRV_STAT, *PDNSSRV_STAT, *PDNSSRV_STATS; typedef struct _IP4_ARRAY { DWORD AddrCount; [size_is( AddrCount )] DWORD AddrArray[]; } IP4_ARRAY, *PIP4_ARRAY; typedef struct _DnsAddr { CHAR MaxSa[32]; DWORD DnsAddrUserDword[8]; } DNS_ADDR, *PDNS_ADDR; typedef struct _DnsAddrArray { DWORD MaxCount; DWORD AddrCount; DWORD Tag; WORD Family; WORD WordReserved; DWORD Flags; DWORD MatchFlag; DWORD Reserved1; DWORD Reserved2; [size_is( AddrCount )] DNS_ADDR AddrArray[]; } DNS_ADDR_ARRAY, *PDNS_ADDR_ARRAY; // // RPC buffer type for returned data // typedef struct _DnssrvRpcBuffer { DWORD dwLength; [size_is(dwLength)] BYTE Buffer[]; } DNS_RPC_BUFFER, *PDNS_RPC_BUFFER; // // Server data types // typedef struct _DnsRpcServerInfoW2K { // version // basic configuration flags DWORD dwVersion; UCHAR fBootMethod; BOOLEAN fAdminConfigured; BOOLEAN fAllowUpdate; BOOLEAN fDsAvailable; // // pointer section // [string] char * pszServerName; // DS container [string] wchar_t * pszDsContainer; // IP interfaces PIP4_ARRAY aipServerAddrs; PIP4_ARRAY aipListenAddrs; // forwarders PIP4_ARRAY aipForwarders; // future extensions PDWORD pExtension1; PDWORD pExtension2; PDWORD pExtension3; PDWORD pExtension4; PDWORD pExtension5; // // DWORD section // // logging DWORD dwLogLevel; DWORD dwDebugLevel; // configuration DWORDs DWORD dwForwardTimeout; DWORD dwRpcProtocol; DWORD dwNameCheckFlag; DWORD cAddressAnswerLimit; DWORD dwRecursionRetry; DWORD dwRecursionTimeout; DWORD dwMaxCacheTtl; DWORD dwDsPollingInterval; // aging / scavenging DWORD dwScavengingInterval; DWORD dwDefaultRefreshInterval; DWORD dwDefaultNoRefreshInterval; DWORD dwReserveArray[10]; // // BYTE section // // configuration flags BOOLEAN fAutoReverseZones; BOOLEAN fAutoCacheUpdate; // recursion control BOOLEAN fRecurseAfterForwarding; BOOLEAN fForwardDelegations; BOOLEAN fNoRecursion; BOOLEAN fSecureResponses; // lookup control BOOLEAN fRoundRobin; BOOLEAN fLocalNetPriority; // BIND compatibility and mimicking BOOLEAN fBindSecondaries; BOOLEAN fWriteAuthorityNs; // Bells and whistles BOOLEAN fStrictFileParsing; BOOLEAN fLooseWildcarding; // aging / scavenging BOOLEAN fDefaultAgingState; BOOLEAN fReserveArray[15]; } DNS_RPC_SERVER_INFO_W2K, *PDNS_RPC_SERVER_INFO_W2K; typedef struct _DnsRpcServerInfoDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; // basic configuration flags DWORD dwVersion; UCHAR fBootMethod; BOOLEAN fAdminConfigured; BOOLEAN fAllowUpdate; BOOLEAN fDsAvailable; // // pointer section // [string] char * pszServerName; // DS container [string] wchar_t * pszDsContainer; // IP interfaces PIP4_ARRAY aipServerAddrs; PIP4_ARRAY aipListenAddrs; // forwarders PIP4_ARRAY aipForwarders; // logging PIP4_ARRAY aipLogFilter; [string] wchar_t * pwszLogFilePath; // Server domain/forest [string] char * pszDomainName; // UTF-8 FQDN [string] char * pszForestName; // UTF-8 FQDN // Built-in directory partitions [string] char * pszDomainDirectoryPartition; // UTF-8 FQDN [string] char * pszForestDirectoryPartition; // UTF-8 FQDN // future extensions [string] char * pExtensions[ 6 ]; // // DWORD section // // logging DWORD dwLogLevel; DWORD dwDebugLevel; // configuration DWORDs DWORD dwForwardTimeout; DWORD dwRpcProtocol; DWORD dwNameCheckFlag; DWORD cAddressAnswerLimit; DWORD dwRecursionRetry; DWORD dwRecursionTimeout; DWORD dwMaxCacheTtl; DWORD dwDsPollingInterval; DWORD dwLocalNetPriorityNetMask; // aging and scavenging DWORD dwScavengingInterval; DWORD dwDefaultRefreshInterval; DWORD dwDefaultNoRefreshInterval; DWORD dwLastScavengeTime; // more logging DWORD dwEventLogLevel; DWORD dwLogFileMaxSize; // Active Directory information DWORD dwDsForestVersion; DWORD dwDsDomainVersion; DWORD dwDsDsaVersion; DWORD dwReserveArray[ 4 ]; // // BYTE section // // configuration flags BOOLEAN fAutoReverseZones; BOOLEAN fAutoCacheUpdate; // recursion control BOOLEAN fRecurseAfterForwarding; BOOLEAN fForwardDelegations; BOOLEAN fNoRecursion; BOOLEAN fSecureResponses; // lookup control BOOLEAN fRoundRobin; BOOLEAN fLocalNetPriority; // BIND compatibility and mimicking BOOLEAN fBindSecondaries; BOOLEAN fWriteAuthorityNs; // Bells and whistles BOOLEAN fStrictFileParsing; BOOLEAN fLooseWildcarding; // aging \ scavenging BOOLEAN fDefaultAgingState; BOOLEAN fReserveArray[ 15 ]; } DNS_RPC_SERVER_INFO_DOTNET, *PDNS_RPC_SERVER_INFO_DOTNET; typedef struct _DnsRpcServerInfoLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; // basic configuration flags DWORD dwVersion; UCHAR fBootMethod; BOOLEAN fAdminConfigured; BOOLEAN fAllowUpdate; BOOLEAN fDsAvailable; // // pointer section // [string] char * pszServerName; // DS container [string] wchar_t * pszDsContainer; // IP interfaces PDNS_ADDR_ARRAY aipServerAddrs; PDNS_ADDR_ARRAY aipListenAddrs; // forwarders PDNS_ADDR_ARRAY aipForwarders; // logging PDNS_ADDR_ARRAY aipLogFilter; [string] wchar_t * pwszLogFilePath; // Server domain/forest [string] char * pszDomainName; // UTF-8 FQDN [string] char * pszForestName; // UTF-8 FQDN // Built-in directory partitions [string] char * pszDomainDirectoryPartition; // UTF-8 FQDN [string] char * pszForestDirectoryPartition; // UTF-8 FQDN // future extensions [string] char * pExtensions[ 6 ]; // // DWORD section // // logging DWORD dwLogLevel; DWORD dwDebugLevel; // configuration DWORDs DWORD dwForwardTimeout; DWORD dwRpcProtocol; DWORD dwNameCheckFlag; DWORD cAddressAnswerLimit; DWORD dwRecursionRetry; DWORD dwRecursionTimeout; DWORD dwMaxCacheTtl; DWORD dwDsPollingInterval; DWORD dwLocalNetPriorityNetMask; // aging and scavenging DWORD dwScavengingInterval; DWORD dwDefaultRefreshInterval; DWORD dwDefaultNoRefreshInterval; DWORD dwLastScavengeTime; // more logging DWORD dwEventLogLevel; DWORD dwLogFileMaxSize; // Active Directory information DWORD dwDsForestVersion; DWORD dwDsDomainVersion; DWORD dwDsDsaVersion; BOOLEAN fReadOnlyDC; DWORD dwReserveArray[ 3 ]; // // BYTE section // // configuration flags BOOLEAN fAutoReverseZones; BOOLEAN fAutoCacheUpdate; // recursion control BOOLEAN fRecurseAfterForwarding; BOOLEAN fForwardDelegations; BOOLEAN fNoRecursion; BOOLEAN fSecureResponses; // lookup control BOOLEAN fRoundRobin; BOOLEAN fLocalNetPriority; // BIND compatibility and mimicking BOOLEAN fBindSecondaries; BOOLEAN fWriteAuthorityNs; // Bells and whistles BOOLEAN fStrictFileParsing; BOOLEAN fLooseWildcarding; // aging \ scavenging BOOLEAN fDefaultAgingState; BOOLEAN fReserveArray[ 15 ]; } DNS_RPC_SERVER_INFO_LONGHORN, *PDNS_RPC_SERVER_INFO_LONGHORN, DNS_RPC_SERVER_INFO, *PDNS_RPC_SERVER_INFO; typedef struct _DnssrvRpcForwardersW2K { DWORD fRecurseAfterForwarding; DWORD dwForwardTimeout; PIP4_ARRAY aipForwarders; } DNS_RPC_FORWARDERS_W2K, *PDNS_RPC_FORWARDERS_W2K; typedef struct _DnssrvRpcForwardersDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD fRecurseAfterForwarding; DWORD dwForwardTimeout; PIP4_ARRAY aipForwarders; } DNS_RPC_FORWARDERS_DOTNET, *PDNS_RPC_FORWARDERS_DOTNET; typedef struct _DnssrvRpcForwardersLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD fRecurseAfterForwarding; DWORD dwForwardTimeout; PDNS_ADDR_ARRAY aipForwarders; } DNS_RPC_FORWARDERS_LONGHORN, *PDNS_RPC_FORWARDERS_LONGHORN, DNS_RPC_FORWARDERS, *PDNS_RPC_FORWARDERS; // // Basic zone data // //typedef struct _DnssrvRpcZoneFlags //{ // DWORD Paused : 1; // DWORD Shutdown : 1; // DWORD Reverse : 1; // DWORD AutoCreated : 1; // DWORD DsIntegrated : 1; // DWORD Aging : 1; // DWORD Update : 2; // DWORD ReadOnly : 1; // DWORD UnUsed : 23; //} //DNS_RPC_ZONE_FLAGS, *PDNS_RPC_ZONE_FLAGS; typedef DWORD DNS_RPC_ZONE_FLAGS; typedef struct _DnssrvRpcZoneW2K { [string] wchar_t * pszZoneName; DNS_RPC_ZONE_FLAGS Flags; UCHAR ZoneType; UCHAR Version; } DNS_RPC_ZONE_W2K, *PDNS_RPC_ZONE_W2K; typedef struct _DnssrvRpcZoneDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] wchar_t * pszZoneName; DNS_RPC_ZONE_FLAGS Flags; UCHAR ZoneType; UCHAR Version; DWORD dwDpFlags; [string] char * pszDpFqdn; } DNS_RPC_ZONE_DOTNET, *PDNS_RPC_ZONE_DOTNET, DNS_RPC_ZONE, *PDNS_RPC_ZONE; // // Zone enumeration // typedef struct _DnssrvRpcZoneListW2K { [range(0,500000)] DWORD dwZoneCount; [size_is(dwZoneCount)] PDNS_RPC_ZONE_W2K ZoneArray[]; } DNS_RPC_ZONE_LIST_W2K, *PDNS_RPC_ZONE_LIST_W2K; typedef struct _DnssrvRpcZoneListDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; [range(0,500000)] DWORD dwZoneCount; [size_is(dwZoneCount)] PDNS_RPC_ZONE_DOTNET ZoneArray[]; } DNS_RPC_ZONE_LIST_DOTNET, *PDNS_RPC_ZONE_LIST_DOTNET, DNS_RPC_ZONE_LIST, *PDNS_RPC_ZONE_LIST; // // Directory partition enumeration and info // typedef struct _DnssrvRpcDirectoryPartitionEnum { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszDpFqdn; DWORD dwFlags; DWORD dwZoneCount; } DNS_RPC_DP_ENUM, *PDNS_RPC_DP_ENUM; typedef struct _DnssrvRpcDirectoryPartitionList { DWORD dwRpcStructureVersion; DWORD dwReserved0; [range(0,5000)] DWORD dwDpCount; [size_is(dwDpCount)] PDNS_RPC_DP_ENUM DpArray[]; } DNS_RPC_DP_LIST, *PDNS_RPC_DP_LIST; typedef struct _DnssrvRpcDirectoryPartitionReplica { [string] wchar_t * pszReplicaDn; } DNS_RPC_DP_REPLICA, *PDNS_RPC_DP_REPLICA; typedef struct _DnssrvRpcDirectoryPartition { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszDpFqdn; [string] wchar_t * pszDpDn; [string] wchar_t * pszCrDn; DWORD dwFlags; DWORD dwZoneCount; DWORD dwState; DWORD dwReserved[ 3 ]; [string] wchar_t * pwszReserved[ 3 ]; [range(0,10000)] DWORD dwReplicaCount; [size_is(dwReplicaCount)] PDNS_RPC_DP_REPLICA ReplicaArray[]; } DNS_RPC_DP_INFO, *PDNS_RPC_DP_INFO; // // Enlist (or create) directory partition // typedef struct _DnssrvRpcEnlistDirPart { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszDpFqdn; // UTF8 DWORD dwOperation; } DNS_RPC_ENLIST_DP, *PDNS_RPC_ENLIST_DP; // // Zone export // typedef struct _DnssrvRpcZoneExport { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszZoneExportFile; } DNS_RPC_ZONE_EXPORT_INFO, *PDNS_RPC_ZONE_EXPORT_INFO; // // Zone property data // typedef struct _DnssrvRpcZoneSecondariesW2K { DWORD fSecureSecondaries; DWORD fNotifyLevel; PIP4_ARRAY aipSecondaries; PIP4_ARRAY aipNotify; } DNS_RPC_ZONE_SECONDARIES_W2K, *PDNS_RPC_ZONE_SECONDARIES_W2K; typedef struct _DnssrvRpcZoneSecondariesDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD fSecureSecondaries; DWORD fNotifyLevel; PIP4_ARRAY aipSecondaries; PIP4_ARRAY aipNotify; } DNS_RPC_ZONE_SECONDARIES_DOTNET, *PDNS_RPC_ZONE_SECONDARIES_DOTNET; typedef struct _DnssrvRpcZoneSecondariesLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD fSecureSecondaries; DWORD fNotifyLevel; PDNS_ADDR_ARRAY aipSecondaries; PDNS_ADDR_ARRAY aipNotify; } DNS_RPC_ZONE_SECONDARIES_LONGHORN, *PDNS_RPC_ZONE_SECONDARIES_LONGHORN, DNS_RPC_ZONE_SECONDARIES, *PDNS_RPC_ZONE_SECONDARIES; typedef struct _DnssrvRpcZoneDatabaseW2K { DWORD fDsIntegrated; [string] char * pszFileName; } DNS_RPC_ZONE_DATABASE_W2K, *PDNS_RPC_ZONE_DATABASE_W2K; typedef struct _DnssrvRpcZoneDatabaseDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD fDsIntegrated; [string] char * pszFileName; } DNS_RPC_ZONE_DATABASE_DOTNET, *PDNS_RPC_ZONE_DATABASE_DOTNET, DNS_RPC_ZONE_DATABASE, *PDNS_RPC_ZONE_DATABASE; typedef struct _DnssrvRpcZoneChangePartition { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszDestPartition; } DNS_RPC_ZONE_CHANGE_DP, *PDNS_RPC_ZONE_CHANGE_DP; typedef struct _DnsRpcZoneInfoW2K { [string] char * pszZoneName; DWORD dwZoneType; DWORD fReverse; DWORD fAllowUpdate; DWORD fPaused; DWORD fShutdown; DWORD fAutoCreated; // Database info DWORD fUseDatabase; [string] char * pszDataFile; // Masters PIP4_ARRAY aipMasters; // Secondaries DWORD fSecureSecondaries; DWORD fNotifyLevel; PIP4_ARRAY aipSecondaries; PIP4_ARRAY aipNotify; // WINS or NetBIOS lookup DWORD fUseWins; DWORD fUseNbstat; // Aging DWORD fAging; DWORD dwNoRefreshInterval; DWORD dwRefreshInterval; DWORD dwAvailForScavengeTime; PIP4_ARRAY aipScavengeServers; // save some space, just in case // avoid versioning issues if possible DWORD pvReserved1; DWORD pvReserved2; DWORD pvReserved3; DWORD pvReserved4; } DNS_RPC_ZONE_INFO_W2K, *PDNS_RPC_ZONE_INFO_W2K; typedef struct _DnsRpcZoneInfoDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszZoneName; DWORD dwZoneType; DWORD fReverse; DWORD fAllowUpdate; DWORD fPaused; DWORD fShutdown; DWORD fAutoCreated; // Database info DWORD fUseDatabase; [string] char * pszDataFile; // Masters PIP4_ARRAY aipMasters; // Secondaries DWORD fSecureSecondaries; DWORD fNotifyLevel; PIP4_ARRAY aipSecondaries; PIP4_ARRAY aipNotify; // WINS or NetBIOS lookup DWORD fUseWins; DWORD fUseNbstat; // Aging DWORD fAging; DWORD dwNoRefreshInterval; DWORD dwRefreshInterval; DWORD dwAvailForScavengeTime; PIP4_ARRAY aipScavengeServers; // Forwarder zones DWORD dwForwarderTimeout; DWORD fForwarderSlave; // Stub zones PIP4_ARRAY aipLocalMasters; // Directory partition DWORD dwDpFlags; [string] char * pszDpFqdn; [string] wchar_t * pwszZoneDn; // Xfr time information DWORD dwLastSuccessfulSoaCheck; DWORD dwLastSuccessfulXfr; // save some space, just in case DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; DWORD dwReserved5; [string] char * pReserved1; [string] char * pReserved2; [string] char * pReserved3; [string] char * pReserved4; } DNS_RPC_ZONE_INFO_DOTNET, *PDNS_RPC_ZONE_INFO_DOTNET; typedef struct _DnsRpcZoneInfoLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszZoneName; DWORD dwZoneType; DWORD fReverse; DWORD fAllowUpdate; DWORD fPaused; DWORD fShutdown; DWORD fAutoCreated; // Database info DWORD fUseDatabase; [string] char * pszDataFile; // Masters PDNS_ADDR_ARRAY aipMasters; // Secondaries DWORD fSecureSecondaries; DWORD fNotifyLevel; PDNS_ADDR_ARRAY aipSecondaries; PDNS_ADDR_ARRAY aipNotify; // WINS or NetBIOS lookup DWORD fUseWins; DWORD fUseNbstat; // Aging DWORD fAging; DWORD dwNoRefreshInterval; DWORD dwRefreshInterval; DWORD dwAvailForScavengeTime; PDNS_ADDR_ARRAY aipScavengeServers; // Forwarder zones DWORD dwForwarderTimeout; DWORD fForwarderSlave; // Stub zones PDNS_ADDR_ARRAY aipLocalMasters; // Directory partition DWORD dwDpFlags; [string] char * pszDpFqdn; [string] wchar_t * pwszZoneDn; // Xfr time information DWORD dwLastSuccessfulSoaCheck; DWORD dwLastSuccessfulXfr; DWORD fQueuedForBackgroundLoad; DWORD fBackgroundLoadInProgress; BOOL fReadOnlyZone; // Additional zone transfer information DWORD dwLastXfrAttempt; DWORD dwLastXfrResult; } DNS_RPC_ZONE_INFO_LONGHORN, *PDNS_RPC_ZONE_INFO_LONGHORN, DNS_RPC_ZONE_INFO, *PDNS_RPC_ZONE_INFO; // // Zone create data // typedef struct _DnsRpcZoneCreateInfo { [string] char * pszZoneName; DWORD dwZoneType; DWORD fAllowUpdate; DWORD fAging; DWORD dwFlags; // Database info [string] char * pszDataFile; DWORD fDsIntegrated; DWORD fLoadExisting; // Admin name (if auto-create SOA) [string] char * pszAdmin; // Masters (if secondary) PIP4_ARRAY aipMasters; // Secondaries PIP4_ARRAY aipSecondaries; DWORD fSecureSecondaries; DWORD fNotifyLevel; // Reserve some space to avoid versioning issues [string] char * pvReserved1; [string] char * pvReserved2; [string] char * pvReserved3; [string] char * pvReserved4; [string] char * pvReserved5; [string] char * pvReserved6; [string] char * pvReserved7; [string] char * pvReserved8; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; DWORD dwReserved5; DWORD dwReserved6; DWORD dwReserved7; DWORD dwReserved8; } DNS_RPC_ZONE_CREATE_INFO_W2K, *PDNS_RPC_ZONE_CREATE_INFO_W2K; typedef struct _DnsRpcZoneCreateInfoDotNet { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszZoneName; DWORD dwZoneType; DWORD fAllowUpdate; DWORD fAging; DWORD dwFlags; // Database info [string] char * pszDataFile; DWORD fDsIntegrated; DWORD fLoadExisting; // Admin name (if auto-create SOA) [string] char * pszAdmin; // Masters (if secondary) PIP4_ARRAY aipMasters; // Secondaries PIP4_ARRAY aipSecondaries; DWORD fSecureSecondaries; DWORD fNotifyLevel; // Forwarder zones DWORD dwTimeout; DWORD fRecurseAfterForwarding; // Directory partition DWORD dwDpFlags; // specify built-in DP or [string] char * pszDpFqdn; // UTF8 FQDN of partition DWORD dwReserved[ 32 ]; } DNS_RPC_ZONE_CREATE_INFO_DOTNET, *PDNS_RPC_ZONE_CREATE_INFO_DOTNET; typedef struct _DnsRpcZoneCreateInfoLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; [string] char * pszZoneName; DWORD dwZoneType; DWORD fAllowUpdate; DWORD fAging; DWORD dwFlags; // Database info [string] char * pszDataFile; DWORD fDsIntegrated; DWORD fLoadExisting; // Admin name (if auto-create SOA) [string] char * pszAdmin; // Masters (if secondary) PDNS_ADDR_ARRAY aipMasters; // Secondaries PDNS_ADDR_ARRAY aipSecondaries; DWORD fSecureSecondaries; DWORD fNotifyLevel; // Forwarder zones DWORD dwTimeout; DWORD fRecurseAfterForwarding; // Directory partition DWORD dwDpFlags; // specify built-in DP or [string] char * pszDpFqdn; // UTF8 FQDN of partition DWORD dwReserved[ 32 ]; } DNS_RPC_ZONE_CREATE_INFO_LONGHORN, *PDNS_RPC_ZONE_CREATE_INFO_LONGHORN, DNS_RPC_ZONE_CREATE_INFO, *PDNS_RPC_ZONE_CREATE_INFO; typedef struct _DnsRpcAutoConfigureLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD dwAutoConfigFlags; DWORD dwReserved1; [string] char * pszNewDomainName; } DNS_RPC_AUTOCONFIGURE, *PDNS_RPC_AUTOCONFIGURE; // // EnumZones2 filter specification // typedef struct _DnsRpcEnumZonesFilter { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD dwFilter; [string] char * pszPartitionFqdn; [string] char * pszQueryString; [string] char * pszReserved[ 6 ]; } DNS_RPC_ENUM_ZONES_FILTER, *PDNS_RPC_ENUM_ZONES_FILTER; // // RPC record structure // typedef struct _DnssrvRpcRecord { WORD wDataLength; WORD wType; DWORD dwFlags; DWORD dwSerial; DWORD dwTtlSeconds; DWORD dwTimeStamp; DWORD dwReserved; [size_is(wDataLength)] BYTE Buffer[]; } DNS_RPC_RECORD, *PDNS_RPC_RECORD, DNS_FLAT_RECORD, *PDNS_FLAT_RECORD; // // These RPC structures have no version because they are simple // are they are explicitly defined by their names. // typedef struct _DnssrvRpcNameAndParam { DWORD dwParam; [string] char * pszNodeName; } DNS_RPC_NAME_AND_PARAM, *PDNS_RPC_NAME_AND_PARAM; typedef struct _DnsRpcIPValidateLonghorn { DWORD dwRpcStructureVersion; DWORD dwReserved0; DWORD dwContext; DWORD dwReserved1; [string] char * pszContextName; PDNS_ADDR_ARRAY aipValidateAddrs; } DNS_RPC_IP_VALIDATE, *PDNS_RPC_IP_VALIDATE; // // String array // typedef struct _DnsRpcUtf8StringList { [range(0,10000)] DWORD dwCount; [size_is(dwCount),string] char * pszStrings[]; } DNS_RPC_UTF8_STRING_LIST, *PDNS_RPC_UTF8_STRING_LIST; // // Union of RPC types // typedef enum _DnssrvRpcTypeId { DNSSRV_TYPEID_NULL = 0, DNSSRV_TYPEID_DWORD, DNSSRV_TYPEID_LPSTR, DNSSRV_TYPEID_LPWSTR, DNSSRV_TYPEID_IPARRAY, DNSSRV_TYPEID_BUFFER, // 5 DNSSRV_TYPEID_SERVER_INFO_W2K, DNSSRV_TYPEID_STATS, DNSSRV_TYPEID_FORWARDERS_W2K, DNSSRV_TYPEID_ZONE_W2K, DNSSRV_TYPEID_ZONE_INFO_W2K, // 10 DNSSRV_TYPEID_ZONE_SECONDARIES_W2K, DNSSRV_TYPEID_ZONE_DATABASE_W2K, DNSSRV_TYPEID_ZONE_TYPE_RESET_W2K, DNSSRV_TYPEID_ZONE_CREATE_W2K, DNSSRV_TYPEID_NAME_AND_PARAM, // 15 DNSSRV_TYPEID_ZONE_LIST_W2K, DNSSRV_TYPEID_ZONE_RENAME, DNSSRV_TYPEID_ZONE_EXPORT, DNSSRV_TYPEID_SERVER_INFO_DOTNET, DNSSRV_TYPEID_FORWARDERS_DOTNET, // 20 DNSSRV_TYPEID_ZONE, DNSSRV_TYPEID_ZONE_INFO_DOTNET, DNSSRV_TYPEID_ZONE_SECONDARIES_DOTNET, DNSSRV_TYPEID_ZONE_DATABASE, DNSSRV_TYPEID_ZONE_TYPE_RESET_DOTNET, // 25 DNSSRV_TYPEID_ZONE_CREATE_DOTNET, DNSSRV_TYPEID_ZONE_LIST, DNSSRV_TYPEID_DP_ENUM, DNSSRV_TYPEID_DP_INFO, DNSSRV_TYPEID_DP_LIST, // 30 DNSSRV_TYPEID_ENLIST_DP, DNSSRV_TYPEID_ZONE_CHANGE_DP, DNSSRV_TYPEID_ENUM_ZONES_FILTER, DNSSRV_TYPEID_ADDRARRAY, DNSSRV_TYPEID_SERVER_INFO, // 35 DNSSRV_TYPEID_ZONE_INFO, DNSSRV_TYPEID_FORWARDERS, DNSSRV_TYPEID_ZONE_SECONDARIES, DNSSRV_TYPEID_ZONE_TYPE_RESET, DNSSRV_TYPEID_ZONE_CREATE, // 40 DNSSRV_TYPEID_IP_VALIDATE, DNSSRV_TYPEID_AUTOCONFIGURE, DNSSRV_TYPEID_UTF8_STRING_LIST, DNSSRV_TYPEID_UNICODE_STRING_LIST} DNS_RPC_TYPEID, *PDNS_RPC_TYPEID; typedef [switch_type(DWORD)] union _DnssrvSrvRpcUnion { [case(DNSSRV_TYPEID_NULL)] PBYTE Null; [case(DNSSRV_TYPEID_DWORD)] DWORD Dword; [case(DNSSRV_TYPEID_LPSTR)] [string] char * String; [case(DNSSRV_TYPEID_LPWSTR)] [string] wchar_t * WideString; [case(DNSSRV_TYPEID_IPARRAY)] PIP4_ARRAY IpArray; [case(DNSSRV_TYPEID_BUFFER)] PDNS_RPC_BUFFER Buffer; [case(DNSSRV_TYPEID_SERVER_INFO_W2K)] PDNS_RPC_SERVER_INFO_W2K ServerInfoW2K; [case(DNSSRV_TYPEID_STATS)] PDNSSRV_STATS Stats; [case(DNSSRV_TYPEID_FORWARDERS_W2K)] PDNS_RPC_FORWARDERS_W2K ForwardersW2K; [case(DNSSRV_TYPEID_ZONE_W2K)] PDNS_RPC_ZONE_W2K ZoneW2K; [case(DNSSRV_TYPEID_ZONE_INFO_W2K)] PDNS_RPC_ZONE_INFO_W2K ZoneInfoW2K; [case(DNSSRV_TYPEID_ZONE_SECONDARIES_W2K)] PDNS_RPC_ZONE_SECONDARIES_W2K SecondariesW2K; [case(DNSSRV_TYPEID_ZONE_DATABASE_W2K)] PDNS_RPC_ZONE_DATABASE_W2K DatabaseW2K; [case(DNSSRV_TYPEID_ZONE_CREATE_W2K)] PDNS_RPC_ZONE_CREATE_INFO_W2K ZoneCreateW2K; [case(DNSSRV_TYPEID_NAME_AND_PARAM)] PDNS_RPC_NAME_AND_PARAM NameAndParam; [case(DNSSRV_TYPEID_ZONE_LIST_W2K)] PDNS_RPC_ZONE_LIST_W2K ZoneListW2K; [case(DNSSRV_TYPEID_SERVER_INFO_DOTNET)] PDNS_RPC_SERVER_INFO_DOTNET ServerInfoDotNet; [case(DNSSRV_TYPEID_FORWARDERS_DOTNET)] PDNS_RPC_FORWARDERS_DOTNET ForwardersDotNet; [case(DNSSRV_TYPEID_ZONE)] PDNS_RPC_ZONE Zone; [case(DNSSRV_TYPEID_ZONE_INFO_DOTNET)] PDNS_RPC_ZONE_INFO_DOTNET ZoneInfoDotNet; [case(DNSSRV_TYPEID_ZONE_SECONDARIES_DOTNET)] PDNS_RPC_ZONE_SECONDARIES_DOTNET SecondariesDotNet; [case(DNSSRV_TYPEID_ZONE_DATABASE)] PDNS_RPC_ZONE_DATABASE Database; [case(DNSSRV_TYPEID_ZONE_CREATE_DOTNET)] PDNS_RPC_ZONE_CREATE_INFO_DOTNET ZoneCreateDotNet; [case(DNSSRV_TYPEID_ZONE_LIST)] PDNS_RPC_ZONE_LIST ZoneList; [case(DNSSRV_TYPEID_ZONE_EXPORT)] PDNS_RPC_ZONE_EXPORT_INFO ZoneExport; [case(DNSSRV_TYPEID_DP_INFO)] PDNS_RPC_DP_INFO DirectoryPartition; [case(DNSSRV_TYPEID_DP_ENUM)] PDNS_RPC_DP_ENUM DirectoryPartitionEnum; [case(DNSSRV_TYPEID_DP_LIST)] PDNS_RPC_DP_LIST DirectoryPartitionList; [case(DNSSRV_TYPEID_ENLIST_DP)] PDNS_RPC_ENLIST_DP EnlistDirectoryPartition; [case(DNSSRV_TYPEID_ZONE_CHANGE_DP)] PDNS_RPC_ZONE_CHANGE_DP ZoneChangeDirectoryPartition; [case(DNSSRV_TYPEID_ENUM_ZONES_FILTER)] PDNS_RPC_ENUM_ZONES_FILTER EnumZonesFilter; [case(DNSSRV_TYPEID_ADDRARRAY)] PDNS_ADDR_ARRAY AddrArray; [case(DNSSRV_TYPEID_SERVER_INFO)] PDNS_RPC_SERVER_INFO ServerInfo; [case(DNSSRV_TYPEID_ZONE_CREATE)] PDNS_RPC_ZONE_CREATE_INFO ZoneCreate; [case(DNSSRV_TYPEID_FORWARDERS)] PDNS_RPC_FORWARDERS Forwarders; [case(DNSSRV_TYPEID_ZONE_SECONDARIES)] PDNS_RPC_ZONE_SECONDARIES Secondaries; [case(DNSSRV_TYPEID_IP_VALIDATE)] PDNS_RPC_IP_VALIDATE IpValidate; [case(DNSSRV_TYPEID_ZONE_INFO)] PDNS_RPC_ZONE_INFO ZoneInfo; [case(DNSSRV_TYPEID_AUTOCONFIGURE)] PDNS_RPC_AUTOCONFIGURE AutoConfigure; [case(DNSSRV_TYPEID_UTF8_STRING_LIST)] PDNS_RPC_UTF8_STRING_LIST Utf8StringList; } DNSSRV_RPC_UNION; [ // A unique identifier that distinguishes this interface from other interfaces. uuid(FFA0E0B5-8293-473b-B54B-2724EAE0EF40), endpoint("ncacn_np:[\\pipe\\dnsserver_test]", "ncacn_ip_tcp:[1337]"), // This is version 1.0 of this interface. version(1.0), pointer_default(unique) ] interface dnsserver_test{ LONG R_DnssrvOperation( [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in] DWORD dwContext, [in, unique, string] LPCSTR pszOperation, [in] DWORD dwTypeId, [in, switch_is(dwTypeId)] DNSSRV_RPC_UNION pData ); LONG R_DnssrvQuery( [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszOperation, [out] PDWORD pdwTypeId, [out, switch_is(*pdwTypeId)] DNSSRV_RPC_UNION * ppData ); LONG R_DnssrvComplexOperation( [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszOperation, [in] DWORD dwTypeIn, [in, switch_is(dwTypeIn)] DNSSRV_RPC_UNION pDataIn, [out] PDWORD pdwTypeOut, [out, switch_is(*pdwTypeOut)] DNSSRV_RPC_UNION * ppDataOut ); LONG R_DnssrvEnumRecords( [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszNodeName, [in, unique, string] LPCSTR pszStartChild, [in] WORD wRecordType, [in] DWORD fSelectFlag, [in, unique, string] LPCSTR pszFilterStart, [in, unique, string] LPCSTR pszFilterStop, [out] PDWORD pdwBufferLength, [out, size_is(, *pdwBufferLength)] PBYTE * ppBuffer ); LONG R_DnssrvUpdateRecord( [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, string] LPCSTR pszNodeName, [in, unique] PDNS_RPC_RECORD pAddRecord, [in, unique] PDNS_RPC_RECORD pDeleteRecord ); LONG R_DnssrvOperation2( [in] handle_t hBindingHandle, [in] DWORD dwClientVersion, [in] DWORD dwSettingFlags, [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in] DWORD dwContext, [in, unique, string] LPCSTR pszOperation, [in] DWORD dwTypeId, [in, switch_is(dwTypeId)] DNSSRV_RPC_UNION pData ); LONG R_DnssrvQuery2( [in] DWORD dwClientVersion, [in] DWORD dwSettingFlags, [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszOperation, [out] PDWORD pdwTypeId, [out, switch_is(*pdwTypeId)] DNSSRV_RPC_UNION * ppData ); LONG R_DnssrvComplexOperation2( [in] DWORD dwClientVersion, [in] DWORD dwSettingFlags, [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszOperation, [in] DWORD dwTypeIn, [in, switch_is(dwTypeIn)] DNSSRV_RPC_UNION pDataIn, [out] PDWORD pdwTypeOut, [out, switch_is(*pdwTypeOut)] DNSSRV_RPC_UNION * ppDataOut ); LONG R_DnssrvEnumRecords2( [in] DWORD dwClientVersion, [in] DWORD dwSettingFlags, [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, unique, string] LPCSTR pszNodeName, [in, unique, string] LPCSTR pszStartChild, [in] WORD wRecordType, [in] DWORD fSelectFlag, [in, unique, string] LPCSTR pszFilterStart, [in, unique, string] LPCSTR pszFilterStop, [out] PDWORD pdwBufferLength, [out, size_is(, *pdwBufferLength)] PBYTE * ppBuffer ); LONG R_DnssrvUpdateRecord2( [in] DWORD dwClientVersion, [in] DWORD dwSettingFlags, [in, unique, string] LPCWSTR pwszServerName, [in, unique, string] LPCSTR pszZone, [in, string] LPCSTR pszNodeName, [in, unique] PDNS_RPC_RECORD pAddRecord, [in, unique] PDNS_RPC_RECORD pDeleteRecord ); }