SepAuditTypeList

VOID __stdcall SepAuditTypeList(
        _IOBJECT_TYPE_LIST *ObjectTypeList,
        UINT64 ObjectTypeListLength,
        INT64 *AccessStatus,
        UINT64 StartIndex,
        UINT8 *GenerateSuccessAudit,
        UINT8 *GenerateFailureAudit){
  __int64 v6; 
  unsigned int v7; 
  int v9; 
  __int64 v10; 
  __int64 v11; 
  int *v12; 
  _WORD *v13; 
  int v14; 

  v6 = (unsigned int)StartIndex;
  v7 = ObjectTypeListLength;
  v9 = *((_DWORD *)AccessStatus + (unsigned int)StartIndex) >> 31;
  v10 = (unsigned int)(StartIndex + 1);
  if( (unsigned int)v10 < (unsigned int)ObjectTypeListLength )
  {
    v11 = 6 * v6;
    v12 = (int *)AccessStatus + v10;
    v13 = (_WORD *)&ObjectTypeList[12 * v10] + 1;
    do
    {
      if( *(v13 - 1) <= LOWORD(ObjectTypeList[2 * v11]) )
        break;
      v14 = *v12;
      if( (_BYTE)v9 )
      {
        if( v14 >= 0 )
        {
          *GenerateSuccessAudit = 1;
          *v13 |= 1u;
        }
      }
      else if( v14 < 0 )
      {
        *GenerateFailureAudit = 1;
        *v13 |= 2u;
      }
      LODWORD(v10) = v10 + 1;
      ++v12;
      v13 += 24;
    }
    while( (unsigned int)v10 < v7 );
  }
}

Referenced by:

SepSetAuditInfoForObjectType