/*++ Copyright (c) 1990 Microsoft Corporation Module Name: ELF.IDL Abstract: Contains the Elfr APIs which are used to remote the Elf APIs to the local or remote server via RPC. Also contains the RPC specific data structures for these API. Author: Rajen Shah (rajens) 02-Apr-1991 Revision History: 02-Apr-1991 RajenS created --*/ // // Interface Attributes // [ uuid(82273FDC-E32A-18C3-3F78-827929DC23EA), version(0.0), #ifdef __midl ms_union, #endif // __midl pointer_default(unique) ] #define MAX_SINGLE_EVENT 0X3FFFF #define MAX_BATCH_BUFF 0x7ffff #define MAX_STRINGS 0X100 // // Interface Keyword // interface eventlog // // Interface Body // { import "imports.idl"; // import all the include files #include "event.h" // // ELF Generic Handle used to bind from client to server. // typedef [handle,unique] LPWSTR EVENTLOG_HANDLE_W; typedef [handle,unique] LPSTR EVENTLOG_HANDLE_A; typedef [range(0, MAX_BATCH_BUFF)] unsigned long RULONG; // // ELF RPC Context Handle (Internal definition of ELF_HANDLE) // typedef [context_handle] struct _IELF_HANDLE { LIST_ENTRY Next; ULONG Signature; // BUGBUG - For debug only ULONG Flags; // e.g. "invalid" ULONG GrantedAccess; ATOM Atom; ULONG SeekRecordPos; ULONG SeekBytePos; ULONG MajorVersion; // To identify caller ULONG MinorVersion; DWORD dwNotifyRequests; ULONG NameLength; [size_is(NameLength)] WCHAR Name[]; // Keep this as last field } *IELF_HANDLE; typedef IELF_HANDLE *PIELF_HANDLE; // // UNICODE Function Prototypes // // // Only OpenEL and CloseEL need to take PIELF_HANDLE // parameters since they are the only ones to modify the handle. // The others will take IELF_HANDLE parameters instead. // // NOTE: // The names of the functions are short so that when RPC // prepends the interface name to the names, they are still // unique. // NTSTATUS ElfrClearELFW ( [in] IELF_HANDLE LogHandle, [in,unique] PRPC_UNICODE_STRING BackupFileName ); NTSTATUS ElfrBackupELFW ( [in] IELF_HANDLE LogHandle, [in] PRPC_UNICODE_STRING BackupFileName ); NTSTATUS ElfrCloseEL ( [in,out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrDeregisterEventSource ( [in,out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrNumberOfRecords( [in] IELF_HANDLE LogHandle, [out] PULONG NumberOfRecords ); NTSTATUS ElfrOldestRecord( [in] IELF_HANDLE LogHandle, [out] PULONG OldestRecordNumber ); NTSTATUS ElfrChangeNotify( [in] IELF_HANDLE LogHandle, [in] RPC_CLIENT_ID ClientId, [in] ULONG Event ); // // The ModuleName is the one passed in by the caller of the API. This is // the one that is written to the log file. // // RegModuleName is generated by the client stub, and is the name that is // used to determine the default log file name from the registry. For // NT Product1, this will be "Application". NOTE: It is necessary to do this // now so that we can support viewing logs from a Product 2 system in the // future if we change our logging mechanism. // NTSTATUS ElfrOpenELW ( [in] EVENTLOG_HANDLE_W UNCServerName, [in] PRPC_UNICODE_STRING ModuleName, // Passed in API call [in] PRPC_UNICODE_STRING RegModuleName, // Used for registry [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrRegisterEventSourceW ( [in] EVENTLOG_HANDLE_W UNCServerName, [in] PRPC_UNICODE_STRING ModuleName, // Passed in API call [in] PRPC_UNICODE_STRING RegModuleName, // Used for registry info [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrOpenBELW ( [in] EVENTLOG_HANDLE_W UNCServerName, [in] PRPC_UNICODE_STRING BackupFileName, // Passed in API call [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); // // BUGBUG - Fix this interface once RPC supports the ability to return // zero bytes. Then, Buffer will have a length_is(*NumberOfBytesRead) // added to it. For now, always transfer NumberOfBytesToRead bytes! // // The LogHandle is an [in,out] since the server side stores information // in it that pertains to the current seek position. // NTSTATUS ElfrReadELW ( [in] IELF_HANDLE LogHandle, [in] ULONG ReadFlags, [in] ULONG RecordOffset, [in, range(0, MAX_BATCH_BUFF)] ULONG NumberOfBytesToRead, [out,size_is(NumberOfBytesToRead)] PBYTE Buffer, [out] PULONG NumberOfBytesRead, [out] PULONG MinNumberOfBytesNeeded ); NTSTATUS ElfrReportEventW ( [in] IELF_HANDLE LogHandle, [in] ULONG Time, [in] USHORT EventType, [in] USHORT EventCategory, [in] ULONG EventID, [in, range(0, MAX_STRINGS)] USHORT NumStrings, [in, range(0, MAX_SINGLE_EVENT)] ULONG DataSize, [in] PRPC_UNICODE_STRING ComputerName, [in, unique] PRPC_SID UserSID, [in, size_is(NumStrings), unique] PRPC_UNICODE_STRING Strings[*], [in, size_is(DataSize), unique] PBYTE Data, [in] USHORT Flags, [in,out,unique] PULONG RecordNumber, [in,out,unique] PULONG TimeWritten ); // // ANSI Function Prototypes // // // Only OpenEL needs to take PIELF_HANDLE // parameters since they are the only ones to modify the handle. // The others will take IELF_HANDLE parameters instead. // // NOTE that there is only one api for CloseEL since there are no // strings involved. // NTSTATUS ElfrClearELFA ( [in] IELF_HANDLE LogHandle, [in,unique] PRPC_STRING BackupFileName ); NTSTATUS ElfrBackupELFA ( [in] IELF_HANDLE LogHandle, [in] PRPC_STRING BackupFileName ); // // The ModuleName is the one passed in by the caller of the API. This is // the one that is written to the log file. // // RegModuleName is generated by the client stub, and is the name that is // used to determine the default log file name from the registry. For // NT Product1, this will be "Application". NOTE: It is necessary to do this // now so that we can support viewing logs from a Product 2 system in the // future if we change our logging mechanism. // NTSTATUS ElfrOpenELA ( [in] EVENTLOG_HANDLE_A UNCServerName, [in] PRPC_STRING ModuleName, // Passed in API call [in] PRPC_STRING RegModuleName, // Used for registry info [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrRegisterEventSourceA ( [in] EVENTLOG_HANDLE_A UNCServerName, [in] PRPC_STRING ModuleName, // Passed in API call [in] PRPC_STRING RegModuleName, // Used for registry info [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); NTSTATUS ElfrOpenBELA ( [in] EVENTLOG_HANDLE_A UNCServerName, [in] PRPC_STRING FileName, // Passed in API call [in] ULONG MajorVersion, [in] ULONG MinorVersion, [out] PIELF_HANDLE LogHandle ); // // BUGBUG - Fix this interface once RPC supports the ability to return // zero bytes. Then, Buffer will have a length_is(*NumberOfBytesRead) // added to it. For now, always transfer NumberOfBytesToRead bytes! // // The LogHandle is an [in,out] since the server side stores information // in it that pertains to the current seek position. // NTSTATUS ElfrReadELA ( [in] IELF_HANDLE LogHandle, [in] ULONG ReadFlags, [in] ULONG RecordOffset, [in, range(0, MAX_BATCH_BUFF)] ULONG NumberOfBytesToRead, [out,size_is(NumberOfBytesToRead)] PBYTE Buffer, [out] PULONG NumberOfBytesRead, [out] PULONG MinNumberOfBytesNeeded ); NTSTATUS ElfrReportEventA ( [in] IELF_HANDLE LogHandle, [in] ULONG Time, [in] USHORT EventType, [in] USHORT EventCategory, [in] ULONG EventID, [in, range(0, MAX_STRINGS)] USHORT NumStrings, [in, range(0, MAX_SINGLE_EVENT)] ULONG DataSize, [in] PRPC_STRING ComputerName, [in, unique] PRPC_SID UserSID, [in, size_is(NumStrings), unique] PRPC_STRING Strings[*], [in, size_is(DataSize), unique] PBYTE Data, [in] USHORT Flags, [in,out,unique] PULONG RecordNumber, [in,out,unique] PULONG TimeWritten ); midl_pragma warning( disable: 2466 2467 ) NTSTATUS ElfrRegisterClusterSvc( [in] EVENTLOG_HANDLE_W UNCServerName, [out] RULONG * pulSize, [out, size_is(,*pulSize)] BYTE **ppPackedEventInfo ); NTSTATUS ElfrDeregisterClusterSvc( [in] EVENTLOG_HANDLE_W UNCServerName ); NTSTATUS ElfrWriteClusterEvents( [in] EVENTLOG_HANDLE_W UNCServerName, [in, range(0, MAX_BATCH_BUFF)] ULONG ulSize, [in,size_is(ulSize)] BYTE *pBuffer ); ///////////////////////////////////////////////////////////////////////////// // Functions below this point are not in Windows NT version 4.0 or earlier // // (Note that new functions must always be added at the end, otherwise // function calls are mismatched when client and server talk different // versions of the interface) ///////////////////////////////////////////////////////////////////////////// NTSTATUS ElfrGetLogInformation( [in] IELF_HANDLE LogHandle, [in] ULONG InfoLevel, [out, size_is(cbBufSize)] PBYTE lpBuffer, [in, range(0, 1024)] ULONG cbBufSize, [out] PULONG pcbBytesNeeded ); ///////////////////////////////////////////////////////////////////////////// // Functions below this point are in XP server // // (Note that new functions must always be added at the end, otherwise // function calls are mismatched when client and server talk different // versions of the interface) ///////////////////////////////////////////////////////////////////////////// NTSTATUS ElfrFlushEL( [in] IELF_HANDLE LogHandle ); }