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