#include "idl_types.h"

/*
  eventlog interface definition
*/
[ uuid(82273fdc-e32a-18c3-3f78-827929dc23ea),
  version(0.0),
  pointer_default(unique),
  helpstring("Event Logger")
] interface eventlog
{
	typedef struct {
		uint16 unknown0;
		uint16 unknown1;
	} eventlog_OpenUnknown0;

	typedef struct {
		[value(2*strlen_m(r->name))] uint16 name_len;
		[value(r->name_len)]       uint16 name_size;
		unistr_noterm *name;
	} eventlog_String;

	typedef struct { 
		uint32 size;
		uint32 reserved;
		uint32 recordnumber;
		uint32 creationtime;
		uint32 writetime;
		uint32 eventnumber;
		uint16 eventtype;
		uint16 num_of_strings;
		uint16 category;
		uint16 reserved_flag;
		uint32 closingrecord;
		uint32 stringoffset;
		[size_is(num_of_strings)] eventlog_String bla[*];
		uint32 sid_length;
		[length_is(sid_length)] dom_sid *sids;
		uint32 data_length;
		[length_is(data_length)] uint8 *data;
		unistr *source_name;
		unistr *machine_name;
	} eventlog_Record;

	/******************/
	/* Function: 0x00 */
	NTSTATUS eventlog_ClearEventLogW();

	/******************/
	/* Function: 0x01 */
	NTSTATUS eventlog_BackupEventLogW();
	
	/******************/
	/* Function: 0x02 */
	[id(3)] NTSTATUS eventlog_CloseEventLog(
									[in,out,ref]     policy_handle *handle
								   );


	/******************/
	/* Function: 0x03 */
	NTSTATUS eventlog_DeregisterEventSource();

	/******************/
	/* Function: 0x04 */
	NTSTATUS eventlog_GetNumRecords(
									[in,ref]     policy_handle *handle,
									[out]		 uint32 number
								   );
	/******************/
	/* Function: 0x05 */
	NTSTATUS eventlog_GetOldestRecord();

	/******************/
	/* Function: 0x06 */
	NTSTATUS eventlog_ChangeNotify();

	/******************/
	/* Function: 0x07 */
	NTSTATUS eventlog_OpenEventLogW(
								   [in]	    eventlog_OpenUnknown0 *unknown0,
								   [in]	    eventlog_String source,
								   [in]	    eventlog_String unknown1,
								   [in]	    uint32 unknown2,
								   [in]	    uint32 unknown3,
								   [out,ref]   policy_handle *handle
								  );

	/******************/
	/* Function: 0x08 */
	NTSTATUS eventlog_RegisterEventSourceW();

	/******************/
	/* Function: 0x09 */
	NTSTATUS eventlog_OpenBackupEventLogW();

	/******************/
	/* Function: 0x0a */
	NTSTATUS eventlog_ReadEventLogW(
								   [in,ref]     policy_handle *handle,
								   [in] 		uint32 flags,
								   [in]			uint32 offset,
								   [in,out]		uint32 number_of_bytes,
								   [out,size_is(number_of_bytes),ref]		uint8 *data,
								   [out]		uint32 sent_size,
								   [out]		uint32 real_size
								  );

	/*****************/
	/* Function 0x0b */
	NTSTATUS eventlog_ReportEventW();

	/*****************/
	/* Function 0x0c */
	NTSTATUS eventlog_ClearEventLogA();
	
	/******************/
	/* Function: 0x0d */
	NTSTATUS eventlog_BackupEventLogA();

	/*****************/
	/* Function 0x0e */
	NTSTATUS eventlog_OpenEventLogA();

	/*****************/
	/* Function 0x0f */
	NTSTATUS eventlog_RegisterEventSourceA();

	/*****************/
	/* Function 0x10 */
	NTSTATUS eventlog_OpenBackupEventLogA();

	/*****************/
	/* Function 0x11 */
	NTSTATUS eventlog_ReadEventLogA();

	/*****************/
	/* Function 0x12 */
	NTSTATUS eventlog_ReportEventA();

	/*****************/
	/* Function 0x13 */
	NTSTATUS eventlog_RegisterClusterSvc();

	/*****************/
	/* Function 0x14 */
	NTSTATUS eventlog_DeregisterClusterSvc();

	/*****************/
	/* Function 0x15 */
	NTSTATUS eventlog_WriteClusterEvents();

	/*****************/
	/* Function 0x16 */
	NTSTATUS eventlog_GetLogIntormation();

	/*****************/
	/* Function 0x17 */
	NTSTATUS eventlog_FlushEventLog();
	
}