PiDevCfgRequestDriverConfigurations
NTSTATUS __stdcall PiDevCfgRequestDriverConfigurations(POOL_TYPE DeviceContext, PI_DEVCFG_DRIVER_NODE *DriverNode){
__int64 v2;
NTSTATUS DriverConfiguration;
int appended;
PI_DEVCFG_DRIVER_NODE *v6;
PI_DEVCFG_DRIVER_NODE *i;
VOID *v9;
WCHAR *v10;
_DEVPROPKEY *PropertyKey;
_UNICODE_STRING MultiSz;
v2 = *(_QWORD *)&DeviceContext;
*(_QWORD *)&MultiSz.Length = 0i64;
MultiSz.Buffer = 0i64;
DriverConfiguration = PiDevCfgQueryDriverConfiguration(DriverNode);
appended = DriverConfiguration;
if( (int)(DriverConfiguration + 0x80000000) < 0 || DriverConfiguration == -1073740653 )
{
appended = PiDevCfgAppendMultiSz(&MultiSz, (const VOID **)DriverNode + 49, 0i64, 1u);
if( appended >= 0 )
{
v6 = DriverNode + 52;
for( i = *(PI_DEVCFG_DRIVER_NODE **)v6; i != v6; i = *(PI_DEVCFG_DRIVER_NODE **)i )
{
appended = PiDevCfgQueryDriverConfiguration(i);
if( ((appended + 0x80000000) & 0x80000000) == 0 && appended != -1073740653 )
goto LABEL_13;
appended = PiDevCfgAppendMultiSz(&MultiSz, (const VOID **)i + 49, 0i64, 1u);
if( appended < 0 )
goto LABEL_13;
}
if( MultiSz.Buffer )
{
LODWORD(PropertyKey) = MultiSz.Length;
LODWORD(v10) = 8210;
appended = PiDevCfgSetObjectProperty(
*(&stru_140CF2E80 + 607),
(PI_DEVCFG_DEVICE_CONTEXT *)v2,
*(_QWORD *)(v2 + 8),
(WCHAR *)1,
*(WCHAR **)(v2 + 16),
v9,
(UINT64)&DEVPKEY_Device_RequestConfigurationIds,
v10,
(UINT64)MultiSz.Buffer,
PropertyKey);
}
else
{
appended = -1073740653;
}
}
}
LABEL_13:
RtlFreeAnsiString(&MultiSz);
return appended;
}Referenced by:
PiDevCfgProcessDevice