/*++

Copyright (c) 1991  Microsoft Corporation

Module Name:

    msgsvc.idl

Abstract:

    This is the IDL file that describes the RPC interface for the
    remotable NetMessage API that reside in the messenger service.
    NOTE: NetMessageBufferSend is in the workstation interface.

Author:

    Dan Lafferty (danl)     28-May-1991

Environment:

    User Mode -Win32

Revision History:

    28-May-1991     danl
        Created

--*/

//
// Interface Attributes
//

[
    uuid(17FDD703-1827-4E34-79D4-24A55C53BB37),
    version(1.0),
#ifdef __midl
	ms_union,
#endif // __midl
    pointer_default(unique)
]

//
// Interface Keyword
//

interface msgsvc

//
// Interface Body
//

{

import   "imports.idl";
#include <lmcons.h>

//
// Define handle types
//

typedef [handle] LPWSTR  MSGSVC_HANDLE;

//
// Data Structures Used for Enumeration
//

typedef struct _MSG_INFO_0_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] LPMSG_INFO_0 Buffer;
} MSG_INFO_0_CONTAINER, *PMSG_INFO_0_CONTAINER, *LPMSG_INFO_0_CONTAINER;

typedef struct _MSG_INFO_1_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] LPMSG_INFO_1 Buffer;
} MSG_INFO_1_CONTAINER, *PMSG_INFO_1_CONTAINER, *LPMSG_INFO_1_CONTAINER;


typedef struct _MSG_ENUM_STRUCT {
    DWORD               Level;
    [switch_is(Level)]  union _MSG_ENUM_UNION {
        [case(0)]   LPMSG_INFO_0_CONTAINER    Level0;
        [case(1)]   LPMSG_INFO_1_CONTAINER    Level1;
    } MsgInfo;
} MSG_ENUM_STRUCT, *PMSG_ENUM_STRUCT, *LPMSG_ENUM_STRUCT;


//
// Data Structures Used for GetInfo
//  (this would also be used for SetInfo if there was one.)
//

typedef [switch_type(DWORD)] union _MSG_INFO {
    [case(0)]   LPMSG_INFO_0  MsgInfo0;
    [case(1)]   LPMSG_INFO_1  MsgInfo1;
} MSG_INFO, *PMSG_INFO, *LPMSG_INFO;


//
// Function Prototypes
//


NET_API_STATUS NET_API_FUNCTION
NetrMessageNameAdd (
    [in,string,unique] MSGSVC_HANDLE        ServerName,
    [in,string]        LPWSTR               MsgName
    );

NET_API_STATUS NET_API_FUNCTION
NetrMessageNameEnum (
    [in,string,unique] MSGSVC_HANDLE    ServerName,
    [in,out]        LPMSG_ENUM_STRUCT   InfoStruct,
    [in]            DWORD               PrefMaxLen,
    [out]           LPDWORD             TotalEntries,
    [in,out,unique] LPDWORD             ResumeHandle
    );

NET_API_STATUS NET_API_FUNCTION
NetrMessageNameGetInfo (
    [in,string,unique] MSGSVC_HANDLE    ServerName,
    [in,string]             LPWSTR      MsgName,
    [in]                    DWORD       Level,
    [out, switch_is(Level)] LPMSG_INFO  InfoStruct
    );

NET_API_STATUS NET_API_FUNCTION
NetrMessageNameDel (
    [in,string,unique]  MSGSVC_HANDLE   ServerName,
    [in,string]         LPWSTR          MsgName
    );

}