/*++

Copyright (c) 2000 Microsoft Corporation

Module Name:

    authzi.h

Abstract:

    This module contains the authorization framework APIs for internal callers.

Author:

    Kedar Dubhashi - October 2000

Revision History:

    Created - October 2000

--*/

#ifndef __AUTHZI_H__
#define __AUTHZI_H__

#include <authz.h>

#ifdef __cplusplus
extern "C" {
#endif

DECLARE_HANDLE(AUTHZ_AUDIT_QUEUE_HANDLE);

typedef AUTHZ_AUDIT_QUEUE_HANDLE *PAUTHZ_AUDIT_QUEUE_HANDLE;



//
// For AuthziInitializeAuditEventType
//

#define AUTHZP_INIT_GENERIC_AUDIT_EVENT 0x1

AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditEventType(
    IN  DWORD                          Flags,
    IN  USHORT                         CategoryID,
    IN  USHORT                         AuditID,
    IN  USHORT                         ParameterCount,
    OUT PAUTHZ_AUDIT_EVENT_TYPE_HANDLE phAuditEventType
    );

//
// Flags for AuthziModifyAuditEventType
//

#define AUTHZ_AUDIT_EVENT_TYPE_AUDITID 0x1
#define AUTHZ_AUDIT_EVENT_TYPE_CATEGID 0x2 // not implemented
#define AUTHZ_AUDIT_EVENT_TYPE_PARAM   0x4 // not implemented

AUTHZAPI
BOOL
WINAPI
AuthziModifyAuditEventType(
    IN DWORD Flags,
    IN USHORT CategoryID,
    IN USHORT AuditID,
    IN USHORT ParameterCount,
    IN OUT AUTHZ_AUDIT_EVENT_TYPE_HANDLE hAuditEventType
    );
    
AUTHZAPI
BOOL
WINAPI
AuthziFreeAuditEventType(
    AUTHZ_AUDIT_EVENT_TYPE_HANDLE hAuditEventType
    );

#define AUTHZ_MONITOR_AUDIT_QUEUE_SIZE 0x00000001

AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditQueue(
    IN DWORD                      Flags,
    IN DWORD                      dwAuditQueueHigh,
    IN DWORD                      dwAuditQueueLow,
    IN PVOID                      Reserved,
    OUT PAUTHZ_AUDIT_QUEUE_HANDLE phAuditQueue
    );
            
#define AUTHZ_AUDIT_QUEUE_HIGH            0x00000001
#define AUTHZ_AUDIT_QUEUE_LOW             0x00000002
#define AUTHZ_AUDIT_QUEUE_THREAD_PRIORITY 0x00000004
#define AUTHZ_AUDIT_QUEUE_FLAGS           0x00000008
#define AUTHZP_MONITOR_AUDIT_QUEUE_SIZE   0x00000010

AUTHZAPI
BOOL
WINAPI
AuthziModifyAuditQueue(
    IN OUT AUTHZ_AUDIT_QUEUE_HANDLE pQueue OPTIONAL,
    IN DWORD Flags,
    IN DWORD dwQueueFlags OPTIONAL,
    IN DWORD dwAuditQueueSizeHigh OPTIONAL,
    IN DWORD dwAuditQueueSizeLow OPTIONAL,
    IN DWORD dwThreadPriority OPTIONAL
    );

AUTHZAPI
BOOL
WINAPI
AuthziFreeAuditQueue(
    IN AUTHZ_AUDIT_QUEUE_HANDLE hQueue OPTIONAL
    );

AUTHZAPI
BOOL
WINAPI
AuthziLogAuditEvent(
    IN DWORD Flags,
    IN AUTHZ_AUDIT_EVENT_HANDLE hEvent,
    IN PVOID pReserved
    );

AUTHZAPI
BOOL
WINAPI
AuthziAllocateAuditParams(
    OUT PAUDIT_PARAMS * ppParams,
    IN USHORT NumParams
    );
    
AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditParamsWithRM(
    IN DWORD Flags,
    IN AUTHZ_RESOURCE_MANAGER_HANDLE hResourceManager,
    IN USHORT NumParams,
    OUT PAUDIT_PARAMS pParams,
    ...
    );

AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditParamsFromArray(
    IN DWORD Flags,
    IN AUTHZ_RESOURCE_MANAGER_HANDLE hResourceManager,
    IN USHORT NumParams,
    IN PAUDIT_PARAM pParamArray,
    OUT PAUDIT_PARAMS pParams
    );
    
AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditParams(
    IN  DWORD         dwFlags,
    OUT PAUDIT_PARAMS pParams,
    OUT PSID*         ppUserSid,
    IN  PCWSTR        SubsystemName,
    IN  USHORT        NumParams,
    ...
    );

AUTHZAPI
BOOL
WINAPI
AuthziFreeAuditParams(
    PAUDIT_PARAMS pParams
    );
    
#define AUTHZ_DS_CATEGORY_FLAG                   0x00000008

AUTHZAPI
BOOL
WINAPI
AuthziInitializeAuditEvent(
    IN  DWORD                         Flags,
    IN  AUTHZ_RESOURCE_MANAGER_HANDLE hRM,
    IN  AUTHZ_AUDIT_EVENT_TYPE_HANDLE hAuditEventType  OPTIONAL,
    IN  PAUDIT_PARAMS                 pAuditParams     OPTIONAL,
    IN  AUTHZ_AUDIT_QUEUE_HANDLE      hAuditQueue      OPTIONAL,
    IN  DWORD                         dwTimeOut,
    IN  PWSTR                         szOperationType,
    IN  PWSTR                         szObjectType,
    IN  PWSTR                         szObjectName,
    IN  PWSTR                         szAdditionalInfo OPTIONAL,
    OUT PAUTHZ_AUDIT_EVENT_HANDLE     phAuditEvent
    );

//                      
// Valid flags for AuthzModifyAuditEvent 
//
        
#define AUTHZ_AUDIT_EVENT_FLAGS            0x00000001
#define AUTHZ_AUDIT_EVENT_OPERATION_TYPE   0x00000002
#define AUTHZ_AUDIT_EVENT_OBJECT_TYPE      0x00000004
#define AUTHZ_AUDIT_EVENT_OBJECT_NAME      0x00000008
#define AUTHZ_AUDIT_EVENT_ADDITIONAL_INFO  0x00000010
        
#define AUTHZ_VALID_MODIFY_AUDIT_EVENT_FLAGS  (AUTHZ_AUDIT_EVENT_FLAGS           | \
                                               AUTHZ_AUDIT_EVENT_OPERATION_TYPE  | \
                                               AUTHZ_AUDIT_EVENT_OBJECT_TYPE     | \
                                               AUTHZ_AUDIT_EVENT_OBJECT_NAME     | \
                                               AUTHZ_AUDIT_EVENT_ADDITIONAL_INFO)
AUTHZAPI
BOOL
WINAPI
AuthziModifyAuditEvent(
    IN DWORD                    Flags,
    IN AUTHZ_AUDIT_EVENT_HANDLE hAuditEvent,
    IN DWORD                    NewFlags,
    IN PWSTR                    szOperationType,
    IN PWSTR                    szObjectType,
    IN PWSTR                    szObjectName,
    IN PWSTR                    szAdditionalInfo
    );

#ifdef __cplusplus
}
#endif

#endif