PiCheckRemovalPreconditions

NTSTATUS __stdcall PiCheckRemovalPreconditions(INT64 a1, INT64 a2){
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  int v5; 
  __int64 v6; 
  NTSTATUS result; 
  _UNICODE_STRING *v8; 
  int v9; 

  LODWORD(v2) = PiGetTargetDeviceNode(a2);
  v6 = v2;
  if( (v5 & 0xFFFFFFFB) == 0 && (*(_DWORD *)(v2 + 396) & 0x1000) != 0 )
  {
    v8 = (_UNICODE_STRING *)(v2 + 40);
    v9 = 1;
LABEL_14:
    PnpFinalizeVetoedRemove(v3, v9, v8);
    return -2147483608;
  }
  result = 0;
  if( !v5 && *(_DWORD *)(v4 + 16) == 22 && *(_DWORD *)(v6 + 600) )
  {
    v8 = (_UNICODE_STRING *)(v6 + 40);
    v9 = 10;
    goto LABEL_14;
  }
  if( *(_DWORD *)(v6 + 300) == 786 && !v5 && *(_DWORD *)(v4 + 16) == 54 )
  {
    v8 = 0i64;
    v9 = 13;
    goto LABEL_14;
  }
  return result;
}

Referenced by:

PnpProcessQueryRemoveAndEject