VfIrpDatabaseEntryInsertAndLock

LIST_ENTRY *__fastcall VfIrpDatabaseEntryInsertAndLock(UINT64 a1, INT64 a2, INT64 a3){
  _QWORD *v4; 
  __int64 v6; 
  _QWORD *v7; 
  __int64 v8; 
  LIST_ENTRY *result; 
  INT64 OldIrql; 
  OldIrql = a2;
  v4 = (_QWORD *)(a3 + 32);
  *(_QWORD *)a3 = a1;
  LOBYTE(OldIrql) = 0;
  *(_QWORD *)(a3 + 8) = 0i64;
  *(_QWORD *)(a3 + 24) = 1i64;
  *(_DWORD *)(a3 + 20) = 1;
  *(_QWORD *)(a3 + 48) = ViPacketNotificationCallback;
  *(_QWORD *)(a3 + 40) = a3 + 32;
  *(_QWORD *)(a3 + 32) = a3 + 32;
  ViIrpDatabaseAcquireLockExclusive((UINT8 *)&OldIrql);
  v6 = 16i64 * (unsigned __int8)(-125 * (a1 >> 12));
  v7 = (_QWORD *)(v6 + ViIrpDatabase);
  v8 = *(_QWORD *)(v6 + ViIrpDatabase);
  if( *(_QWORD *)(v8 + 8) != v6 + ViIrpDatabase )
    __fastfail(3u);
  v4[1] = v7;
  *v4 = v8;
  *(_QWORD *)(v8 + 8) = v4;
  *v7 = v4;
  VfUtilAddressRangeAdd((UINT64 *)(v6 + ViIrpDatabaseAddressRanges), a1, 208i64);
  ViIrpDatabaseReleaseLockExclusive(OldIrql);
  result = (LIST_ENTRY *)VfIrpDatabaseEntryFindAndLock(a1);
  _InterlockedDecrement((volatile signed __int32 *)(a3 + 20));
  --*(_DWORD *)(a3 + 24);
  return result;
}

Referenced by:

VfPacketCreateAndLock