IopFreeResetRemovalContext

VOID __stdcall IopFreeResetRemovalContext(_RESET_REMOVAL_CONTEXT *Context){
  __int64 v2; 
  VOID *v3; 

  v2 = *((_QWORD *)Context + 21);
  if( v2 )
  {
    if( _InterlockedExchangeAdd((volatile signed __int32 *)(v2 + 64), 0xFFFFFFFF) == 1 )
      ExFreePoolWithTag(*((PVOID *)Context + 21), 0x4B706E50u);
    *((_QWORD *)Context + 21) = 0i64;
  }
  v3 = (VOID *)*((_QWORD *)Context + 23);
  if( v3 )
  {
    ObfDereferenceObjectWithTag(v3, 0x52706E50ui64);
    *((_QWORD *)Context + 23) = 0i64;
  }
  RtlFreeAnsiString((_UNICODE_STRING *)(Context + 50));
  ExFreePoolWithTag(Context, 0);
}

Referenced by:

IoRequestDeviceRemovalForReset
IopDeviceRemovalForResetComplete
IopRetryDeviceRemovalForReset