1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  *
  25  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  26  */
  27 
  28 #ifndef _MLSVC_LOGR_NDL_
  29 #define _MLSVC_LOGR_NDL_
  30 
  31 /*
  32  ***********************************************************************
  33  *
  34  * Event log RPC (EVENTLOG) interface definition.
  35  *
  36  ***********************************************************************
  37  */
  38 
  39 #include <libmlrpc/ndrtypes.ndl>
  40 
  41 #define LOGR_OPNUM_EventLogClose                0x02
  42 #define LOGR_OPNUM_EventLogQueryCount           0x04
  43 #define LOGR_OPNUM_EventLogGetOldestRec         0x05
  44 #define LOGR_OPNUM_EventLogOpen                 0x07
  45 #define LOGR_OPNUM_EventLogRead                 0x0A
  46 
  47 #define LOGR_MAXENTRYLEN                        800
  48 
  49 
  50 CONTEXT_HANDLE(logr_handle) logr_handle_t;
  51 
  52 struct logr_string {
  53         WORD    length;
  54         WORD    allosize;
  55         LPTSTR  str;
  56 };
  57 typedef struct logr_string logr_string_t;
  58 
  59 struct logr_record {
  60         DWORD  Length1;
  61         DWORD  Reserved;
  62         DWORD  RecordNumber;
  63         DWORD  TimeGenerated;
  64         DWORD  TimeWritten;
  65         DWORD  EventID;
  66         WORD   EventType;
  67         WORD   NumStrings;
  68         WORD   EventCategory;
  69         WORD   ReservedFlags;
  70         DWORD  ClosingRecordNumber;
  71         DWORD  StringOffset;
  72         DWORD  UserSidLength;
  73         DWORD  UserSidOffset;
  74         DWORD  DataLength;
  75         DWORD  DataOffset;
  76         BYTE   info[LOGR_MAXENTRYLEN];
  77         DWORD  Length2;
  78 };
  79 typedef struct logr_record logr_record_t;
  80 
  81 /*
  82  ***********************************************************************
  83  * LOGR_OPNUM_EventLogClose
  84  ***********************************************************************
  85  */
  86 OPERATION(LOGR_OPNUM_EventLogClose)
  87 struct logr_EventLogClose {
  88         IN      logr_handle_t handle;
  89         OUT     logr_handle_t result_handle;
  90         OUT     DWORD status;
  91 };
  92 
  93 /*
  94  ***********************************************************************
  95  * LOGR_OPNUM_EventLogQueryCount
  96  ***********************************************************************
  97  */
  98 OPERATION(LOGR_OPNUM_EventLogQueryCount)
  99 struct logr_EventLogQueryCount {
 100         IN      logr_handle_t handle;
 101         OUT     DWORD rec_num;
 102         OUT     DWORD status;
 103 };
 104 
 105 /*
 106  ***********************************************************************
 107  * LOGR_OPNUM_EventLogGetOldestRec
 108  ***********************************************************************
 109  */
 110 OPERATION(LOGR_OPNUM_EventLogGetOldestRec)
 111 struct logr_EventLogGetOldestRec {
 112         IN      logr_handle_t handle;
 113         OUT     DWORD oldest_rec;
 114         OUT     DWORD status;
 115 };
 116 
 117 /*
 118  ***********************************************************************
 119  * LOGR_OPNUM_EventLogOpen
 120  ***********************************************************************
 121  */
 122 OPERATION(LOGR_OPNUM_EventLogOpen)
 123 struct logr_EventLogOpen {
 124         IN      DWORD *server_name;
 125         IN      logr_string_t log_name;
 126         IN      DWORD reg_module_name;
 127         IN      DWORD major_version;
 128         IN      DWORD minor_version;
 129         OUT     logr_handle_t handle;
 130         OUT     DWORD status;
 131 };
 132 
 133 OPERATION(LOGR_OPNUM_EventLogRead)
 134 struct logr_EventLogRead {
 135         IN      logr_handle_t handle;
 136         IN      DWORD read_flags;
 137         IN      DWORD rec_offset;
 138         IN      DWORD nbytes_to_read;
 139     SIZE_IS(nbytes_to_read)
 140         OUT REFERENCE   LPBYTE buf;
 141         OUT     DWORD sent_size;
 142         OUT     DWORD min_bytes_needed;
 143         OUT     DWORD status;
 144 };
 145 
 146 /*
 147  ***********************************************************************
 148  * The EVENTLOG interface definition.
 149  ***********************************************************************
 150  */
 151 INTERFACE(0)
 152 union logr_interface {
 153         CASE(LOGR_OPNUM_EventLogClose)
 154                 struct logr_EventLogClose               EventLogClose;
 155         CASE(LOGR_OPNUM_EventLogQueryCount)
 156                 struct logr_EventLogQueryCount          EventLogQueryCount;
 157         CASE(LOGR_OPNUM_EventLogGetOldestRec)
 158                 struct logr_EventLogGetOldestRec        EventLogGetOldestRec;
 159         CASE(LOGR_OPNUM_EventLogOpen)
 160                 struct logr_EventLogOpen                EventLogOpen;
 161         CASE(LOGR_OPNUM_EventLogRead)
 162                 struct logr_EventLogRead                EventLogRead;
 163 };
 164 typedef union logr_interface    logr_interface_t;
 165 EXTERNTYPEINFO(logr_interface)
 166 
 167 #endif /* _MLSVC_LOGR_NDL_ */