PopPepUnregisterDevice

VOID __stdcall PopPepUnregisterDevice(PVOID P){
  unsigned int v2; 
  __int64 v3; 
  UINT64 v4; 
  PLARGE_INTEGER Timeout; 

  DbgPrintEx(0x92u, 3u, "PopPep: unregister device(0x%p)\n", P);
  v2 = 0;
  PopPepProcessEvent((POP_PEP_DEVICE *)P, 0i64, MaximumActivities, DeviceUnregister, (UINT64)Timeout, 0i64);
  KeWaitForSingleObject((UINT64)P + 40, 0, 0, 0, 0i64);
  PopPepWaitForDeviceRelease((_POP_PEP_DEVICE *)P);
  PopPepRemoveDevice((INT64 *)P);
  v3 = *((int *)P + 42);
  v4 = 0i64;
  if( (_DWORD)v3 != 4 )
    v4 = *((unsigned int *)P + v3 + 35);
  PopPepUpdateIdleStateRefCount(v4, 0i64, UpdateTypeDecrement);
  if( *((_DWORD *)P + 45) )
  {
    do
      PopPepUpdateIdleStateRefCount(
        *(unsigned int *)(*((_QWORD *)P + 25 * v2++ + 47) + 16i64),
        0i64,
        UpdateTypeDecrement);
    while( v2 < *((_DWORD *)P + 45) );
  }
  ExFreePoolWithTag(P, 0x54706550u);
}

Referenced by:

PopFxUnregisterDevice