IoUnregisterFsRegistrationChange
VOID __stdcall IoUnregisterFsRegistrationChange(
PDRIVER_OBJECT DriverObject,
PDRIVER_FS_NOTIFICATION DriverNotificationRoutine){
_ETHREAD *CurrentThread;
PRESOURCELIST(__stdcall *i)(UINT32, INTERRUPTSYNCMODE);
PRESOURCELIST(__stdcall *v6)(UINT32, INTERRUPTSYNCMODE);
PRESOURCELIST(__stdcall **v7)(UINT32, INTERRUPTSYNCMODE);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&IopDatabaseResource, 1u);
for( i = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))IopFsNotifyChangeQueueHead;
i != IopFsNotifyChangeQueueHead;
i = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))i )
{
if( *((PDRIVER_OBJECT *)i + 2) == DriverObject && *((PDRIVER_FS_NOTIFICATION *)i + 3) == DriverNotificationRoutine )
{
v6 = *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))i;
if( *(PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))(*(_QWORD *)i + 8i64) != i
|| (v7 = (PRESOURCELIST(__stdcall **)(UINT32, INTERRUPTSYNCMODE))*((_QWORD *)i + 1), *v7 != i) )
{
__fastfail(3u);
}
*v7 = v6;
*((_QWORD *)v6 + 1) = v7;
ExFreePoolWithTag(i, 0);
break;
}
}
ExReleaseResourceLite(&IopDatabaseResource);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
HalPutDmaAdapter((PADAPTER_OBJECT)DriverObject);
}Referenced by:
No references.