CmpCheckCreateAccess

UINT8 __stdcall CmpCheckCreateAccess(
        VOID *Descriptor,
        ACCESS_STATE *AccessState,
        INT8 PreviousMode,
        UINT64 AdditionalAccess,
        INT64 *AccessStatus){
  _DWORD *v5; 
  int v6; 
  UINT8 v7; 
  _KPROCESSOR_MODE AccessMode; 
  unsigned int v10; 
  int v11; 
  INT64 v12; 

  v11 = HIDWORD(Descriptor);
  v5 = (_DWORD *)v12;
  v6 = PreviousMode + 32;
  v10 = 0;
  LOBYTE(AccessMode) = AdditionalAccess;
  v7 = (unsigned __int8)SeAccessCheck(
                          AccessState,
                          (PSECURITY_SUBJECT_CONTEXT)(PreviousMode + 32i64),
                          0,
                          (unsigned int)AccessStatus | 4,
                          0,
                          0i64,
                          (PGENERIC_MAPPING)((char *)CmKeyObjectType + 76),
                          AccessMode,
                          &v10,
                          (PNTSTATUS)v12);
  if( v7
    && ((unsigned __int8)AccessStatus & 0x20) != 0
    && (unsigned __int8)RtlIsSandboxedToken((_KNOWN_CONTROLLER_TYPE)v6) )
  {
    v7 = 0;
    *v5 = -1073741790;
  }
  return v7;
}

Referenced by:

CmpCheckCreateAccessOnKcbStack