VfIrpLogUnlockDatabase

VOID __stdcall VfIrpLogUnlockDatabase(UINT64 SiloNumber){
  __int64 v1; 
  unsigned __int64 v2; 
  _QWORD **v3; 
  _QWORD *v4; 
  PADAPTER_OBJECT *v5; 
  PADAPTER_OBJECT v6; 
  PADAPTER_OBJECT **v7; 

  v1 = 3i64 * (unsigned int)SiloNumber;
  *(_DWORD *)(ViIrpLogDatabase + 24i64 * (unsigned int)SiloNumber) = 0;
  v2 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&ViIrpLogDatabaseLock);
  v3 = (_QWORD **)(ViIrpLogDatabase + 8 * (v1 + 1));
  v4 = *v3;
  while( v4 != v3 )
  {
    v5 = (PADAPTER_OBJECT *)(v4 - 1);
    v4 = (_QWORD *)*v4;
    if( ((_DWORD)v5[3] & 4) != 0 )
    {
      HalPutDmaAdapter(*v5);
      v6 = v5[1];
      v7 = (PADAPTER_OBJECT **)v5[2];
      if( (PADAPTER_OBJECT *)v6->AdapterObject.DmaHeader.DmaOperations != v5 + 1 || *v7 != v5 + 1 )
        __fastfail(3u);
      *v7 = (PADAPTER_OBJECT *)v6;
      v6->AdapterObject.DmaHeader.DmaOperations = (_DMA_OPERATIONS *)v7;
      ExFreePoolWithTag(v5, 0);
    }
  }
  KxReleaseSpinLock(&ViIrpLogDatabaseLock);
  __writecr8(v2);
}

Referenced by:

ViDdiDispatchWmiQueryAllData