/****************************** Module Header ******************************\ * Module Name: audit.c * * Copyright (c) 1991, Microsoft Corporation * * Implementation of routines that access/manipulate the system audit log * * History: * 12-09-91 Davidc Created. * 5-6-92 DaveHart Fleshed out. \***************************************************************************/ #include "msgina.h" /***************************************************************************\ * GetAuditLogStatus * * Purpose : Fills the global data with audit log status information * * Returns: TRUE on success, FALSE on failure * * History: * 12-09-91 Davidc Created. * 5-6-92 DaveHart Fleshed out. \***************************************************************************/ BOOL GetAuditLogStatus( PGLOBALS pGlobals ) { EVENTLOG_FULL_INFORMATION EventLogFullInformation; DWORD dwBytesNeeded; HANDLE AuditLogHandle; // // Assume the log is not full. If we can't get to EventLog, tough. // pGlobals->AuditLogFull = FALSE; AuditLogHandle = OpenEventLog( NULL, TEXT("Security")); if (AuditLogHandle) { if (GetEventLogInformation(AuditLogHandle, EVENTLOG_FULL_INFO, &EventLogFullInformation, sizeof(EventLogFullInformation), &dwBytesNeeded ) ) { if (EventLogFullInformation.dwFull != FALSE) { pGlobals->AuditLogFull = TRUE; } } CloseEventLog(AuditLogHandle); } // // There's no way in the current event logger to tell how full the log // is, always indicate we're NOT near full. // pGlobals->AuditLogNearFull = FALSE; return TRUE; } /***************************************************************************\ * DisableAuditing * * Purpose : Disable auditing via LSA. * * Returns: TRUE on success, FALSE on failure * * History: * 5-6-92 DaveHart Created. \***************************************************************************/ BOOL DisableAuditing() { NTSTATUS Status, IgnoreStatus; PPOLICY_AUDIT_EVENTS_INFO AuditInfo; OBJECT_ATTRIBUTES ObjectAttributes; SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; LSA_HANDLE PolicyHandle; // // Set up the Security Quality Of Service for connecting to the // LSA policy object. // SecurityQualityOfService.Length = sizeof(SECURITY_QUALITY_OF_SERVICE); SecurityQualityOfService.ImpersonationLevel = SecurityImpersonation; SecurityQualityOfService.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING; SecurityQualityOfService.EffectiveOnly = FALSE; // // Set up the object attributes to open the Lsa policy object // InitializeObjectAttributes( &ObjectAttributes, NULL, 0L, NULL, NULL ); ObjectAttributes.SecurityQualityOfService = &SecurityQualityOfService; // // Open the local LSA policy object // Status = LsaOpenPolicy( NULL, &ObjectAttributes, POLICY_VIEW_AUDIT_INFORMATION | POLICY_SET_AUDIT_REQUIREMENTS, &PolicyHandle ); if (!NT_SUCCESS(Status)) { DebugLog((DEB_ERROR, "Failed to open LsaPolicyObject Status = 0x%lx", Status)); return FALSE; } Status = LsaQueryInformationPolicy( PolicyHandle, PolicyAuditEventsInformation, (PVOID *)&AuditInfo ); if (!NT_SUCCESS(Status)) { IgnoreStatus = LsaClose(PolicyHandle); ASSERT(NT_SUCCESS(IgnoreStatus)); DebugLog((DEB_ERROR, "Failed to query audit event info Status = 0x%lx", Status)); return FALSE; } if (AuditInfo->AuditingMode) { AuditInfo->AuditingMode = FALSE; Status = LsaSetInformationPolicy( PolicyHandle, PolicyAuditEventsInformation, AuditInfo ); } else { Status = STATUS_SUCCESS; } IgnoreStatus = LsaFreeMemory(AuditInfo); ASSERT(NT_SUCCESS(IgnoreStatus)); IgnoreStatus = LsaClose(PolicyHandle); ASSERT(NT_SUCCESS(IgnoreStatus)); if (!NT_SUCCESS(Status)) { DebugLog((DEB_ERROR, "Failed to disable auditing Status = 0x%lx", Status)); return FALSE; } return TRUE; }