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