CmpCheckCreateAccessOnKcbStack

char __fastcall CmpCheckCreateAccessOnKcbStack(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        __int64 a4,
        KPROCESSOR_MODE a5,
        int a6,
        char a7,
        __int64 a8,
        int *a9){
  LIST_ENTRY *SecurityCacheEntryForKcbStack; 
  LIST_ENTRY *v12; 
  char v13; 
  _UNICODE_STRING *v14; 
  UINT64 AdditionalAccess; 
  SecurityCacheEntryForKcbStack = CmpGetSecurityCacheEntryForKcbStack(a2, a8, a3);
  v12 = SecurityCacheEntryForKcbStack;
  v13 = 1;
  if( a7 && (int)CmpSetAccessStateForBackupRestore((_DWORD *)a4, a5, &SecurityCacheEntryForKcbStack[2], 1) < 0
    || (v14 = (_UNICODE_STRING *)(a6 | *(_DWORD *)(a4 + 24) | 4u),
        ((unsigned int)v14 & *(_DWORD *)(a3 + 96)) != (_DWORD)v14) )
  {
    v13 = 0;
    *a9 = -1073741790;
  }
  else if( !a7 || *(_DWORD *)(a4 + 16) )
  {
    LODWORD(AdditionalAccess) = a6;
    return CmpCheckCreateAccess(v14, &v12[2], (_ACCESS_STATE *)a4, a5, AdditionalAccess, (INT64 *)a9);
  }
  else
  {
    *a9 = 0;
  }
  return v13;
}

Referenced by:

CmpDoParseKey