/*++

Copyright (c) 1995 Microsoft Corporation

Module Name:

    dnssrv4.idl

Abstract:

    Domain Name System (DNS) Server

    DNS NT4 RPC API and type definitions.

Author:

    Jim Gilroy (jamesg)     April, 1997

Revision History:

--*/


//
//  NT4 RPC Interface definition
//

[
    uuid(aae9ac90-ce13-11cf-919e-08002be23c64),
    version(1.0),
    pointer_default(unique)
]
interface   dnssrv
{


import "imports.idl";

typedef [handle] LPCSTR   DNS_SRV_HANDLE;


//
//  RPC API
//

//
//  Server properties API
//

DNS_STATUS
R_Dns4_GetServerInfo(
    [in, unique, string]    DNS_SRV_HANDLE              hServer,
    [in, out, unique]       PDNS4_RPC_SERVER_INFO *     ppServerInfo
    );

DNS_STATUS
R_Dns4_Retired1(
    [in, unique, string]        DNS_SRV_HANDLE  hServer
    );

DNS_STATUS
R_Dns4_ResetServerListenAddresses(
    [in, unique, string]        DNS_SRV_HANDLE  hServer,
    [in]                        DWORD           cListenAddrs,
    [in, size_is(cListenAddrs)] PIP_ADDRESS     aipListenAddrs
    );

DNS_STATUS
R_Dns4_ResetForwarders(
    [in, unique, string]        DNS_SRV_HANDLE  hServer,
    [in]                        DWORD           cForwarders,
    [in, size_is(cForwarders)]  PIP_ADDRESS     aipForwarders,
    [in]                        DWORD           dwForwardTimeout,
    [in]                        DWORD           fSlave
    );


//
//  Statistics API
//

DNS_STATUS
R_Dns4_GetStatistics(
    [in, unique, string]    DNS_SRV_HANDLE      hServer,
    [in, out, unique]       PDNS4_STATISTICS *  ppStatistics
    );

DNS_STATUS
R_Dns4_ClearStatistics(
    [in, unique, string]    DNS_SRV_HANDLE      hServer
    );


//
//  Zone configuration information API
//

DNS_STATUS
R_Dns4_EnumZoneHandles(
    [in, unique, string]    DNS_SRV_HANDLE      hServer,
    [out]                   PDWORD              pdwZoneCount,
    [in]                    DWORD               dwArrayLength,
    [out, length_is(*pdwZoneCount), size_is(dwArrayLength)]
                            DNS_HANDLE          ahZones[]
    );

DNS_STATUS
R_Dns4_GetZoneInfo(
    [in, unique, string]    DNS_SRV_HANDLE      hServer,
    [in]                    DNS_HANDLE          hZone,
    [in, out, unique]       PDNS4_ZONE_INFO *   ppZone
    );

DNS_STATUS
R_Dns4_ResetZoneType(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in]                    DWORD           dwZoneType,
    [in]                    DWORD           cMasters,
    [in, size_is(cMasters)] PIP_ADDRESS     aipMasters
    );

DNS_STATUS
R_Dns4_ResetZoneDatabase(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in]                    DWORD           dwUseDatabase,
    [in, string]            LPCSTR          pszDataFile
    );

DNS_STATUS
R_Dns4_ResetZoneMasters(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in]                    DWORD           cMasters,
    [in, size_is(cMasters)] PIP_ADDRESS     aipMasters
    );

DNS_STATUS
R_Dns4_ResetZoneSecondaries(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in]                    DWORD           fSecureSecondaries,
    [in]                    DWORD           cSecondaries,
    [in, size_is(cSecondaries)]
                            PIP_ADDRESS     aipSecondaries
    );

//
//  Zone management API
//

DNS_STATUS
R_Dns4_CreateZone(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [out]                   PDNS_HANDLE     phZone,
    [in, string]            LPCSTR          pszZoneName,
    [in]                    DWORD           dwZoneType,
    [in, string]            LPCSTR          pszAdminEmailName,
    [in]                    DWORD           cMasters,
    [in, size_is(cMasters)] PIP_ADDRESS     aipMasters,
    [in]                    DWORD           dwUseDatabase,
    [in, string]            LPCSTR          pszDataFile
    );

DNS_STATUS
R_Dns4_IncrementZoneVersion(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone
    );

DNS_STATUS
R_Dns4_DeleteZone(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone
    );

DNS_STATUS
R_Dns4_PauseZone(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone
    );

DNS_STATUS
R_Dns4_ResumeZone(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone
    );

//
//  Record viewing API
//

DNS_STATUS
R_Dns4_EnumNodeRecords(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in, string]            LPCSTR          pszNodeName,
    [in]                    WORD            wRecordType,
    [in]                    DWORD           fNoCacheData,
    [in, out]               PDWORD          pdwBufferLength,
    [out, size_is(*pdwBufferLength),
        length_is(*pdwBufferLength)]
                            BYTE            aBuffer[]
    );

DNS_STATUS
R_Dns4_EnumRecords(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in, string]            LPCSTR          pszNodeName,
    [in, string]            LPCSTR          pszStartChild,
    [in]                    WORD            wRecordType,
    [in]                    DWORD           fNoCacheData,
    [in, out]               PDWORD          pdwBufferLength,
    [out, size_is(*pdwBufferLength),
        length_is(*pdwBufferLength)]
                            BYTE            aBuffer[]
    );

DNS_STATUS
R_Dns4_GetZoneWinsInfo(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [out]                   PDWORD          pfUsingWins,
    [in, out]               PDWORD          pdwBufferLength,
    [out, size_is(*pdwBufferLength),
        length_is(*pdwBufferLength)]
                            BYTE            aBuffer[]
    );

//
//  Record management API
//

DNS_STATUS
R_Dns4_UpdateRecord(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in, string]            LPCSTR          pszNodeName,
    [in, out]               PDNS_HANDLE     phRecord,
    [in]                    DWORD           dwDataLength,
    [in, size_is(dwDataLength)]
                            BYTE            abData[]
    );

DNS_STATUS
R_Dns4_DeleteRecord(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in, string]            LPCSTR          pszNodeName,
    [in]                    DNS_HANDLE      hRecord
    );

DNS_STATUS
R_Dns4_DeleteName(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in, string]            LPCSTR          pszNodeName,
    [in]                    DWORD           fDeleteSubtree
    );

DNS_STATUS
R_Dns4_UpdateWinsRecord(
    [in, unique, string]    DNS_SRV_HANDLE  hServer,
    [in]                    DNS_HANDLE      hZone,
    [in]                    DWORD           dwDataLength,
    [in, size_is(dwDataLength)]
                            BYTE            abData[]
    );

}

//
//  End of dnssrv4.idl
//