diff options
Diffstat (limited to 'private/eventlog/misc')
-rw-r--r-- | private/eventlog/misc/dirs | 4 | ||||
-rw-r--r-- | private/eventlog/misc/logalert.c | 204 |
2 files changed, 208 insertions, 0 deletions
diff --git a/private/eventlog/misc/dirs b/private/eventlog/misc/dirs new file mode 100644 index 000000000..076ccc941 --- /dev/null +++ b/private/eventlog/misc/dirs @@ -0,0 +1,4 @@ + +DIRS= + +OPTIONAL_DIRS= diff --git a/private/eventlog/misc/logalert.c b/private/eventlog/misc/logalert.c new file mode 100644 index 000000000..2b5e5f760 --- /dev/null +++ b/private/eventlog/misc/logalert.c @@ -0,0 +1,204 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + LOGALERT.C + +Abstract: + + This file contains the routine to log a Cairo alert in the system log. + + +Author: + + Ravi Rudrappa (ravir) 18-Jan-1995 + + +Revision History: + + 18-Jan-1995 RaviR + Created + +--*/ + +#ifdef _CAIRO_ + +#include <elfclntp.h> + + +NTSTATUS +ElfLogCairoAlertInSystemLog( + IN HANDLE hLogHandle, + IN LARGE_INTEGER liEventTime, + IN USHORT usEventType, + IN USHORT usEventCategory, + IN ULONG ulEventID, + IN USHORT usNumStrings, + IN ULONG ulDataSize, + IN WCHAR *pwszComputerName, + IN WCHAR **ppwszStrings, + IN PBYTE pbData + ) +/*++ + +Routine Description: + + This routine logs the given Cairo Alert in the given log, through the + ElfrReportEventW function. + +Arguments: + + +Return Value: + + Returns an NTSTATUS code. + +Note: + + +--*/ +{ + NTSTATUS s = STATUS_SUCCESS; + ULONG ulEventTime; + PRPC_SID psidUser = NULL; + USHORT usFlags; + PUNICODE_STRING pusComputerName = NULL; + PUNICODE_STRING *ppusStrings = NULL; + ULONG i; + ULONG ulNumofAllocatedStrings = 0; + LPBYTE pbString = NULL; + + // + // parameter validation + // + + if ((hLogHandle == NULL) || + (pwszComputerName == NULL) || + ((usNumStrings > 0) && (ppwszStrings == NULL)) || + ((ulDataSize > 0) && (pbData == NULL))) + { + return STATUS_INVALID_PARAMETER; + } + + // + // user Sid + // + + psidUser = NULL; // BUGBUG: is this ok? + + // + // Map creation time + // + + RtlTimeToSecondsSince1970(&liEventTime, &ulEventTime); + + // + // Convert the array of Alert description insert strings + // to an array of UNICODE_STRINGs. + // + + if (usNumStrings > 0) + { + LPBYTE pbPtr; + // + // allocate memory in one shot. + // + + pbPtr = pbString = MIDL_user_allocate( + sizeof(PUNICODE_STRING) * usNumStrings + + sizeof(UNICODE_STRING) * usNumStrings); + + if (pbString == NULL) + { + s = STATUS_NO_MEMORY; + goto LCleanUp; + } + + ppusStrings = (PUNICODE_STRING *)pbPtr; + + pbPtr += sizeof(PUNICODE_STRING) * usNumStrings; + + // + // For each string passed in, allocate a UNICODE_STRING structure + // and set it to the matching string. + // + for (i = 0; i < usNumStrings; i++) + { + ppusStrings[i] = (PUNICODE_STRING)pbPtr; + + pbPtr += sizeof(UNICODE_STRING); + + RtlInitUnicodeString(ppusStrings[i], ppwszStrings[i]); + } + } + + // + // Map the ComputerName to UNICODE_STRING. + // + + pusComputerName = MIDL_user_allocate(sizeof(UNICODE_STRING)); + + if (pusComputerName == NULL) + { + s = STATUS_NO_MEMORY; + goto LCleanUp; + } + + RtlInitUnicodeString(pusComputerName, pwszComputerName); + + + // + // Do the RPC call with an exception handler since RPC will raise an + // exception if anything fails. It is up to us to figure out what + // to do once the exception is raised. + // + RpcTryExcept { + + // Call service + + s = ElfrReportEventW ( + (IELF_HANDLE)hLogHandle, + ulEventTime, + usEventType, + usEventCategory, + ulEventID, + usNumStrings, + ulDataSize, + (PRPC_UNICODE_STRING)pusComputerName, + psidUser, + (PRPC_UNICODE_STRING *)ppusStrings, + pbData, + 0, // Flags, + NULL, // RecordNumber, + NULL); // TimeWritten + + } + RpcExcept (1) { + + s = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept + +LCleanUp: + + // + // Free the space allocated for the inserts + // and then free the space for ComputerName. + // + if (pbString) + { + MIDL_user_free(pbString); + } + + if (pusComputerName) + { + MIDL_user_free(pusComputerName); + } + + return (s); + +} + +#endif // _CAIRO_ |