ExpWnfValidatePubSubPreconditions

NTSTATUS __stdcall ExpWnfValidatePubSubPreconditions(
        UINT64 DesiredAccess,
        _WNF_STATE_NAME_REGISTRATION *StateNameRegistration,
        UINT64 Length,
        _WNF_TYPE_ID *CapturedTypeId,
        UINT64 BypassAccessChecks){
  unsigned int v6; 
  int v8; 
  const _WNF_TYPE_ID *TypeId; 
  __int64 v11; 

  v6 = Length;
  if( (_DWORD)BypassAccessChecks
    || (v8 = ExpWnfCheckCallerAccess(StateNameRegistration->SecurityDescriptor, (unsigned int)DesiredAccess), v8 >= 0) )
  {
    TypeId = StateNameRegistration->TypeId;
    if( !TypeId )
      return StateNameRegistration->MaxStateSize < v6 ? 0xC000000D : 0;
    if( !CapturedTypeId )
      return -1073741811;
    v11 = *(_QWORD *)&TypeId->TypeId[0].Data1 - *(_QWORD *)&CapturedTypeId->TypeId[0].Data1;
    if( *(_QWORD *)&TypeId->TypeId[0].Data1 == *(_QWORD *)&CapturedTypeId->TypeId[0].Data1 )
      v11 = *(_QWORD *)TypeId->TypeId[0].Data4 - *(_QWORD *)CapturedTypeId->TypeId[0].Data4;
    if( v11 )
      return -1073741811;
    else
      return StateNameRegistration->MaxStateSize < v6 ? 0xC000000D : 0;
  }
  return v8;
}

Referenced by:

ExpNtUpdateWnfStateData
NtQueryWnfStateData