IopFreeResetRemovalContext

VOID __fastcall IopFreeResetRemovalContext(CHAR *P){
  __int64 v2; 
  void *v3; 
  v2 = *((_QWORD *)P + 21);
  if( v2 )
  {
    if( _InterlockedExchangeAdd((volatile signed __int32 *)(v2 + 64), 0xFFFFFFFF) == 1 )
      ExFreePoolWithTag(*((PVOID *)P + 21), 0x4B706E50u);
    *((_QWORD *)P + 21) = 0i64;
  }
  v3 = (void *)*((_QWORD *)P + 23);
  if( v3 )
  {
    ObfDereferenceObjectWithTag(v3, 0x52706E50ui64);
    *((_QWORD *)P + 23) = 0i64;
  }
  RtlFreeAnsiString((_UNICODE_STRING *)(P + 200));
  ExFreePoolWithTag(P, 0);
}

Referenced by:

IoRequestDeviceRemovalForReset
IopDeviceRemovalForResetComplete
IopRetryDeviceRemovalForReset