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.