PnpNotifyUserModeDeviceRemoval

NTSTATUS __fastcall PnpNotifyUserModeDeviceRemoval(
        __int64 a1,
        _WORD *a2,
        __int128 *a3,
        __int64 a4,
        __int64 a5,
        _DWORD *a6){
  UINT8 *v10; 
  __int128 v11; 
  __int64 v12; 
  NTSTATUS result; 
  int v14; 
  __int128 v15; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int16 pszDest[200]; 
  if( a6 )
    *a6 = 0;
  v10 = (UINT8 *)(a1 + 160);
  v11 = *(_OWORD *)(a1 + 112);
  v12 = *(_QWORD *)(a1 + 48);
  v19 = *(_QWORD *)(a1 + 56);
  result = RtlStringCchCopyW((PWCHAR)pszDest, 0xC8ui64, (PWCHAR)(a1 + 160));
  v14 = result;
  if( !result )
  {
    v15 = *a3;
    *(_QWORD *)(a1 + 48) = a4;
    v16 = -1i64;
    *(_OWORD *)(a1 + 112) = v15;
    *(_QWORD *)(a1 + 56) = a5;
    while( *a2 )
    {
      v17 = -1i64;
      do
        ++v17;
      while( a2[v17] );
      memmove(v10, (UINT8 *)a2, 2 * v17 + 2);
      v14 = PiUEventNotifyUserMode(a1);
      if( v14 < 0 )
      {
        if( v14 == -1073741536 )
          v14 = -2147483608;
        break;
      }
      if( a6 )
        ++*a6;
      v18 = -1i64;
      do
        ++v18;
      while( a2[v18] );
      a2 += v18 + 1;
    }
    *(_QWORD *)(a1 + 56) = v19;
    *(_OWORD *)(a1 + 112) = v11;
    *(_QWORD *)(a1 + 48) = v12;
    do
      ++v16;
    while( pszDest[v16] );
    memmove(v10, (UINT8 *)pszDest, 2 * v16 + 2);
    return v14;
  }
  return result;
}

Referenced by:

PiProcessQueryAndCancelRemoval
PnpCancelRemoveOnHungDevices
PnpProcessQueryRemoveAndEject