IoEnumerateRegisteredFiltersList

NTSTATUS __stdcall IoEnumerateRegisteredFiltersList(
        PDRIVER_OBJECT *DriverObjectList,
        UINT64 DriverObjectListSize,
        PULONG ActualNumberDriverObjects){
  _ETHREAD *CurrentThread; 
  unsigned int v4; 
  unsigned int v6; 
  void **v8; 
  unsigned int v9; 
  bool v10; 
  __int64 **v11; 
  unsigned int i; 
  INT64 v14; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = 0;
  v6 = DriverObjectListSize;
  --CurrentThread->Tcb.KernelApcDisable;
  if( !ExAcquireResourceExclusiveLite((UINT64)&stru_140C452E0 + 1280, 0, (INT64)ActualNumberDriverObjects) )
  {
    if( IopGetFsRegistrationInProgress() )
    {
      i = -1073741267;
      goto LABEL_8;
    }
    ExAcquireResourceExclusiveLite((UINT64)&stru_140C452E0 + 1280, 1, v14);
  }
  v8 = (void **)*(&stru_140C452E0 + 208);
  v9 = v6 >> 3;
  while( v8 != (void **)((char *)&stru_140C452E0 + 1664) )
  {
    v8 = (void **)*v8;
    ++v4;
  }
  v10 = v9 < v4;
  *ActualNumberDriverObjects = v4;
  v11 = (__int64 **)*(&stru_140C452E0 + 208);
  for( i = v10 ? 0xC0000023 : 0; v9; --v9 )
  {
    if( v11 == (__int64 **)((char *)&stru_140C452E0 + 1664) )
      break;
    ObfReferenceObject(v11[2]);
    *DriverObjectList++ = (PDRIVER_OBJECT)v11[2];
    v11 = (__int64 **)*v11;
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&stru_140C452E0 + 1280));
LABEL_8:
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return i;
}

Referenced by:

No references.