PiSwDeviceInterfacesUpdateState

INT64 __fastcall PiSwDeviceInterfacesUpdateState(INT64 a1, CHAR a2){
  INT64 v2; 
  WCHAR *v3; 
  __int64 *v4; 
  int v5; 
  int PWSTR; 
  __int64 v9; 
  WCHAR v10; 
  struct _UNICODE_STRING DestinationString; 
  PCWSTR SourceString; 
  v2 = a1 + 184;
  v3 = 0i64;
  v4 = *(__int64 **)(a1 + 184);
  v5 = 0;
  SourceString = 0i64;
  DestinationString = 0i64;
  if( v4 == (__int64 *)(a1 + 184) )
    return(unsigned int)v5;
  while( !*((_BYTE *)v4 + 36) )
  {
LABEL_4:
    v4 = (__int64 *)*v4;
    if( v4 == (__int64 *)v2 )
      goto LABEL_5;
  }
  PWSTR = PnpAllocatePWSTR((WCHAR *)v4[2], 0x7FFFFFFFui64, 0x57706E50ui64, (WCHAR **)&SourceString);
  v3 = (WCHAR *)SourceString;
  v5 = PWSTR;
  if( PWSTR >= 0 )
  {
    v5 = CmSetDeviceInterfacePathFormat(v9, (WCHAR *)SourceString, 1);
    if( v5 >= 0 )
    {
      RtlInitUnicodeString(&DestinationString, v3, v10);
      v5 = IoSetDeviceInterfaceState(&DestinationString, a2);
      if( v5 >= 0 )
      {
        ExFreePoolWithTag(v3, 0x57706E50u);
        v3 = 0i64;
        SourceString = 0i64;
        goto LABEL_4;
      }
    }
  }
LABEL_5:
  if( v3 )
    ExFreePoolWithTag(v3, 0x57706E50u);
  return(unsigned int)v5;
}

Referenced by:

PiSwPdoPnPDispatch
PiSwProcessRemove