PpDevCfgProcessDeviceExtensions
INT64 __fastcall PpDevCfgProcessDeviceExtensions(
_DEVICE_NODE *DeviceNode,
INT64 a2,
INT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
UINT *a7,
INT64 a8){
wchar_t *v9;
wchar_t *v10;
int v11;
int inited;
const wchar_t *v13;
INT64 v14;
INT64 v15;
WCHAR v16;
INT64 v17;
int DriverConfiguration;
UINT8 v19;
_UNICODE_STRING *p_a9;
int v21;
__int64 v22;
wchar_t *Buffer;
unsigned int v24;
_UNICODE_STRING *v25;
INT64 v26;
INT64 v27;
WCHAR v28;
INT64 v29;
INT64 v30;
__int64 v31;
WCHAR *v32;
WCHAR *v33;
const wchar_t *v34;
__int64 v35;
int v36;
UINT64 v38;
UINT64 v39;
INT64 v40;
INT64 v41;
INT64 v42;
INT64 v43;
INT64 a10;
INT64 a10a;
INT64 a11;
INT64 a11a;
__int64 v48;
INT64 v49;
__int64 v50;
struct _UNICODE_STRING UnicodeString;
struct _UNICODE_STRING DestinationString;
struct _UNICODE_STRING v53;
struct _UNICODE_STRING v54;
struct _UNICODE_STRING a9;
INT64 v56;
__int64 v57;
struct _UNICODE_STRING *p_DestinationString;
int v59;
int v60;
__int64 v61;
struct _UNICODE_STRING MultiSz;
struct _UNICODE_STRING v63;
struct _UNICODE_STRING v64;
struct _UNICODE_STRING v65;
INT64 result[2];
INT64 v67;
_UNICODE_STRING *MultiSzAppend[2];
__int128 v69;
memset((INT64)result, 0i64);
LODWORD(v50) = 1;
*(_OWORD *)MultiSzAppend = 0i64;
*(_QWORD *)&DestinationString.Length = 0i64;
v9 = 0i64;
v69 = 0i64;
DestinationString.Buffer = 0i64;
v10 = 0i64;
v49 = 0i64;
v11 = 0;
*(_QWORD *)&a9.Length = 0i64;
a9.Buffer = 0i64;
*(_QWORD *)&MultiSz.Length = 0i64;
MultiSz.Buffer = 0i64;
*(_QWORD *)&v63.Length = 0i64;
v63.Buffer = 0i64;
*(_QWORD *)&v64.Length = 0i64;
v64.Buffer = 0i64;
*(_QWORD *)&v65.Length = 0i64;
v65.Buffer = 0i64;
*(_QWORD *)&v53.Length = 0i64;
v53.Buffer = 0i64;
*(_QWORD *)&v54.Length = 0i64;
v54.Buffer = 0i64;
*(_QWORD *)&UnicodeString.Length = 0i64;
UnicodeString.Buffer = 0i64;
v48 = 0i64;
if( !PiDevCfgMode )
{
inited = 0;
goto LABEL_66;
}
v13 = (const wchar_t *)*((_QWORD *)DeviceNode + 6);
if( !v13 )
{
inited = -1073741808;
goto LABEL_66;
}
inited = PiDevCfgInitDeviceContext(v13, 0i64, result);
if( inited < 0 )
goto LABEL_64;
v14 = v67;
v15 = *((_QWORD *)DeviceNode + 6);
v56 = (INT64)&DEVPKEY_Device_PendingConfigurationIds;
LODWORD(v38) = 1;
p_DestinationString = &DestinationString;
v57 = 8210i64;
v59 = 0;
v61 = 0i64;
v60 = 6;
inited = PiDevCfgQueryObjectProperties(1i64, v15, 1ui64, v67, (INT64)&v56, v38);
if( inited < 0 )
goto LABEL_64;
if( (int)v61 < 0 )
RtlInitUnicodeString(&DestinationString, 0i64, v16);
inited = PiDevCfgFindDeviceDriver((INT64)result, DestinationString.Buffer, &v49);
if( inited < 0 )
goto LABEL_64;
v17 = *(_QWORD *)(v49 + 208);
if( v17 == v49 + 208 )
goto LABEL_48;
do
{
DriverConfiguration = PiDevCfgQueryDriverConfiguration(v17);
inited = DriverConfiguration;
if( DriverConfiguration == -1073740653 )
{
v19 = 1;
p_a9 = &a9;
}
else
{
if( DriverConfiguration < 0 )
goto LABEL_64;
if( *(_QWORD *)(v17 + 296) )
{
*(_DWORD *)(v17 + 184) &= ~1u;
goto LABEL_27;
}
if( *(_QWORD *)(v17 + 312) )
{
inited = PiDevCfgAppendMultiSz(&MultiSz, 0i64, (_UNICODE_STRING *)(v17 + 304), 0);
if( inited < 0 )
goto LABEL_64;
}
if( *(_QWORD *)(v17 + 328) )
{
inited = PiDevCfgAppendMultiSz(&v63, 0i64, (_UNICODE_STRING *)(v17 + 320), 0);
if( inited < 0 )
goto LABEL_64;
}
if( *(_QWORD *)(v17 + 344) )
{
inited = PiDevCfgAppendMultiSz(&v64, 0i64, (_UNICODE_STRING *)(v17 + 336), 0);
if( inited < 0 )
goto LABEL_64;
}
if( *(_QWORD *)(v17 + 360) )
{
inited = PiDevCfgAppendMultiSz(&v65, 0i64, (_UNICODE_STRING *)(v17 + 352), 0);
if( inited < 0 )
goto LABEL_64;
}
v11 |= *(_DWORD *)(v17 + 384);
inited = PiDevCfgAppendMultiSz(&v53, (_UNICODE_STRING *)(v17 + 40), 0i64, 0);
if( inited < 0 )
goto LABEL_64;
v19 = 0;
p_a9 = &v54;
}
inited = PiDevCfgAppendMultiSz(p_a9, (_UNICODE_STRING *)(v17 + 392), 0i64, v19);
if( inited < 0 )
goto LABEL_64;
LABEL_27:
v21 = v11;
v17 = *(_QWORD *)v17;
}
while( v17 != v49 + 208 );
v22 = 0i64;
if( inited < 0 )
goto LABEL_64;
Buffer = a9.Buffer;
if( a9.Buffer )
{
LODWORD(a11) = 0;
LODWORD(a10) = a9.Length;
LODWORD(v42) = 8210;
inited = PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
*((WCHAR **)DeviceNode + 6),
1ui64,
v14,
v39,
(INT64)&DEVPKEY_Device_RequestConfigurationIds,
v42,
a9.Buffer,
a10,
a11);
if( inited >= 0 )
inited = -1073740653;
goto LABEL_64;
}
v24 = 0;
MultiSzAppend[0] = &MultiSz;
MultiSzAppend[1] = &v63;
*(_QWORD *)&v69 = &v64;
*((_QWORD *)&v69 + 1) = &v65;
do
{
v25 = MultiSzAppend[v22];
if( v25->Buffer )
{
v26 = *((_QWORD *)DeviceNode + 6);
v27 = *(_QWORD *)((char *)&off_140D2C6C0 + v22 * 8);
v59 = 0;
v61 = 0i64;
v56 = v27;
p_DestinationString = &UnicodeString;
LODWORD(v39) = 1;
v57 = 8210i64;
v60 = 6;
inited = PiDevCfgQueryObjectProperties((INT64)Buffer, v26, 1ui64, v14, (INT64)&v56, v39);
if( inited < 0 )
goto LABEL_64;
if( (int)v61 < 0 )
RtlInitUnicodeString(&UnicodeString, 0i64, v28);
inited = PiDevCfgAppendMultiSz(&UnicodeString, 0i64, v25, 0);
if( inited < 0 )
goto LABEL_64;
LODWORD(a11) = 0;
LODWORD(a10) = UnicodeString.Length;
LODWORD(v42) = 8210;
inited = PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
*((WCHAR **)DeviceNode + 6),
1ui64,
v14,
v40,
*(_QWORD *)((char *)&off_140D2C6C0 + v22 * 8),
v42,
UnicodeString.Buffer,
a10,
a11);
if( inited < 0 )
goto LABEL_64;
RtlFreeAnsiString(&UnicodeString);
}
++v24;
++v22;
}
while( v24 < 4 );
v29 = v49;
v11 = v21;
v30 = v49 + 208;
v31 = *(_QWORD *)(v49 + 208);
while( v31 != v30 )
{
if( (*(_DWORD *)(v31 + 184) & 1) != 0 )
{
inited = PiDevCfgConfigureDeviceDriver((__int64)DeviceNode, (__int64)result, v31, &v48, 0i64);
if( inited < 0 )
goto LABEL_64;
v11 |= v48;
v29 = v49;
}
v31 = *(_QWORD *)v31;
v30 = v29 + 208;
}
v9 = v53.Buffer;
v10 = v54.Buffer;
LABEL_48:
if( DestinationString.Buffer )
{
LODWORD(a11) = 0;
LODWORD(a10) = 0;
LODWORD(v42) = 0;
PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
*((WCHAR **)DeviceNode + 6),
1ui64,
v14,
v39,
(INT64)&DEVPKEY_Device_PendingConfigurationIds,
v42,
0i64,
a10,
a11);
}
v32 = (WCHAR *)*((_QWORD *)DeviceNode + 6);
LODWORD(a11) = 0;
if( v9 )
{
LODWORD(a10) = v53.Length;
LODWORD(v42) = 8210;
inited = PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
v32,
1ui64,
v14,
v39,
(INT64)&DEVPKEY_Device_DriverExtendedInfs,
v42,
v9,
a10,
a11);
if( inited < 0 )
goto LABEL_64;
}
else
{
LODWORD(a10) = 0;
LODWORD(v42) = 0;
PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
v32,
1ui64,
v14,
v39,
(INT64)&DEVPKEY_Device_DriverExtendedInfs,
v42,
0i64,
a10,
a11);
}
v33 = (WCHAR *)*((_QWORD *)DeviceNode + 6);
LODWORD(a11a) = 0;
if( v10 )
{
LODWORD(a10a) = v54.Length;
LODWORD(v43) = 8210;
inited = PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
v33,
1ui64,
v14,
v41,
(INT64)&DEVPKEY_Device_ExtendedConfigurationIds,
v43,
v10,
a10a,
a11a);
if( inited < 0 )
goto LABEL_64;
}
else
{
LODWORD(a10a) = 0;
LODWORD(v43) = 0;
PiDevCfgSetObjectProperty(
PiPnpRtlCtx,
result,
v33,
1ui64,
v14,
v41,
(INT64)&DEVPKEY_Device_ExtendedConfigurationIds,
v43,
0i64,
a10a,
a11a);
}
if( v11 )
{
v34 = (const wchar_t *)*((_QWORD *)DeviceNode + 6);
HIDWORD(v48) = 4;
if( (int)CmGetDeviceRegProp(PiPnpRtlCtx, v34, v14, 11, (__int64)&v50, (__int64)&v48, (__int64)&v48 + 4, 0) < 0
|| (_DWORD)v50 != 4
|| (v36 = v48, HIDWORD(v48) != 4) )
{
v36 = 0;
}
LODWORD(v48) = v11 | v36;
PiDevCfgSetDeviceRegProp(v35, (__int64)result, 11, 4, (__int64)&v48, 4);
}
LABEL_64:
if( v49 )
PiDevCfgFreeDriverNode(v49);
LABEL_66:
RtlFreeAnsiString(&DestinationString);
RtlFreeAnsiString(&MultiSz);
RtlFreeAnsiString(&v63);
RtlFreeAnsiString(&v64);
RtlFreeAnsiString(&v65);
RtlFreeAnsiString(&v53);
RtlFreeAnsiString(&v54);
RtlFreeAnsiString(&UnicodeString);
RtlFreeAnsiString(&a9);
PiDevCfgFreeDeviceContext((INT64)result);
return(unsigned int)inited;
}Referenced by:
No references.