ObEnumerateObjectsByType

__int64 ObEnumerateObjectsByType(){
  unsigned int v0; 
  _DWORD *v1; 
  _DWORD *v2; 
  int v3; 
  __int64 v4; 
  __int64 v5; 
  _UNICODE_STRING ObjectName; 
  ObjectName = 0i64;
  v0 = 0;
  ObpCreateTypeArray();
  v2 = v1;
  if( v1 )
  {
    v3 = 0;
    if( *v1 )
    {
      while( 1 )
      {
        v4 = *(_QWORD *)&v2[2 * v3 + 2];
        if( v4 )
        {
          v5 = (*(_BYTE *)(v4 + 58) & 2) != 0 ? v4
                                              + 32
                                              - *((unsigned __int8 *)ObpInfoMaskToOffset + (*(_BYTE *)(v4 + 58) & 3)) : 0i64;
          if( v5 )
            ObjectName = *(_UNICODE_STRING *)(v5 + 8);
          else
            ObjectName = 0i64;
          if( !IovpBuildDriverObjectList(
                  (PVOID)(v4 + 80),
                  &ObjectName,
                  *(_QWORD *)(v4 + 40),
                  *(_QWORD *)(v4 + 32),
                  0i64) )
            break;
        }
        if( (unsigned int)++v3 >= *v2 )
          goto LABEL_14;
      }
      v0 = -2147483622;
    }
LABEL_14:
    ObpDestroyTypeArray(v2);
  }
  return v0;
}

Referenced by:

IovUnloadDrivers