CmpCheckCreateAccessOnKcbStack

UINT8 __fastcall CmpCheckCreateAccessOnKcbStack(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        INT64 a4,
        char a5,
        int a6,
        char a7,
        __int64 a8,
        int *a9){
  _LIST_ENTRY *SecurityCacheEntryForKcbStack; 
  UINT64 v12; 
  _LIST_ENTRY *v13; 
  char v14; 
  VOID *v15; 
  INT64 *AccessStatus; 

  SecurityCacheEntryForKcbStack = CmpGetSecurityCacheEntryForKcbStack(a2, a8, a3);
  v13 = SecurityCacheEntryForKcbStack;
  v14 = 1;
  if( a7 && (int)CmpSetAccessStateForBackupRestore(a4, a5, &SecurityCacheEntryForKcbStack[2], 1) < 0
    || (v15 = (VOID *)(a6 | *(_DWORD *)(a4 + 24) | 4u), ((unsigned int)v15 & *(_DWORD *)(a3 + 96)) != (_DWORD)v15) )
  {
    v14 = 0;
    *a9 = -1073741790;
  }
  else if( !a7 || *(_DWORD *)(a4 + 16) )
  {
    LOBYTE(v12) = a5;
    LODWORD(AccessStatus) = a6;
    return CmpCheckCreateAccess(v15, (ACCESS_STATE *)&v13[2], a4, v12, AccessStatus);
  }
  else
  {
    *a9 = 0;
  }
  return v14;
}

Referenced by:

CmpDoParseKey