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