IoEnumerateRegisteredFiltersList
NTSTATUS __stdcall IoEnumerateRegisteredFiltersList(
PDRIVER_OBJECT *DriverObjectList,
ULONG DriverObjectListSize,
PULONG ActualNumberDriverObjects){
_ETHREAD *CurrentThread;
ULONG v4;
PRESOURCELIST(__stdcall *v8)(UINT32, INTERRUPTSYNCMODE);
ULONG v9;
bool v10;
PRESOURCELIST(__stdcall *v11)(UINT32, INTERRUPTSYNCMODE);
unsigned int i;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = 0;
--*((_WORD *)CurrentThread + 242);
if( !ExAcquireResourceExclusiveLite(&IopDatabaseResource, 0) )
{
if( IopGetFsRegistrationInProgress() )
{
i = -1073741267;
goto LABEL_8;
}
ExAcquireResourceExclusiveLite(&IopDatabaseResource, 1u);
}
v8 = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))IopFsNotifyChangeQueueHead;
v9 = DriverObjectListSize >> 3;
while( v8 != IopFsNotifyChangeQueueHead )
{
v8 = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))v8;
++v4;
}
v10 = v9 < v4;
*ActualNumberDriverObjects = v4;
v11 = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))IopFsNotifyChangeQueueHead;
for( i = v10 ? 0xC0000023 : 0; v9; --v9 )
{
if( v11 == IopFsNotifyChangeQueueHead )
break;
ObfReferenceObject(*((PVOID *)v11 + 2));
*DriverObjectList++ = (PDRIVER_OBJECT)*((_QWORD *)v11 + 2);
v11 = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))v11;
}
ExReleaseResourceLite(&IopDatabaseResource);
LABEL_8:
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return i;
}Referenced by:
No references.