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.