/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _MLSVC_LOGR_NDL_
#define _MLSVC_LOGR_NDL_

/*
 ***********************************************************************
 *
 * Event log RPC (EVENTLOG) interface definition.
 *
 ***********************************************************************
 */

#include "ndrtypes.ndl"

#define LOGR_OPNUM_EventLogClose		0x02
#define LOGR_OPNUM_EventLogQueryCount		0x04
#define LOGR_OPNUM_EventLogGetOldestRec		0x05
#define LOGR_OPNUM_EventLogOpen			0x07
#define LOGR_OPNUM_EventLogRead			0x0A

#define LOGR_MAXENTRYLEN			800


CONTEXT_HANDLE(logr_handle) logr_handle_t;

struct logr_string {
	WORD	length;
	WORD	allosize;
	LPTSTR	str;
};
typedef struct logr_string logr_string_t;

struct logr_record {
	DWORD  Length1;
	DWORD  Reserved;
	DWORD  RecordNumber;
	DWORD  TimeGenerated;
	DWORD  TimeWritten;
	DWORD  EventID;
	WORD   EventType;
	WORD   NumStrings;
	WORD   EventCategory;
	WORD   ReservedFlags;
	DWORD  ClosingRecordNumber;
	DWORD  StringOffset;
	DWORD  UserSidLength;
	DWORD  UserSidOffset;
	DWORD  DataLength;
	DWORD  DataOffset;
	BYTE   info[LOGR_MAXENTRYLEN];
	DWORD  Length2;
};
typedef struct logr_record logr_record_t;

/*
 ***********************************************************************
 * LOGR_OPNUM_EventLogClose
 ***********************************************************************
 */
OPERATION(LOGR_OPNUM_EventLogClose)
struct logr_EventLogClose {
	IN	logr_handle_t handle;
	OUT	logr_handle_t result_handle;
	OUT	DWORD status;
};

/*
 ***********************************************************************
 * LOGR_OPNUM_EventLogQueryCount
 ***********************************************************************
 */
OPERATION(LOGR_OPNUM_EventLogQueryCount)
struct logr_EventLogQueryCount {
	IN	logr_handle_t handle;
	OUT	DWORD rec_num;
	OUT	DWORD status;
};

/*
 ***********************************************************************
 * LOGR_OPNUM_EventLogGetOldestRec
 ***********************************************************************
 */
OPERATION(LOGR_OPNUM_EventLogGetOldestRec)
struct logr_EventLogGetOldestRec {
	IN	logr_handle_t handle;
	OUT	DWORD oldest_rec;
	OUT	DWORD status;
};

/*
 ***********************************************************************
 * LOGR_OPNUM_EventLogOpen
 ***********************************************************************
 */
OPERATION(LOGR_OPNUM_EventLogOpen)
struct logr_EventLogOpen {
	IN	DWORD *server_name;
	IN	logr_string_t log_name;
	IN	DWORD reg_module_name;
	IN	DWORD major_version;
	IN	DWORD minor_version;
	OUT	logr_handle_t handle;
	OUT	DWORD status;
};

OPERATION(LOGR_OPNUM_EventLogRead)
struct logr_EventLogRead {
	IN	logr_handle_t handle;
	IN	DWORD read_flags;
	IN	DWORD rec_offset;
	IN	DWORD nbytes_to_read;
    SIZE_IS(nbytes_to_read)
	OUT REFERENCE	LPBYTE buf;
	OUT	DWORD sent_size;
	OUT	DWORD min_bytes_needed;
	OUT	DWORD status;
};

/*
 ***********************************************************************
 * The EVENTLOG interface definition.
 ***********************************************************************
 */
INTERFACE(0)
union logr_interface {
	CASE(LOGR_OPNUM_EventLogClose)
		struct logr_EventLogClose		EventLogClose;
	CASE(LOGR_OPNUM_EventLogQueryCount)
		struct logr_EventLogQueryCount		EventLogQueryCount;
	CASE(LOGR_OPNUM_EventLogGetOldestRec)
		struct logr_EventLogGetOldestRec	EventLogGetOldestRec;
	CASE(LOGR_OPNUM_EventLogOpen)
		struct logr_EventLogOpen		EventLogOpen;
	CASE(LOGR_OPNUM_EventLogRead)
		struct logr_EventLogRead		EventLogRead;
};
typedef union logr_interface	logr_interface_t;
EXTERNTYPEINFO(logr_interface)

#endif /* _MLSVC_LOGR_NDL_ */