/*++

Copyright (c) 1995 Microsoft Corporation

Module Name:

    dnssrv.idl

Abstract:

    Domain Name System (DNS) Server

    DNS RPC API and type definitions.

Author:

    Jim Gilroy (jamesg)     April, 1997

Revision History:

--*/


//
//  NT5 RPC Interface definition
//

[
    uuid(50abc2a4-574d-40b3-9d66-ee4fd5fba076),
    version(5.0),
    pointer_default(unique)
]

interface   DnsServer
{

import "imports.idl";

typedef [handle] LPCWSTR        DNSSRV_RPC_HANDLE;


//
//  RPC API
//


DNS_STATUS
R_DnssrvOperation(
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in]                                DWORD                   dwContext,
    [in, unique, string]                LPCSTR                  pszOperation,
    [in]                                DWORD                   dwTypeId,
    [in, switch_is(dwTypeId)]           DNSSRV_RPC_UNION        pData
    );

DNS_STATUS
R_DnssrvQuery(
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in, unique, string]                LPCSTR                  pszOperation,
    [out]                               PDWORD                  pdwTypeId,
    [out, switch_is(*pdwTypeId)]        DNSSRV_RPC_UNION *      ppData
    );

DNS_STATUS
R_DnssrvComplexOperation(
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [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
    );

DNS_STATUS
R_DnssrvEnumRecords(
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [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
    );

DNS_STATUS
R_DnssrvUpdateRecord(
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in, string]                        LPCSTR                  pszNodeName,
    [in, unique]                        PDNS_RPC_RECORD         pAddRecord,
    [in, unique]                        PDNS_RPC_RECORD         pDeleteRecord
    );

DNS_STATUS
R_DnssrvOperation2(
    [in]                                DWORD                   dwClientVersion,
    [in]                                DWORD                   dwSettingFlags,
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in]                                DWORD                   dwContext,
    [in, unique, string]                LPCSTR                  pszOperation,
    [in]                                DWORD                   dwTypeId,
    [in, switch_is(dwTypeId)]           DNSSRV_RPC_UNION        pData
    );

DNS_STATUS
R_DnssrvQuery2(
    [in]                                DWORD                   dwClientVersion,
    [in]                                DWORD                   dwSettingFlags,
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in, unique, string]                LPCSTR                  pszOperation,
    [out]                               PDWORD                  pdwTypeId,
    [out, switch_is(*pdwTypeId)]        DNSSRV_RPC_UNION *      ppData
    );

DNS_STATUS
R_DnssrvComplexOperation2(
    [in]                                DWORD                   dwClientVersion,
    [in]                                DWORD                   dwSettingFlags,
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [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
    );

DNS_STATUS
R_DnssrvEnumRecords2(
    [in]                                DWORD                   dwClientVersion,
    [in]                                DWORD                   dwSettingFlags,
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [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
    );

DNS_STATUS
R_DnssrvUpdateRecord2(
    [in]                                DWORD                   dwClientVersion,
    [in]                                DWORD                   dwSettingFlags,
    [in, unique, string]                DNSSRV_RPC_HANDLE       hServer,
    [in, unique, string]                LPCSTR                  pszZone,
    [in, string]                        LPCSTR                  pszNodeName,
    [in, unique]                        PDNS_RPC_RECORD         pAddRecord,
    [in, unique]                        PDNS_RPC_RECORD         pDeleteRecord
    );

}

//
//  End of dnssrv.idl
//
