/*++ Copyright (c) 1997-2000 Microsoft Corporation Module Name: safepol.c (SAFER Code Authorization Policy) Abstract: This module implements the WinSAFER APIs Author: Jeffrey Lawson (JLawson) - Apr 1999 Environment: User mode only. Exported Functions: CodeAuthzpGetInformationCodeAuthzPolicy CodeAuthzpSetInformationCodeAuthzPolicy SaferGetPolicyInformation (public win32) SaferSetPolicyInformation (public win32) Revision History: Created - Apr 1999 --*/ #include "pch.h" #pragma hdrstop #include #include #include "saferp.h" NTSTATUS NTAPI CodeAuthzpGetInformationCodeAuthzPolicy ( IN DWORD dwScopeId, IN SAFER_POLICY_INFO_CLASS CodeAuthzPolicyInfoClass, IN DWORD InfoBufferSize, IN OUT PVOID InfoBuffer, OUT PDWORD InfoBufferRetSize ) /*++ Routine Description: Arguments: dwScopeId - CodeAuthzPolicyInfoClass - InfoBufferSize - InfoBuffer - InfoBufferRetSize - Return Value: Returns STATUS_SUCCESS if no error occurs, otherwise returns the status code indicating the nature of the failure. --*/ { NTSTATUS Status; // // Handle the specific information type as appropriate. // switch (CodeAuthzPolicyInfoClass) { case SaferPolicyLevelList: // scope is only primary. Status = CodeAuthzPol_GetInfoCached_LevelListRaw( dwScopeId, InfoBufferSize, InfoBuffer, InfoBufferRetSize); break; case SaferPolicyDefaultLevel: // scope is primary or secondary for non-registry case. Status = CodeAuthzPol_GetInfoCached_DefaultLevel( dwScopeId, InfoBufferSize, InfoBuffer, InfoBufferRetSize); break; case SaferPolicyEnableTransparentEnforcement: // scope is only primary. Status = CodeAuthzPol_GetInfoRegistry_TransparentEnabled( dwScopeId, InfoBufferSize, InfoBuffer, InfoBufferRetSize); break; case SaferPolicyEvaluateUserScope: // scope is only primary. Status = CodeAuthzPol_GetInfoCached_HonorUserIdentities( dwScopeId, InfoBufferSize, InfoBuffer, InfoBufferRetSize); break; case SaferPolicyScopeFlags: // scope is only primary. Status = CodeAuthzPol_GetInfoRegistry_ScopeFlags( dwScopeId, InfoBufferSize, InfoBuffer, InfoBufferRetSize); break; default: Status = STATUS_INVALID_INFO_CLASS; break; } return Status; } NTSTATUS NTAPI CodeAuthzpSetInformationCodeAuthzPolicy ( IN DWORD dwScopeId, IN SAFER_POLICY_INFO_CLASS CodeAuthzPolicyInfoClass, IN DWORD InfoBufferSize, OUT PVOID InfoBuffer ) /*++ Routine Description: Arguments: dwScopeId - CodeAuthzPolicyInfoClass - InfoBufferSize - InfoBuffer - Return Value: Returns STATUS_SUCCESS if no error occurs, otherwise returns the status code indicating the nature of the failure. --*/ { NTSTATUS Status; // // Handle the specific information type as appropriate. // switch (CodeAuthzPolicyInfoClass) { case SaferPolicyLevelList: // not valid for setting. Status = STATUS_INVALID_INFO_CLASS; break; case SaferPolicyDefaultLevel: // scope is primary or secondary for non-registry case. Status = CodeAuthzPol_SetInfoDual_DefaultLevel( dwScopeId, InfoBufferSize, InfoBuffer); break; case SaferPolicyEnableTransparentEnforcement: // scope is only primary. Status = CodeAuthzPol_SetInfoRegistry_TransparentEnabled( dwScopeId, InfoBufferSize, InfoBuffer); break; case SaferPolicyScopeFlags: // scope is only primary. Status = CodeAuthzPol_SetInfoRegistry_ScopeFlags( dwScopeId, InfoBufferSize, InfoBuffer); break; case SaferPolicyEvaluateUserScope: // scope is only primary. Status = CodeAuthzPol_SetInfoDual_HonorUserIdentities( dwScopeId, InfoBufferSize, InfoBuffer); break; default: Status = STATUS_INVALID_INFO_CLASS; break; } return Status; } BOOL WINAPI SaferGetPolicyInformation( IN DWORD dwScopeId, IN SAFER_POLICY_INFO_CLASS CodeAuthzPolicyInfoClass, IN DWORD InfoBufferSize, IN OUT PVOID InfoBuffer, IN OUT PDWORD InfoBufferRetSize, IN LPVOID lpReserved ) /*++ Routine Description: Arguments: dwScopeId - CodeAuthzPolicyInfoClass - InfoBufferSize - InfoBuffer - InfoBufferRetSize - lpReserved - unused, must be zero. Return Value: Returns TRUE if successful, otherwise returns FALSE and sets the value returned by GetLastError() to be the specific cause. --*/ { NTSTATUS Status; Status = CodeAuthzpGetInformationCodeAuthzPolicy( dwScopeId, CodeAuthzPolicyInfoClass, InfoBufferSize, InfoBuffer, InfoBufferRetSize); if (NT_SUCCESS(Status)) return TRUE; BaseSetLastNTError(Status); UNREFERENCED_PARAMETER(lpReserved); return FALSE; } BOOL WINAPI SaferSetPolicyInformation( IN DWORD dwScopeId, IN SAFER_POLICY_INFO_CLASS CodeAuthzPolicyInfoClass, IN DWORD InfoBufferSize, IN PVOID InfoBuffer, IN LPVOID lpReserved ) /*++ Routine Description: Arguments: dwScopeId - CodeAuthzPolicyInfoClass - InfoBufferSize - InfoBuffer - lpReserved - unused, must be zero. Return Value: Returns TRUE if successful, otherwise returns FALSE and sets the value returned by GetLastError() to be the specific cause. --*/ { NTSTATUS Status; Status = CodeAuthzpSetInformationCodeAuthzPolicy ( dwScopeId, CodeAuthzPolicyInfoClass, InfoBufferSize, InfoBuffer); if (NT_SUCCESS(Status)) return TRUE; BaseSetLastNTError(Status); UNREFERENCED_PARAMETER(lpReserved); return FALSE; }