PiDevCfgLogDeviceConfigured
VOID __stdcall PiDevCfgLogDeviceConfigured(
_DEVICE_NODE *DeviceNode,
_PI_DEVCFG_DEVICE_CONTEXT *DeviceContext,
_PI_DEVCFG_DRIVER_NODE *DriverNode,
UINT64 ConfigStatus,
INT64 ResultStatus){
_PI_DEVCFG_DRIVER_NODE *v5;
_PI_DEVCFG_DEVICE_CONTEXT *v6;
_DEVICE_NODE *v7;
PI_DEVCFG_QUERY_PROPERTY_PARAM *v8;
__int64 v9;
wchar_t *Buffer;
int v11;
__int64 **v12;
__int64 **v13;
int v14;
char v15;
__int64 *v16;
__int64 v17;
__int64 v18;
const wchar_t *v19;
const wchar_t *v20;
const wchar_t *v21;
const wchar_t *v22;
const wchar_t *v23;
const wchar_t *v24;
__int64 v25;
_PI_DEVCFG_DRIVER_NODE *v26;
_PI_DEVCFG_DRIVER_NODE *v27;
wchar_t *v28;
__int64 v29;
__int64 v30;
wchar_t *v31;
__int64 v32;
__int64 v33;
__int64 v34;
int v35;
__int64 *v36;
unsigned __int16 v37;
wchar_t *StringRoutine;
_UNICODE_STRING v39;
__int64 **v40;
WCHAR *v41;
WCHAR *v42;
unsigned __int64 v43;
__int64 v44;
__int16 v45;
__int64 v46;
__int64 v47;
const wchar_t *v48;
unsigned __int64 v49;
int v50;
unsigned __int16 Length;
unsigned int v52;
__int64 v53;
__int64 v54;
char v55;
__int64 *v56;
__int64 v57;
__int64 v58;
const wchar_t *v59;
const wchar_t *v60;
const wchar_t *v61;
const wchar_t *v62;
const wchar_t *v63;
const wchar_t *v64;
char v65;
__int64 *v66;
__int64 v67;
__int64 v68;
const wchar_t *LogString;
const wchar_t *v70;
const wchar_t *v71;
const wchar_t *v72;
const wchar_t *v73;
const wchar_t *v74;
char v75;
__int64 *v76;
__int64 v77;
__int64 v78;
const wchar_t *v79;
const wchar_t *v80;
const wchar_t *v81;
const wchar_t *v82;
const wchar_t *v83;
const wchar_t *v84;
int v85;
unsigned __int16 v86;
wchar_t *v87;
_PI_DEVCFG_DRIVER_NODE *v88;
unsigned int v89;
UINT64 v90;
PI_DEVCFG_QUERY_PROPERTY_PARAM *v91;
__int64 v92;
unsigned __int16 v93;
unsigned int v94;
__int64 v95;
const wchar_t *v96;
NTSTATUS v97;
WCHAR **ppszDestEnd;
size_t *pcchRemaining;
size_t *pcchRemaininga;
_BOOL4 v101;
_TIME_FIELDS TimeFields;
int v103;
_UNICODE_STRING UnicodeString;
_UNICODE_STRING v105;
_UNICODE_STRING v106;
_UNICODE_STRING v107;
_PI_DEVCFG_DEVICE_CONTEXT *DeviceContexta;
_UNICODE_STRING DestinationString;
int v110;
int v111;
_DEVICE_NODE *DeviceNodea;
_UNICODE_STRING GuidString;
_UNICODE_STRING v114;
WCHAR *v115;
size_t v116[2];
size_t pcchNewDestLength[2];
_PI_DEVCFG_DRIVER_NODE *v118;
__int64 v119;
__int64 *v120;
_UNICODE_STRING v121;
_UNICODE_STRING v122;
_GUID Guid;
UINT64 PropertyCount[20];
WCHAR pszDest[12];
WCHAR v126[24];
__int64 v127;
__int64 *v128;
v120 = v128;
v103 = ConfigStatus;
v118 = DriverNode;
DeviceContexta = DeviceContext;
v5 = DriverNode;
DeviceNodea = DeviceNode;
v6 = DeviceContext;
*(_QWORD *)&DestinationString.Length = 0i64;
v7 = DeviceNode;
DestinationString.Buffer = 0i64;
*(_QWORD *)&UnicodeString.Length = 0i64;
UnicodeString.Buffer = 0i64;
*(_QWORD *)&v114.Length = 0i64;
v114.Buffer = 0i64;
v101 = 1;
v119 = 0i64;
*(_QWORD *)&v107.Length = 0i64;
v107.Buffer = 0i64;
*(_QWORD *)&GuidString.Length = 0i64;
GuidString.Buffer = 0i64;
v111 = 0;
*(_QWORD *)&v105.Length = 0i64;
v105.Buffer = 0i64;
TimeFields = 0i64;
v121 = 0i64;
Guid = 0i64;
v106 = 0i64;
v122 = 0i64;
if( (byte_140C130BA & 0x18) != 24 )
goto LABEL_38;
if( DriverNode )
{
memset(PropertyCount, 0i64, sizeof(PropertyCount));
v8 = (PI_DEVCFG_QUERY_PROPERTY_PARAM *)*((_QWORD *)v5 + 2);
v9 = *((_QWORD *)v5 + 8);
PropertyCount[0] = (UINT64)&DEVPKEY_DriverPackage_OriginalInfName;
LODWORD(pcchRemaining) = 3;
PropertyCount[2] = (UINT64)&DestinationString;
PropertyCount[5] = (UINT64)DEVPKEY_DriverPackage_DriverFlightIds;
PropertyCount[7] = (UINT64)&UnicodeString;
PropertyCount[10] = (UINT64)DEVPKEY_DriverPackage_SubmissionId;
PropertyCount[12] = (UINT64)&v114;
LODWORD(PropertyCount[1]) = 18;
HIDWORD(PropertyCount[3]) = 6;
LODWORD(PropertyCount[6]) = 8210;
HIDWORD(PropertyCount[8]) = 6;
LODWORD(PropertyCount[11]) = 18;
HIDWORD(PropertyCount[13]) = 6;
if( PiDevCfgQueryObjectProperties((WCHAR *)0x12, v9, (VOID *)8, v8, (UINT64)PropertyCount, (UINT64)pcchRemaining) < 0 )
goto LABEL_38;
if( SLODWORD(PropertyCount[4]) < 0 )
RtlInitUnicodeString(&DestinationString, 0i64);
if( SLODWORD(PropertyCount[9]) < 0 )
RtlInitUnicodeString(&UnicodeString, 0i64);
Buffer = UnicodeString.Buffer;
if( UnicodeString.Buffer && (Length = UnicodeString.Length, UnicodeString.Length > 4u) )
{
v52 = 0;
if( (unsigned __int64)UnicodeString.Length >> 1 != 2 )
{
v53 = 0i64;
do
{
if( !Buffer[v53] )
{
Buffer[v53] = 59;
Buffer = UnicodeString.Buffer;
Length = UnicodeString.Length;
}
v53 = ++v52;
}
while( v52 < ((unsigned __int64)Length >> 1) - 2 );
v6 = DeviceContexta;
}
UnicodeString.Length = Length - 2;
}
else
{
RtlFreeAnsiString(&UnicodeString);
RtlInitUnicodeString(&UnicodeString, 0i64);
}
if( SLODWORD(PropertyCount[14]) < 0 )
RtlInitUnicodeString(&v114, 0i64);
if( DestinationString.Buffer )
v101 = (unsigned __int8)RtlEqualUnicodeString((PCUNICODE_STRING)(v5 + 10), &DestinationString, 1u) != 0;
RtlTimeToTimeFields((INT64 *)v5 + 14, (WORD *)&TimeFields, (INT64)Buffer);
if( RtlStringCchPrintfW(pszDest, 0xBui64, (WCHAR *)L"%02d/%02d/%04d") < 0 )
pszDest[0] = 0;
if( RtlStringCchPrintfW(v126, 0x18ui64, (WCHAR *)L"%u.%u.%u.%u") < 0 )
v126[0] = 0;
v11 = v5[27];
v12 = (__int64 **)(v5 + 56);
v13 = (__int64 **)*((_QWORD *)v5 + 28);
if( v11 == -1 )
v11 = 0;
v110 = v11;
if( v13 != v12 )
{
v35 = 0;
do
{
v36 = v13[22];
v35 += *((unsigned __int16 *)v13 + 20) + *((unsigned __int16 *)v13 + 36) + 22;
if( v36 )
{
v54 = -1i64;
do
++v54;
while( *((_WORD *)v36 + v54) );
v35 += 2 * v54 + 2;
}
v13 = (__int64 **)*v13;
}
while( v13 != v12 );
v37 = v35 + 2;
if( (unsigned int)(v35 + 2) > 0xFFFE )
v37 = -2;
v107.MaximumLength = v37;
StringRoutine = (wchar_t *)ExpAllocateStringRoutine(v37);
v107.Buffer = StringRoutine;
if( !StringRoutine )
goto LABEL_38;
v39 = v107;
*StringRoutine = 0;
v40 = (__int64 **)*v12;
TimeFields = (_TIME_FIELDS)v39;
if( v40 != v12 )
{
do
{
if( v40 != (__int64 **)*v12 )
{
if( (TimeFields.Year & 1) != 0 )
break;
if( (TimeFields.Month & 1) != 0 )
break;
if( TimeFields.Year > (unsigned int)TimeFields.Month )
break;
if( TimeFields.Month == -1 )
break;
v41 = *(WCHAR **)&TimeFields.Minute;
if( !*(_QWORD *)&TimeFields.Minute && (TimeFields.Year || TimeFields.Month) )
break;
v42 = *(WCHAR **)&TimeFields.Minute;
v43 = (unsigned __int64)(unsigned __int16)TimeFields.Month >> 1;
v44 = 0i64;
v45 = v43;
if( v43 )
{
v46 = 0x7FFFi64;
v47 = *(_QWORD *)&TimeFields.Minute - (_QWORD)L" ";
v48 = L" ";
v49 = (unsigned __int64)(unsigned __int16)TimeFields.Month >> 1;
v50 = 0;
do
{
if( !v46 )
break;
if( !*v48 )
break;
*(const wchar_t *)((char *)v48 + v47) = *v48;
--v46;
++v48;
++v44;
--v49;
}
while( v49 );
if( !v49 && v46 && *v48 )
v50 = -2147483643;
*(_QWORD *)pcchNewDestLength = v44;
v45 = v43 - v44;
v42 = &v41[v44];
v115 = v42;
*(_QWORD *)v116 = v43 - v44;
if( v50 < 0 )
{
RtlUnicodeStringExHandleOtherFlags(v41, v43, (size_t)v41, pcchNewDestLength, &v115, v116, 0x800u);
v42 = v115;
v45 = v116[0];
LOWORD(v44) = pcchNewDestLength[0];
}
}
else
{
v50 = *(_QWORD *)&TimeFields.Minute != 0i64 ? -2147483643 : -1073741811;
}
TimeFields.Year = 2 * v44;
if( ((v50 + 0x80000000) & 0x80000000) != 0 || v50 == -2147483643 )
{
TimeFields.Year = 0;
TimeFields.Month = 2 * v45;
*(_QWORD *)&TimeFields.Minute = v42;
}
if( v50 < 0 )
break;
}
ppszDestEnd = (WCHAR **)(v40 + 5);
if( RtlUnicodeStringPrintfEx(
(_UNICODE_STRING *)&TimeFields,
(_UNICODE_STRING *)&TimeFields,
0x800ui64,
(WCHAR *)L"%wZ:%wZ:%08X") < 0 )
break;
if( v40[22] )
{
ppszDestEnd = (WCHAR **)v40[22];
if( RtlUnicodeStringPrintfEx(
(_UNICODE_STRING *)&TimeFields,
(_UNICODE_STRING *)&TimeFields,
0x800ui64,
(WCHAR *)L":%ws") < 0 )
break;
}
v40 = (__int64 **)*v40;
}
while( v40 != v12 );
v5 = v118;
LOBYTE(v11) = v110;
v6 = DeviceContexta;
}
}
LOBYTE(ConfigStatus) = v103;
v7 = DeviceNodea;
}
else
{
pszDest[0] = 0;
LOBYTE(v11) = 0;
v126[0] = 0;
v101 = 0;
}
v14 = ResultStatus;
if( (int)ResultStatus < 0 )
{
if( (_DWORD)ResultStatus == -1073740959 )
{
if( (byte_140C130BA & 0x20) != 0 )
{
v65 = ConfigStatus & 1;
v66 = (__int64 *)(v5 + 60);
if( !v5 )
v66 = PiDevCfgNullGuid;
PnpGetLogString((__int64)&v7->Parent->InstancePath);
PnpGetLogString((__int64)&v107);
PnpGetLogString(v67);
PnpGetLogString(v68);
LogString = PnpGetLogString((unsigned __int64)(v5 + 68) & -(__int64)(v5 != 0i64));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v101,
(const _EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_Blocked,
(__int64)v71,
*((const wchar_t **)v6 + 1),
v74,
(__int64)v66,
pszDest,
v126,
LogString,
v101,
v70,
v11,
v71,
v73,
v65,
97,
v72);
}
}
else if( (byte_140C130BA & 0x10) != 0 )
{
v75 = ConfigStatus & 1;
v76 = (__int64 *)(v5 + 60);
if( !v5 )
v76 = PiDevCfgNullGuid;
PnpGetLogString((__int64)&v7->Parent->InstancePath);
PnpGetLogString((__int64)&v107);
PnpGetLogString(v77);
PnpGetLogString(v78);
v79 = PnpGetLogString((unsigned __int64)(v5 + 68) & -(__int64)(v5 != 0i64));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v101,
(const _EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_Failure,
(__int64)v81,
*((const wchar_t **)v6 + 1),
v84,
(__int64)v76,
pszDest,
v126,
v79,
v101,
v80,
v11,
v81,
v83,
v75,
ResultStatus,
v82);
}
}
else if( (ConfigStatus & 0x70) != 0 )
{
if( (byte_140C130BA & 0x20) != 0 )
{
v55 = ConfigStatus & 1;
v56 = (__int64 *)(v5 + 60);
if( !v5 )
v56 = PiDevCfgNullGuid;
PnpGetLogString((__int64)&v7->Parent->InstancePath);
PnpGetLogString((__int64)&v107);
PnpGetLogString(v57);
PnpGetLogString(v58);
v59 = PnpGetLogString((unsigned __int64)(v5 + 68) & -(__int64)(v5 != 0i64));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v101,
(const _EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_RebootRequired,
(__int64)v61,
*((const wchar_t **)v6 + 1),
v64,
(__int64)v56,
pszDest,
v126,
v59,
v101,
v60,
v11,
v61,
v63,
v55,
ResultStatus,
v62);
}
}
else if( (byte_140C130BA & 8) != 0 )
{
v15 = ConfigStatus & 1;
v16 = (__int64 *)(v5 + 60);
if( !v5 )
v16 = PiDevCfgNullGuid;
PnpGetLogString((__int64)&v7->Parent->InstancePath);
PnpGetLogString((__int64)&v107);
PnpGetLogString(v17);
PnpGetLogString(v18);
v19 = PnpGetLogString((unsigned __int64)(v5 + 68) & -(__int64)(v5 != 0i64));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v101,
(const _EVENT_DESCRIPTOR *)&KMPnPEvt_DeviceConfig_Success,
(__int64)v21,
*((const wchar_t **)v6 + 1),
v24,
(__int64)v16,
pszDest,
v126,
v19,
v101,
v20,
v11,
v21,
v23,
v15,
ResultStatus,
v22);
}
if( v5 )
{
v25 = v127;
v26 = v5 + 52;
v27 = (_PI_DEVCFG_DRIVER_NODE *)*((_QWORD *)v5 + 26);
if( v27 == v5 + 52 )
goto LABEL_30;
v85 = v111;
do
{
v27 = *(_PI_DEVCFG_DRIVER_NODE **)v27;
++v85;
}
while( v27 != v26 );
if( !v85 )
{
LABEL_30:
v28 = v105.Buffer;
}
else
{
v86 = 0x7FFF;
if( (unsigned int)(1646 * v85 + 2) <= 0x7FFF )
{
v86 = 1646 * v85 + 2;
v105.MaximumLength = v86;
}
else
{
v105.MaximumLength = 0x7FFF;
}
v105.Length = 0;
v87 = (wchar_t *)ExpAllocateStringRoutine(v86);
v105.Buffer = v87;
v28 = v87;
if( !v87 )
goto LABEL_38;
memset(v87, 0i64, v86);
v105.MaximumLength = v86 - 2;
v88 = *(_PI_DEVCFG_DRIVER_NODE **)v26;
TimeFields = (_TIME_FIELDS)v105;
if( v88 != v26 )
{
v89 = v103 & 1;
do
{
v90 = v89 | 0x10;
if( !v88[97] )
v90 = v89;
HIDWORD(pcchRemaininga) = HIDWORD(v25);
LODWORD(ppszDestEnd) = ResultStatus;
PiDevCfgLogDeviceConfigured(DeviceNodea, DeviceContexta, v88, v90, (INT64)ppszDestEnd);
memset(PropertyCount, 0i64, sizeof(PropertyCount));
v91 = (PI_DEVCFG_QUERY_PROPERTY_PARAM *)*((_QWORD *)v88 + 2);
PropertyCount[0] = (UINT64)&DEVPKEY_DriverPackage_OriginalInfName;
LODWORD(PropertyCount[1]) = 18;
PropertyCount[2] = (UINT64)&v121;
PropertyCount[5] = (UINT64)DEVPKEY_DriverPackage_ExtensionId;
PropertyCount[7] = (UINT64)&Guid;
LODWORD(PropertyCount[16]) = 18;
PropertyCount[10] = (UINT64)DEVPKEY_DriverPackage_DriverFlightIds;
HIDWORD(PropertyCount[3]) = 6;
PropertyCount[12] = (UINT64)&v106;
PropertyCount[15] = (UINT64)DEVPKEY_DriverPackage_SubmissionId;
PropertyCount[17] = (UINT64)&v122;
v92 = *((_QWORD *)v88 + 8);
LODWORD(pcchRemaininga) = 4;
LODWORD(PropertyCount[6]) = 13;
LODWORD(PropertyCount[8]) = 16;
LODWORD(PropertyCount[11]) = 8210;
HIDWORD(PropertyCount[13]) = 6;
HIDWORD(PropertyCount[18]) = 6;
if( PiDevCfgQueryObjectProperties(
(WCHAR *)6,
v92,
(VOID *)8,
v91,
(UINT64)PropertyCount,
(UINT64)pcchRemaininga) >= 0 )
{
if( SLODWORD(PropertyCount[4]) < 0 && !RtlCreateUnicodeString((INT64)&v121, *((INT8 **)v88 + 6)) )
RtlInitUnicodeString(&v121, 0i64);
if( SLODWORD(PropertyCount[9]) < 0 || RtlStringFromGUIDEx(&Guid, &GuidString, 1u) < 0 )
RtlInitUnicodeString(&GuidString, 0i64);
if( SLODWORD(PropertyCount[14]) < 0 )
RtlInitUnicodeString(&v106, 0i64);
if( v106.Buffer && (v93 = v106.Length, v106.Length > 4u) )
{
v94 = 0;
if( (unsigned __int64)v106.Length >> 1 != 2 )
{
v95 = 0i64;
do
{
if( !v106.Buffer[v95] )
{
v106.Buffer[v95] = 59;
v93 = v106.Length;
}
v95 = ++v94;
}
while( v94 < ((unsigned __int64)v93 >> 1) - 2 );
v25 = v127;
}
v106.Length = v93 - 2;
}
else
{
RtlFreeAnsiString(&v106);
RtlInitUnicodeString(&v106, 0i64);
}
if( SLODWORD(PropertyCount[19]) < 0 )
RtlInitUnicodeString(&v122, 0i64);
v96 = L",";
if( v88 == *(_PI_DEVCFG_DRIVER_NODE **)v26 )
v96 = (const wchar_t *)&dword_1407CF120;
HIDWORD(ppszDestEnd) = HIDWORD(v96);
v97 = RtlUnicodeStringPrintfEx(
(_UNICODE_STRING *)&TimeFields,
(_UNICODE_STRING *)&TimeFields,
0x800ui64,
(WCHAR *)L"%ws%wZ:%wZ:%wZ:%wZ");
RtlFreeAnsiString(&GuidString);
RtlFreeAnsiString(&v106);
RtlFreeAnsiString(&v121);
RtlFreeAnsiString(&v122);
if( v97 < 0 )
break;
}
v88 = *(_PI_DEVCFG_DRIVER_NODE **)v88;
}
while( v88 != v26 );
v5 = v118;
v14 = ResultStatus;
v28 = v105.Buffer;
}
}
v29 = 0i64;
if( *((_QWORD *)DeviceContexta + 4) )
v29 = *((_QWORD *)DeviceContexta + 4);
if( *((_QWORD *)DeviceContexta + 6) && *((_WORD *)DeviceContexta + 20) > 2u )
{
v30 = *((_QWORD *)DeviceContexta + 6);
v32 = -1i64;
do
++v32;
while( *(_WORD *)(v30 + 2 * v32) );
while( *(_WORD *)(v30 + 2 * v32 + 2) )
{
v33 = -1i64;
do
++v33;
while( *(_WORD *)(v30 + 2 * v33) );
v34 = v30 + 2 * v33;
v32 = -1i64;
v30 = v34 + 2;
do
++v32;
while( *(_WORD *)(v30 + 2 * v32) );
}
}
else
{
v30 = v119;
}
v31 = DestinationString.Buffer;
if( !DestinationString.Buffer )
v31 = (wchar_t *)*((_QWORD *)v5 + 6);
PnpTraceDeviceConfig(
(__int64)&DeviceNodea->InstancePath,
v29,
v30,
*((const WCHAR **)v5 + 33),
v31,
*((const WCHAR **)v5 + 35),
pszDest,
v126,
v114.Buffer,
v28,
v101,
&UnicodeString.Length,
BYTE6(qword_140C50A2C) != 0,
(v103 & 0x70) != 0,
v25,
v14,
v120);
}
LABEL_38:
RtlFreeAnsiString(&DestinationString);
RtlFreeAnsiString(&v107);
RtlFreeAnsiString(&UnicodeString);
RtlFreeAnsiString(&v105);
RtlFreeAnsiString(&v114);
}Referenced by:
PiDevCfgLogDeviceConfigured
PiDevCfgProcessDevice