226 lines
4.8 KiB
C
226 lines
4.8 KiB
C
//+-----------------------------------------------------------------------
|
||
//
|
||
// Microsoft Windows
|
||
//
|
||
// Copyright (c) Microsoft Corporation 2000
|
||
//
|
||
// File: A D T G E N . C
|
||
//
|
||
// Contents: definitions of types/functions required for
|
||
// generating generic audits.
|
||
//
|
||
//
|
||
// History:
|
||
// 07-January-2000 kumarp created
|
||
//
|
||
//------------------------------------------------------------------------
|
||
|
||
|
||
#include "pch.h"
|
||
#pragma hdrstop
|
||
|
||
#include "authz.h"
|
||
|
||
//------------------------------------------------------------------------
|
||
//
|
||
// internal routines
|
||
//
|
||
NTSTATUS
|
||
LsapApiReturnResult(
|
||
ULONG ExceptionCode
|
||
);
|
||
|
||
|
||
//------------------------------------------------------------------------
|
||
|
||
|
||
BOOL
|
||
AuthzpRegisterAuditEvent(
|
||
IN PAUTHZ_AUDIT_EVENT_TYPE_OLD pAuditEventType,
|
||
OUT AUDIT_HANDLE* phAuditContext
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
Register the specified event with LSA. This causes LSA to
|
||
generate and return an audit context. This context handle
|
||
is required to publish event of the specified type.
|
||
|
||
Arguments:
|
||
pAuditEventType - pointer to audit event info structure
|
||
that defines which event to register.
|
||
|
||
phAuditContext - pointer to audit context handle returned
|
||
|
||
Return Value:
|
||
|
||
NTSTATUS - Standard Nt Result Code
|
||
|
||
Notes:
|
||
Note that this function does NOT register the schema of an event. It is
|
||
assumed that the schema has been registered *before* calling
|
||
this function.
|
||
|
||
The schema of legacy audit events is stored in a .mc file.
|
||
|
||
--*/
|
||
{
|
||
DWORD dwStatus;
|
||
|
||
//
|
||
// since we use the same var to store NTSTATUS and win32 error
|
||
// make sure that this is not a problem
|
||
//
|
||
ASSERT( sizeof(NTSTATUS) == sizeof(DWORD) );
|
||
|
||
//
|
||
// we generate a unique ID and store it in the audit handle
|
||
// the server will copy this into the corresponding structure
|
||
// on the server side. This ID allows us to track which server side
|
||
// audit-context corresponds to which client side event handle.
|
||
// This is very useful in debugging.
|
||
//
|
||
NtAllocateLocallyUniqueId( &pAuditEventType->LinkId );
|
||
|
||
RpcTryExcept
|
||
{
|
||
dwStatus = LsarRegisterAuditEvent( pAuditEventType, phAuditContext );
|
||
}
|
||
RpcExcept( EXCEPTION_EXECUTE_HANDLER )
|
||
{
|
||
dwStatus = LsapApiReturnResult(I_RpcMapWin32Status(RpcExceptionCode()));
|
||
|
||
} RpcEndExcept;
|
||
|
||
|
||
if (!NT_SUCCESS(dwStatus))
|
||
{
|
||
dwStatus = RtlNtStatusToDosError( dwStatus );
|
||
SetLastError( dwStatus );
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL
|
||
AuthzpSendAuditToLsa(
|
||
IN AUDIT_HANDLE hAuditContext,
|
||
IN DWORD dwFlags,
|
||
IN AUDIT_PARAMS* pAuditParams,
|
||
IN PVOID pReserved
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
Send an event to LSA for publishing.
|
||
|
||
|
||
Arguments:
|
||
|
||
hAuditContext - handle of audit-context previously obtained
|
||
by calling LsaRegisterAuditEvent
|
||
|
||
dwFlags - TBD
|
||
|
||
pAuditParams - pointer to audit event parameters
|
||
|
||
pReserved - reserved for future enhancements
|
||
|
||
Return Value:
|
||
|
||
STATUS_SUCCESS -- if all is well
|
||
NTSTATUS error code otherwise.
|
||
|
||
Notes:
|
||
|
||
--*/
|
||
{
|
||
DWORD dwStatus;
|
||
|
||
UNREFERENCED_PARAMETER(pReserved);
|
||
|
||
//
|
||
// since we use the same var to store NTSTATUS and win32 error
|
||
// make sure that this is not a problem
|
||
//
|
||
ASSERT( sizeof(NTSTATUS) == sizeof(DWORD) );
|
||
|
||
RpcTryExcept
|
||
{
|
||
dwStatus = LsarGenAuditEvent( hAuditContext, dwFlags, pAuditParams );
|
||
}
|
||
RpcExcept( EXCEPTION_EXECUTE_HANDLER )
|
||
{
|
||
dwStatus = LsapApiReturnResult(I_RpcMapWin32Status(RpcExceptionCode()));
|
||
|
||
} RpcEndExcept;
|
||
|
||
if (!NT_SUCCESS(dwStatus))
|
||
{
|
||
dwStatus = RtlNtStatusToDosError( dwStatus );
|
||
SetLastError( dwStatus );
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL
|
||
AuthzpUnregisterAuditEvent(
|
||
IN OUT AUDIT_HANDLE* phAuditContext
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
Unregister the specified event. This causes LSA to
|
||
free resources associated with the context.
|
||
|
||
|
||
Arguments:
|
||
|
||
hAuditContext - handle to the audit context to unregister
|
||
|
||
Return Value:
|
||
|
||
NTSTATUS - Standard Nt Result Code
|
||
|
||
Notes:
|
||
|
||
|
||
--*/
|
||
{
|
||
DWORD dwStatus;
|
||
|
||
//
|
||
// since we use the same var to store NTSTATUS and win32 error
|
||
// make sure that this is not a problem
|
||
//
|
||
ASSERT( sizeof(NTSTATUS) == sizeof(DWORD) );
|
||
|
||
RpcTryExcept
|
||
{
|
||
dwStatus = LsarUnregisterAuditEvent( phAuditContext );
|
||
}
|
||
RpcExcept( EXCEPTION_EXECUTE_HANDLER )
|
||
{
|
||
dwStatus = LsapApiReturnResult(I_RpcMapWin32Status(RpcExceptionCode()));
|
||
|
||
} RpcEndExcept;
|
||
|
||
if (!NT_SUCCESS(dwStatus))
|
||
{
|
||
dwStatus = RtlNtStatusToDosError( dwStatus );
|
||
SetLastError( dwStatus );
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|