PiDevCfgLogDeviceConfigured
VOID __fastcall PiDevCfgLogDeviceConfigured(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5, INT64 a6, INT64 a7){
INT64 v7;
INT64 v8;
INT64 v9;
INT64 v10;
INT64 v11;
WCHAR v12;
wchar_t *Buffer;
WCHAR v14;
int v15;
int v16;
int v17;
__int64 **v18;
__int64 **v19;
CHAR v20;
__int64 *v21;
UNICODE_STRING *v22;
UNICODE_STRING *v23;
const WCHAR *v24;
const WCHAR *v25;
const WCHAR *v26;
const WCHAR *v27;
const WCHAR *v28;
const WCHAR *v29;
INT64 v30;
INT64 *v31;
INT64 *v32;
UINT8 RebootNeeded;
WCHAR *v34;
WCHAR *v35;
wchar_t *v36;
__int64 v37;
__int64 v38;
WCHAR *v39;
int v40;
__int64 *v41;
unsigned __int16 v42;
wchar_t *StringRoutine;
struct _TIME_FIELDS v44;
__int64 **v45;
WCHAR *v46;
wchar_t *v47;
unsigned __int64 v48;
size_t v49;
__int16 v50;
__int64 v51;
__int64 v52;
const wchar_t *v53;
unsigned __int64 v54;
int v55;
int v56;
unsigned __int16 Length;
unsigned int v58;
__int64 v59;
__int64 v60;
int v61;
CHAR v62;
__int64 *v63;
UNICODE_STRING *v64;
UNICODE_STRING *v65;
const WCHAR *v66;
const WCHAR *v67;
const WCHAR *v68;
const WCHAR *v69;
const WCHAR *v70;
const WCHAR *v71;
CHAR v72;
__int64 *v73;
UNICODE_STRING *v74;
UNICODE_STRING *v75;
const WCHAR *LogString;
const WCHAR *v77;
const WCHAR *v78;
const WCHAR *v79;
const WCHAR *v80;
const WCHAR *v81;
CHAR v82;
__int64 *v83;
UNICODE_STRING *v84;
UNICODE_STRING *v85;
const WCHAR *v86;
const WCHAR *v87;
const WCHAR *v88;
const WCHAR *v89;
const WCHAR *v90;
const WCHAR *v91;
int v92;
unsigned __int16 v93;
wchar_t *v94;
INT64 v95;
unsigned int v96;
INT64 v97;
INT64 v98;
INT64 v99;
WCHAR v100;
unsigned __int16 v101;
unsigned int v102;
__int64 v103;
WCHAR v104;
const wchar_t *v105;
int v106;
int v107;
wchar_t **ppszDestEnd;
size_t *pcchRemaining;
size_t *pcchRemaininga;
INT64 StatusCode;
BOOL v112;
struct _TIME_FIELDS TimeFields;
int v114;
struct _UNICODE_STRING UnicodeString;
struct _UNICODE_STRING v116;
struct _UNICODE_STRING v117;
UNICODE_STRING v118;
INT64 v119;
struct _UNICODE_STRING DestinationString;
int v121;
int v122;
INT64 v123;
struct _UNICODE_STRING GuidString;
struct _UNICODE_STRING SetupMode;
wchar_t *v126;
size_t v127;
size_t pcchNewDestLength;
INT64 v129;
PWCHAR ClassGuid;
INT64 v131;
UNICODE_STRING v132;
struct _UNICODE_STRING v133;
_GUID Guid;
INT64 result;
int v136;
struct _UNICODE_STRING *p_DestinationString;
int v138;
int v139;
__int64 *v140;
int v141;
void *p_UnicodeString;
int v143;
int v144;
int v145;
__int64 *v146;
int v147;
struct _UNICODE_STRING *p_SetupMode;
int v149;
int v150;
__int64 *v151;
int v152;
struct _UNICODE_STRING *v153;
int v154;
int v155;
wchar_t pszDest[12];
wchar_t v157[24];
v131 = a7;
v114 = a4;
v129 = a3;
v119 = a2;
v7 = a3;
v123 = a1;
v8 = a2;
*(_QWORD *)&DestinationString.Length = 0i64;
v9 = a1;
DestinationString.Buffer = 0i64;
*(_QWORD *)&UnicodeString.Length = 0i64;
UnicodeString.Buffer = 0i64;
*(_QWORD *)&SetupMode.Length = 0i64;
SetupMode.Buffer = 0i64;
v112 = 1;
ClassGuid = 0i64;
*(_QWORD *)&v118.Length = 0i64;
v118.Buffer = 0i64;
*(_QWORD *)&GuidString.Length = 0i64;
GuidString.Buffer = 0i64;
v122 = 0;
*(_QWORD *)&v116.Length = 0i64;
v116.Buffer = 0i64;
TimeFields = 0i64;
v132 = 0i64;
Guid = 0i64;
v117 = 0i64;
v133 = 0i64;
if( (byte_140C130BA & 0x18) != 24 )
goto LABEL_38;
if( a3 )
{
memset((INT64)&result, 0i64);
v10 = *(_QWORD *)(v7 + 16);
v11 = *(_QWORD *)(v7 + 64);
result = (INT64)&DEVPKEY_DriverPackage_OriginalInfName;
LODWORD(pcchRemaining) = 3;
p_DestinationString = &DestinationString;
v140 = DEVPKEY_DriverPackage_DriverFlightIds;
p_UnicodeString = &UnicodeString;
v146 = DEVPKEY_DriverPackage_SubmissionId;
p_SetupMode = &SetupMode;
v136 = 18;
v138 = 6;
v141 = 8210;
v144 = 6;
v147 = 18;
v149 = 6;
if( (int)PiDevCfgQueryObjectProperties(18i64, v11, 8ui64, v10, (INT64)&result, (UINT64)pcchRemaining) < 0 )
goto LABEL_38;
if( v139 < 0 )
RtlInitUnicodeString(&DestinationString, 0i64, v12);
if( v145 < 0 )
RtlInitUnicodeString(&UnicodeString, 0i64, v12);
Buffer = UnicodeString.Buffer;
if( UnicodeString.Buffer && (Length = UnicodeString.Length, UnicodeString.Length > 4u) )
{
v58 = 0;
if( (unsigned __int64)UnicodeString.Length >> 1 != 2 )
{
v59 = 0i64;
do
{
if( !Buffer[v59] )
{
Buffer[v59] = 59;
Buffer = UnicodeString.Buffer;
Length = UnicodeString.Length;
}
v59 = ++v58;
}
while( v58 < ((unsigned __int64)Length >> 1) - 2 );
v8 = v119;
}
UnicodeString.Length = Length - 2;
}
else
{
RtlFreeAnsiString(&UnicodeString);
RtlInitUnicodeString(&UnicodeString, 0i64, v14);
}
if( v150 < 0 )
RtlInitUnicodeString(&SetupMode, 0i64, (WCHAR)Buffer);
if( DestinationString.Buffer )
v112 = RtlEqualUnicodeString((UNICODE_STRING *)(v7 + 40), &DestinationString, 1u) != 0;
RtlTimeToTimeFields((PLARGE_INTEGER)(v7 + 112), &TimeFields);
RtlStringCchPrintfW(pszDest, 0xBui64, (WCHAR *)L"%02d/%02d/%04d");
if( v15 < 0 )
pszDest[0] = 0;
RtlStringCchPrintfW(v157, 0x18ui64, (WCHAR *)L"%u.%u.%u.%u");
if( v16 < 0 )
v157[0] = 0;
v17 = *(_DWORD *)(v7 + 108);
v18 = (__int64 **)(v7 + 224);
v19 = *(__int64 ***)(v7 + 224);
if( v17 == -1 )
v17 = 0;
v121 = v17;
if( v19 != v18 )
{
v40 = 0;
do
{
v41 = v19[22];
v40 += *((unsigned __int16 *)v19 + 20) + *((unsigned __int16 *)v19 + 36) + 22;
if( v41 )
{
v60 = -1i64;
do
++v60;
while( *((_WORD *)v41 + v60) );
v40 += 2 * v60 + 2;
}
v19 = (__int64 **)*v19;
}
while( v19 != v18 );
v42 = v40 + 2;
if( (unsigned int)(v40 + 2) > 0xFFFE )
v42 = -2;
v118.MaximumLength = v42;
StringRoutine = (wchar_t *)ExpAllocateStringRoutine(v42);
v118.Buffer = StringRoutine;
if( !StringRoutine )
goto LABEL_38;
v44 = (struct _TIME_FIELDS)v118;
*StringRoutine = 0;
v45 = (__int64 **)*v18;
TimeFields = v44;
if( v45 != v18 )
{
do
{
if( v45 != (__int64 **)*v18 )
{
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;
v46 = *(WCHAR **)&TimeFields.Minute;
if( !*(_QWORD *)&TimeFields.Minute && (TimeFields.Year || TimeFields.Month) )
break;
v47 = *(wchar_t **)&TimeFields.Minute;
v48 = (unsigned __int64)(unsigned __int16)TimeFields.Month >> 1;
v49 = 0i64;
v50 = v48;
if( v48 )
{
v51 = 0x7FFFi64;
v52 = *(_QWORD *)&TimeFields.Minute - (_QWORD)L" ";
v53 = L" ";
v54 = (unsigned __int64)(unsigned __int16)TimeFields.Month >> 1;
v55 = 0;
do
{
if( !v51 )
break;
if( !*v53 )
break;
*(const wchar_t *)((char *)v53 + v52) = *v53;
--v51;
++v53;
++v49;
--v54;
}
while( v54 );
if( !v54 && v51 && *v53 )
v55 = -2147483643;
pcchNewDestLength = v49;
v50 = v48 - v49;
v47 = &v46[v49];
v126 = v47;
v127 = v48 - v49;
if( v55 < 0 )
{
RtlUnicodeStringExHandleOtherFlags(v46, v48, (size_t)v46, &pcchNewDestLength, &v126, &v127, 0x800u);
v47 = v126;
v50 = v127;
LOWORD(v49) = pcchNewDestLength;
}
}
else
{
v55 = *(_QWORD *)&TimeFields.Minute != 0i64 ? -2147483643 : -1073741811;
}
TimeFields.Year = 2 * v49;
if( ((v55 + 0x80000000) & 0x80000000) != 0 || v55 == -2147483643 )
{
TimeFields.Year = 0;
TimeFields.Month = 2 * v50;
*(_QWORD *)&TimeFields.Minute = v47;
}
if( v55 < 0 )
break;
}
ppszDestEnd = (wchar_t **)(v45 + 5);
RtlUnicodeStringPrintfEx(
(_UNICODE_STRING *)&TimeFields,
(_UNICODE_STRING *)&TimeFields,
0x800ui64,
L"%wZ:%wZ:%08X");
if( v56 < 0 )
break;
if( v45[22] )
{
ppszDestEnd = (wchar_t **)v45[22];
RtlUnicodeStringPrintfEx((_UNICODE_STRING *)&TimeFields, (_UNICODE_STRING *)&TimeFields, 0x800ui64, L":%ws");
if( v61 < 0 )
break;
}
v45 = (__int64 **)*v45;
}
while( v45 != v18 );
v7 = v129;
LOBYTE(v17) = v121;
v8 = v119;
}
}
LOBYTE(a4) = v114;
v9 = v123;
}
else
{
pszDest[0] = 0;
LOBYTE(v17) = 0;
v157[0] = 0;
v112 = 0;
}
if( (int)a5 < 0 )
{
if( (_DWORD)a5 == -1073740959 )
{
if( (byte_140C130BA & 0x20) != 0 )
{
v72 = a4 & 1;
v73 = (__int64 *)(v7 + 240);
if( !v7 )
v73 = PiDevCfgNullGuid;
PnpGetLogString((UNICODE_STRING *)(*(_QWORD *)(v9 + 16) + 40i64));
PnpGetLogString(&v118);
PnpGetLogString(v74);
PnpGetLogString(v75);
LogString = PnpGetLogString((UNICODE_STRING *)((v7 + 272) & -(__int64)(v7 != 0)));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v112,
(const EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_Blocked,
(INT64)v78,
*(const WCHAR **)(v8 + 8),
v81,
(INT64)v73,
pszDest,
v157,
LogString,
v112,
v77,
v17,
v78,
v80,
v72,
97,
v79);
}
}
else if( (byte_140C130BA & 0x10) != 0 )
{
v82 = a4 & 1;
v83 = (__int64 *)(v7 + 240);
if( !v7 )
v83 = PiDevCfgNullGuid;
PnpGetLogString((UNICODE_STRING *)(*(_QWORD *)(v9 + 16) + 40i64));
PnpGetLogString(&v118);
PnpGetLogString(v84);
PnpGetLogString(v85);
v86 = PnpGetLogString((UNICODE_STRING *)((v7 + 272) & -(__int64)(v7 != 0)));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v112,
(const EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_Failure,
(INT64)v88,
*(const WCHAR **)(v8 + 8),
v91,
(INT64)v83,
pszDest,
v157,
v86,
v112,
v87,
v17,
v88,
v90,
v82,
a5,
v89);
}
}
else if( (a4 & 0x70) != 0 )
{
if( (byte_140C130BA & 0x20) != 0 )
{
v62 = a4 & 1;
v63 = (__int64 *)(v7 + 240);
if( !v7 )
v63 = PiDevCfgNullGuid;
PnpGetLogString((UNICODE_STRING *)(*(_QWORD *)(v9 + 16) + 40i64));
PnpGetLogString(&v118);
PnpGetLogString(v64);
PnpGetLogString(v65);
v66 = PnpGetLogString((UNICODE_STRING *)((v7 + 272) & -(__int64)(v7 != 0)));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v112,
(const EVENT_DESCRIPTOR *)KMPnPEvt_DeviceConfig_RebootRequired,
(INT64)v68,
*(const WCHAR **)(v8 + 8),
v71,
(INT64)v63,
pszDest,
v157,
v66,
v112,
v67,
v17,
v68,
v70,
v62,
a5,
v69);
}
}
else if( (byte_140C130BA & 8) != 0 )
{
v20 = a4 & 1;
v21 = (__int64 *)(v7 + 240);
if( !v7 )
v21 = PiDevCfgNullGuid;
PnpGetLogString((UNICODE_STRING *)(*(_QWORD *)(v9 + 16) + 40i64));
PnpGetLogString(&v118);
PnpGetLogString(v22);
PnpGetLogString(v23);
v24 = PnpGetLogString((UNICODE_STRING *)((v7 + 272) & -(__int64)(v7 != 0)));
McTemplateK0zzjzzztzdzztdz_EtwWriteTransfer(
v112,
&KMPnPEvt_DeviceConfig_Success,
(INT64)v26,
*(const WCHAR **)(v8 + 8),
v29,
(INT64)v21,
pszDest,
v157,
v24,
v112,
v25,
v17,
v26,
v28,
v20,
a5,
v27);
}
if( v7 )
{
v30 = a6;
v31 = (INT64 *)(v7 + 208);
v32 = *(INT64 **)(v7 + 208);
if( v32 == (INT64 *)(v7 + 208) )
goto LABEL_30;
v92 = v122;
do
{
v32 = (INT64 *)*v32;
++v92;
}
while( v32 != v31 );
if( !v92 )
{
LABEL_30:
RebootNeeded = (UINT8)v116.Buffer;
}
else
{
v93 = 0x7FFF;
if( (unsigned int)(1646 * v92 + 2) <= 0x7FFF )
{
v93 = 1646 * v92 + 2;
v116.MaximumLength = v93;
}
else
{
v116.MaximumLength = 0x7FFF;
}
v116.Length = 0;
v94 = (wchar_t *)ExpAllocateStringRoutine(v93);
v116.Buffer = v94;
RebootNeeded = (unsigned __int8)v94;
if( !v94 )
goto LABEL_38;
memset((INT64)v94, 0i64);
v116.MaximumLength = v93 - 2;
v95 = *v31;
TimeFields = (struct _TIME_FIELDS)v116;
if( (INT64 *)v95 != v31 )
{
v96 = v114 & 1;
do
{
v97 = v96 | 0x10;
if( !*(_DWORD *)(v95 + 388) )
v97 = v96;
LODWORD(ppszDestEnd) = a5;
PiDevCfgLogDeviceConfigured(v123, v119, v95, v97, (INT64)ppszDestEnd, v30, v131);
memset((INT64)&result, 0i64);
v98 = *(_QWORD *)(v95 + 16);
result = (INT64)&DEVPKEY_DriverPackage_OriginalInfName;
v136 = 18;
p_DestinationString = &v132;
v140 = DEVPKEY_DriverPackage_ExtensionId;
p_UnicodeString = &Guid;
v152 = 18;
v146 = DEVPKEY_DriverPackage_DriverFlightIds;
v138 = 6;
p_SetupMode = &v117;
v151 = DEVPKEY_DriverPackage_SubmissionId;
v153 = &v133;
v99 = *(_QWORD *)(v95 + 64);
LODWORD(pcchRemaininga) = 4;
v141 = 13;
v143 = 16;
v147 = 8210;
v149 = 6;
v154 = 6;
if( (int)PiDevCfgQueryObjectProperties(6i64, v99, 8ui64, v98, (INT64)&result, (UINT64)pcchRemaininga) >= 0 )
{
if( v139 < 0 && !RtlCreateUnicodeString(&v132, *(PWCHAR *)(v95 + 48)) )
RtlInitUnicodeString(&v132, 0i64, v100);
if( v145 < 0 || (int)RtlStringFromGUIDEx(&Guid, &GuidString, 1u) < 0 )
RtlInitUnicodeString(&GuidString, 0i64, v100);
if( v150 < 0 )
RtlInitUnicodeString(&v117, 0i64, v100);
if( v117.Buffer && (v101 = v117.Length, v117.Length > 4u) )
{
v102 = 0;
if( (unsigned __int64)v117.Length >> 1 != 2 )
{
v103 = 0i64;
do
{
if( !v117.Buffer[v103] )
{
v117.Buffer[v103] = 59;
v101 = v117.Length;
}
v103 = ++v102;
}
while( v102 < ((unsigned __int64)v101 >> 1) - 2 );
v30 = a6;
}
v117.Length = v101 - 2;
}
else
{
RtlFreeAnsiString(&v117);
RtlInitUnicodeString(&v117, 0i64, v104);
}
if( v155 < 0 )
RtlInitUnicodeString(&v133, 0i64, v102);
v105 = L",";
if( v95 == *v31 )
v105 = &word_1407CF120;
HIDWORD(ppszDestEnd) = HIDWORD(v105);
RtlUnicodeStringPrintfEx(
(_UNICODE_STRING *)&TimeFields,
(_UNICODE_STRING *)&TimeFields,
0x800ui64,
L"%ws%wZ:%wZ:%wZ:%wZ");
v107 = v106;
RtlFreeAnsiString(&GuidString);
RtlFreeAnsiString(&v117);
RtlFreeAnsiString(&v132);
RtlFreeAnsiString(&v133);
if( v107 < 0 )
break;
}
v95 = *(_QWORD *)v95;
}
while( (INT64 *)v95 != v31 );
v7 = v129;
RebootNeeded = (UINT8)v116.Buffer;
}
}
v34 = 0i64;
if( *(_QWORD *)(v119 + 32) )
v34 = *(WCHAR **)(v119 + 32);
if( *(_QWORD *)(v119 + 48) && *(_WORD *)(v119 + 40) > 2u )
{
v35 = *(WCHAR **)(v119 + 48);
v37 = -1i64;
do
++v37;
while( v35[v37] );
while( v35[v37 + 1] )
{
v38 = -1i64;
do
++v38;
while( v35[v38] );
v39 = &v35[v38];
v37 = -1i64;
v35 = v39 + 1;
do
++v37;
while( v35[v37] );
}
}
else
{
v35 = ClassGuid;
}
v36 = DestinationString.Buffer;
if( !DestinationString.Buffer )
v36 = *(wchar_t **)(v7 + 48);
LOBYTE(StatusCode) = v112;
PnpTraceDeviceConfig(
(PWCHAR)(v123 + 40),
v34,
v35,
*(PWCHAR *)(v7 + 264),
v36,
*(PWCHAR *)(v7 + 280),
pszDest,
(UINT8)v157,
(UINT8)SetupMode.Buffer,
RebootNeeded,
StatusCode);
}
LABEL_38:
RtlFreeAnsiString(&DestinationString);
RtlFreeAnsiString(&v118);
RtlFreeAnsiString(&UnicodeString);
RtlFreeAnsiString(&v116);
RtlFreeAnsiString(&SetupMode);
}Referenced by:
PiDevCfgLogDeviceConfigured
PiDevCfgProcessDevice