天天看點

CCSIExternalTransformerExecutor 初始化

CCSIExternalTransformerExecutor 初始化

pGetSystemStore可以傳回CCSIExternalTransformerExecutor 對象。

pGetSystemStore(0, IID_ICSIExternalTransformerExecutor, &ppIStore);

ppIStore->QueryInterface(IID_IReferenceIdentity,&ppObj);

CCSIExternalTransformerExecutor *ets = (CCSIExternalTransformerExecutor*)(ppIStore - 2);

CComObjectBase *vf1 =(CComObjectBase *) ets->vft1;

ICSIExternalTransformerExecutor *vf2 = (ICSIExternalTransformerExecutor *)ets->vft2;

CSystemIsolationLayer *sil = (CSystemIsolationLayer *)&ets->sil;

vf2->Initialize(0, { 6 }, L"C:\\CSITEST\\system_volume\\Windows", L"HKCU\\CSITEST",0);

(Flags = {0}, ReferenceVersion = {1},ReferenceImage= {2}, FileStorage={3}, RegStorage={4})

//----- (100CABF0)--------------------------------------------------------

__int32 __stdcallWCP::COM::CCSIExternalTransformerExecutor::Initialize(

WCP::COM::CCSIExternalTransformerExecutor *this,

unsigned __int32 a2,     标志

unsigned __int64 a3,     版本

const unsigned__int16 *a4,   pszTargetWindowsDirectoryPath

const unsigned__int16 *a5,   pszRegistryRoot 不能确定

const unsigned__int16 *a6)   不确定

{

  v6 =(int)a5;

  v51 =this;

  v52 =&a2;

  v53 =(int *)a5;

  v54 =a4;

  v55 =a6;

  v56 =a4;

  v57 =a5;

  v65 =-2147023537;

  v77 =a3;

  v66 =(__int64 *)&v77;

  if ( !*((_DWORD *)this +2) )  // m_TargetSystem.IsValid()

  {

// 出錯

  }

  v9 =(HKEY *)((char *)this +16);

  if (*((_DWORD*)this+ 4) )  // m_Impl.IsValid()

  {

出錯

  }

  if (!AutoPimplPtr<WCP::COM::CCSIExternalTransformerExecutor::Impl>::Allocate((WCP::COM::CCSIExternalTransformerExecutor::Impl**)this+ 4) ) // m_Impl.Allocate()

  {

  }

  v10 =*v9;

  *((_DWORD *)this +3) = a2;

  *((_QWORD *)v10 + 14) = v77;

  v11 =RtlGetSystem(0,0, (int*)*v9 +24);

  Auto<_OFFLINE_STORE_CREATION_PARAMETERS>::Initialize((int)&v78);

  v56 =0;

  v57 =(_WORD *)v6;

  v66 =0;

  v12 =0;

  v13 =AutoNullTerminatedString<COM::CLPWSTRTraits,Auto<unsigned short *>>::Assign<unsignedshort const *>(

          (unsigned__int16 ***)&v66,

          (signedint *)&v55);

  v14 =a2;

  if (!(a2& 8) )

  {

    v12 =1;

    v56 =(const unsigned __int16 *)1;

    v57 =(_WORD *)(a2 &8 &(unsigned __int8)v57);

  }

  v6 =4;

  if (!(a2& 0x20) )

  {

    if (a2 & 8)

    {

      v58 =(const char *)v53;

      v59 =(const char *)L"Rollback";

      v67 =0;

      v68 =0;

      v69 =(char *)-1;

      if (a2 & 4)

        v15 =COM::Concat(v53, (int*)L"\\", (int*)L"Rollback", (void**)&v68);

      else

        v15 =HiveInfo::Create((HiveInfo *)&v67, (conststruct HiveDetails *)&v58);

// GetLoadedHiveKeyName( hive.FilePath,pszHiveMountLocation,(sizeof(pszHiveMountLocation)/sizeof((pszHiveMountLocation)[0])))

      v17 = GetLoadedHiveKeyName((wchar_t*)&v97, v68, (constunsigned __int16 *)0x104, v49, v50);

      v15 =WCP::COM::CRegistryKey::LoadKey(

              (WCP::COM::CRegistryKey*)(*v9 +30),

              *v9,

              (constunsigned __int16 *)&v97,

              (constunsigned __int16 *)v68,

              (unsignedint)*v9);

      v15 =COM::Concat((int *)L"HKEY_LOCAL_MACHINE", &g_RGWCH__bslash_, (int *)&v97,(void **)&v66);

      v16 =(HiveInfo *)&v67;

      HiveInfo::~HiveInfo((HiveInfo*)&v67);

      v14 =a2;

    }

    else

    {

      v56 =(const unsigned __int16 *)(v12 | 4);

      AutoPointerBase<unsigned short *,Auto<unsignedshort *>>::Close(&v66);

      v14 =a2;

    }

  }

  if (*((_QWORD*)*v9 +14) )

  {

    v74 =0;

    v75 =0;

    v76 =0;

    if (*((_BYTE*)v51+ 12) & 0x40 )

    {

      v71 =80;

      v72 =82;

      v73 =L"\\Registry\\Machine\\$OFFLINE_RW$COMPONENTS";

      v58 =(const char *)80;

      v59 =(const char *)82;

      v60 =L"\\Registry\\Machine\\$OFFLINE_RW$COMPONENTS";

      v6 =(int)&v61;

      goto LABEL_53;

    }

    v18 =RtlInitLUnicodeStringFromNullTerminatedString(v54,(int)&v71);

    v19 =v71;

    if (v71 >= 2)

    {

      do

      {

        if ( v73[(v19 >> 1) - 1] != 92 )

          break;

        v19 -=2;

      }

      while ( v19 >=2 );

      v71 =v19;

    }

    v67 =0;

    v68 =0;

    v69 =0;

    v58 =(const char *)54;

    v59 =(const char *)56;

    v60 =L"\\System32\\config\\COMPONENTS";

    v20 =StringUtil::ConcatenateStrings<_LUNICODE_STRING,_LUNICODE_STRING>(

            (int)&v71,

            (int)&v58,

            (int)&v67);

    if (v20 < 0

      ||(v20 =StringUtil::EnsureNullTerminated<Auto<_LUNICODE_STRING>>((unsignedint *)&v67),

          v20 <0) )

    {

      v65 =ConvertNtStatusToHResult(v20);

    }

    else

    {

      v97 =0;

      memset(&Dst, 0,0x206u);

GetLoadedHiveKeyName( ComponentsHiveWin32Path.Buffer,HiveMountKey, (sizeof(HiveMountKey)/sizeof((HiveMountKey)[0])))

      v21 = GetLoadedHiveKeyName((wchar_t*)&v97, v69, (constunsigned __int16 *)0x104, v49, v50);

      v71 =0;

      v72 =0;

      v73 =0;

      v58 =v67;

      v59 =v68;

      v60 =(const wchar_t *)v69;

      v6 =(int)&v61;

      v22 =RtlConvertWin32FilePathToNtFilePath((int)&v58,(const char **)&v71);

      if (v22 >= 0)

      {

        v22 =RtlInitLUnicodeStringFromNullTerminatedString(&v97, (int)&v58);

        if ( v22 >= 0 )

        {

          v22 =StringUtil::ConcatenateStrings<_LUNICODE_STRING,_LUNICODE_STRING>(

                  (int)g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_,

                  (int)&v58,

                  (int)&v74);

          if ( v22 >=0 )

          {

            v23 = (AutoHive *)(*v9 +43);

            v58 = v74;

            v59 = v75;

            v60 = v76;

            v6 = (int)&v61;

            v22 = AutoHive::Load(

                    v23,

                    0,

                    (const struct _LUNICODE_STRING *)&v58,

                    (const struct _LUNICODE_STRING *)&v71,

                    0);

            if ( v22 >=0 )

            {

              AutoPODBase<_LUNICODE_STRING,Auto<_LUNICODE_STRING>>::Close((int)&v71);

              AutoPODBase<_LUNICODE_STRING,Auto<_LUNICODE_STRING>>::Close((int)&v67);

LABEL_53:

              v55 =0;

              v24 = RtlGetSystem(0, 0, (int *)&v55);

              if ( v24 >=0 )

              {

                v81 = &v91;

                *(_DWORD *)&v91 =g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_[0];

                v88 = 16;

                v89 = 16;

                v92 =g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_[1];

                v90 = (int*)&v81;

                v82 = 1;

                v93 =g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_[2];

                v6 = (int)&v97;

                v58 = (constchar *)v55;

                v59 = 0;

                v60 = 0;

                v62 = 1;

                v61 = &v87;

                v63 = 0;

                v64 = 0;

                v83 = 0;

                v84 = 0;

                v87 = 1;

                v94 = v58;

                v95 = v59;

                v96 = v60;

                v25 = (int*)(*v9 +49);

                v24 =RtlGetSystem(0,&v58, v25);

                if ( v24 >=0 )

                {

                  ::Close(&v55);

                  ::Close((int)&v74);

                  v14 = a2;

                  v6 = 4;

                  goto LABEL_57;

                }

              }

              v65 = ConvertNtStatusToHResult(v24);

              ::Close(&v55);

LABEL_33:

              ::Close((int)&v74);

              goto LABEL_68;

            }

          }

        }

      }

      v65 =ConvertNtStatusToHResult(v22);

      ::Close((int)&v71);

    }

    ::Close((int)&v67);

    goto LABEL_33;

  }

LABEL_57:

  v26 =(int)v56;

  if (v14 & 4)

    v26 =(unsigned int)v56 | 0x10;

  v13 =(unsigned __int16 **)CreateNewPseudoWindows(v26,v57, v66, (int)&v78);

  if (a2 & 2)

    v6 =v79;

  v27 =(int)v51;

  v51 =0;

  v80 =*(_DWORD*)(v27+ 4);

  v6 |=0x10u;

  v28 =*v9;

  v79 =v6;

  v48 =v28 + 1;

  v13 =(unsigned __int16 **)(a2 & 4 ?

    OpenExistingOfflineStore(

      0,

      (int)&v78,

      (int)&_GUID_a817521b_2b43_489f_8b84_67aceeab24a8,

      v48,

      &v51) :

    CreateNewOfflineStore(

      0,

      (int)&v78,

      (int)&_GUID_a817521b_2b43_489f_8b84_67aceeab24a8,

      v48,

      &v51));

  v29 =*v9;

  v70 =0;

  v30 =(_DWORD **)*((_DWORD *)v29 + 1);

  v31 =*v30;

  v32 =((int (__stdcall*)(_DWORD**, GUID *,int *))*v31)(v30, &_GUID_fe25822e_baa8_419a_b9e0_f194a3722a2b,&v70);

  if (v32 < 0)

  {

    v33 =v70;

    v65 =v32;

    if (v70 )

    {

      v70 =0;

      v34 =v33;

      v35 =*(void(__stdcall **)(int))(*(_DWORD *)v33 + 8);

      v35(v34);

    }

    goto LABEL_68;

  }

  v38 =*v9;

  v39 =v70;

  v40 =*(int(__stdcall **)(int))(*(_DWORD *)v70 + 12);

  *((_DWORD *)v38 + 2) = v40(v39);

  *(_DWORD *)*v9 = 1;

  v41 =v70;

  v65 =0;

  v86 =1;

  if (v70 )

  {

    v70 =0;

    v42 =v41;

    v43 =*(void(__stdcall **)(int))(*(_DWORD *)v41 + 8);

    v43(v42);

  }

 ::Close(&v66);

  Auto<_OFFLINE_STORE_CREATION_PARAMETERS>::~Auto<_OFFLINE_STORE_CREATION_PARAMETERS>(&v78);

  CEnterExitTracer<CSimpleHResultCarryingFrame,5>::~CEnterExitTracer<CSimpleHResultCarryingFrame,5>(

    (int)&v85,

    (int)v38);

  return 0;

}

// 100037B8: using guessed type wchar_tasc_100037B8[2];

// 10009854: using guessed type intg_RGWCH__bslash_;

// 100098B8: using guessed type intg_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_[2];

// 100098C4: using guessed type wchar_tg_RGWCH_Rollback[9];

// 100098E4: using guessed type wchar_t g_RGWCH_HKEY_under_LOCAL_under_MACHINE[19];

// 10009D08: using guessed type intg_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_[2];

// 1000B6A0: using guessed type wchar_taRegistryMach_2[41];

// 1000B6F4: using guessed type wchar_t aSystem32Config[28];

// 100C1462: using guessed type int __thiscallAutoPointerBase<unsigned short *,Auto<unsigned short*>>::Close(_DWORD);

// 100C576B: using guessed type __int32 __thiscallAutoHive::Load(AutoHive *__hidden this, unsigned __int32, const struct_LUNICODE_STRING *, const struct _LUNICODE_STRING *, unsigned __int32 *);

// 100CA336: using guessed type __int32 __thiscallHiveInfo::Create(HiveInfo *__hidden this, const struct HiveDetails *);

// 101EF631: using guessed type __int32 __thiscallWCP::COM::CRegistryKey::LoadKey(WCP::COM::CRegistryKey *__hidden this, HKEY,const unsigned __int16 *, const unsigned __int16 *, bool);

//----- (000000018004AE80)----------------------------------------------------

__int64 __fastcallWindows::WCP::COM::CCSIExternalTransformerExecutor::Initialize(Windows::WCP::COM::CCSIExternalTransformerExecutor*this, int a2, __int64 a3, const unsigned __int16*a4, const unsigned __int16 *a5, constunsigned __int16 *a6)

{

  v107 =(unsigned __int64)&v57^ _security_cookie;

  v6 =this;

  *(_DWORD *)&v71= a2;

  v82 =a3;

  v7 =a4;

  v69 =a4;

  v62 =a5;

  v63 =a6;

  v61 =&v82;

  v75 =&v71;

  v70 =-2147023537;

 Windows::WCP::Rtl::MakeArmedEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,Windows::WCP::Rtl::FormattingAsHexadecimalOnlyImpl<unsigned long *> const *,_FOUR_PART_VERSION*,unsigned short const*,unsigned short const*,unsigned short const*>(

    (__int64)&v96,

    (structWindows::WCP::Rtl::_RTL_TRACING_FACILITY *)&v70,

    (__int64)this -16,

    (__int64)a4,

    (int)v58,

    v59,

    v60,

    (__int64*)&v75,

    (__int64*)&v61,

    (__int64*)&v69,

    (__int64*)&v62,

    (__int64*)&v63);

  if (!*((_QWORD*)v6+ 2) )

  {

    v8 =315;

    v9 ="m_TargetSystem.IsValid()";

LABEL_3:

    v70 =ConvertNtStatusToHResult(-1073740758);

LABEL_46:

    Windows::WCP::Rtl::CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>::~CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>((__int64)&v96);

    LODWORD(v65) = v8;

    *(_QWORD *)&v64= "base\\wcp\\componentstore\\com\\externaltransformerexecutor.cpp";

    v66 =v9;

    *((_QWORD*)&v64 + 1) ="Windows::WCP::COM::CCSIExternalTransformerExecutor::Initialize";

   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::ReportErrorOrigination(

      &v70,

      (Windows::ErrorHandling::COM*)&v64);

    return (unsigned int)v70;

  }

  v10 =(signed __int64)v6 + 32;

  if (*((_QWORD*)v6+ 4) )

  {

    v8 =316;

    v9 ="!m_Impl.IsValid()";

    goto LABEL_3;

  }

  if (!Windows::AutoPimplPtr<Windows::WCP::COM::CCSIExternalTransformerExecutor::Impl>::Allocate((__int64)v6 + 32) )

  {

    v8 =318;

    v70 =-2147024882;

    v9 ="m_Impl.Allocate()";

    goto LABEL_46;

  }

  v11 =*(_QWORD*)v10;

  *((_DWORD *)v6 + 6) = *(_DWORD *)&v71;

  *(_QWORD *)(v11 + 208) = v82;

  v12 =RtlGetSystem(0,0i64, (__int64 *)(*(_QWORD *)v10 + 176i64));

  if (v12 < 0)

  {

    v70 =ConvertNtStatusToHResult(v12);

LABEL_73:

    Windows::WCP::Rtl::CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>::~CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>((__int64)&v96);

   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CVoidRaiseFrame>::ReportErrorPropagation(&v70);

    return (unsigned int)v70;

  }

  v90 =-1;

  v83 =112i64;

  _mm_store_si128((__m128i*)&v85, 0i64);

  _mm_store_si128((__m128i*)&v86, 0i64);

  _mm_store_si128((__m128i*)&v87, 0i64);

  v13 =0i64;

  _mm_store_si128((__m128i*)&v88, 0i64);

  _mm_store_si128((__m128i*)&v89, 0i64);

  v84 =0;

  v91 =0i64;

  v62 =0i64;

  v14 =Windows::AutoNullTerminatedString<Windows::COM::CLPWSTRTraits,Windows::Auto<unsigned short *>>::Assign<unsignedshort const *>(

          (Windows::COM**)&v62,

          &v63);

  if ((v14 &0x80000000) != 0 )

    goto LABEL_11;

  v16 =v71;

  if (!(v71& 8) )

    v13 =(_DWORD *)1;

  if (!(v71& 0x20) )

  {

    if (v71 & 8)

    {

      v74 =-1;

      *(_QWORD *)&v64= a5;

      *((_QWORD *)&v64+ 1) = L"Rollback";

      _mm_storeu_si128((__m128i *)&v72,0i64);

      if (v16 & 4)

        v17 =Windows::COM::Concat((void *)a5, L"\\", L"Rollback",(void **)&v73);

      else

        v17 =HiveInfo::Create((HiveInfo *)&v72, (conststruct HiveDetails *)&v64);

      if (v17 < 0)

        goto LABEL_19;

      v20 =GetLoadedHiveKeyName(v73, (unsigned __int16 *)&v106, 0x104ui64);

      if (v20 < 0)

      {

        v70 =v20;

        v8 =364;

        v9 ="GetLoadedHiveKeyName( hive.FilePath,pszHiveMountLocation, (sizeof(pszHiveMountLocation)/sizeof((pszHiveMou"

             "ntLocation)[0])))";

        HiveInfo::~HiveInfo((HiveInfo*)&v72, v21);

LABEL_45:

        Windows::AutoPointerBase<unsigned short const *,Windows::Auto<unsignedshort const *>>::Close(

          (Windows::COM**)&v62,

          v22);

        Windows::AutoPODBase<_OFFLINE_STORE_CREATION_PARAMETERS,Windows::Auto<_OFFLINE_STORE_CREATION_PARAMETERS>>::Close(

          (__int64)&v83,

          v30);

        goto LABEL_46;

      }

      v17 =Windows::WCP::COM::CRegistryKey::LoadKey(

              (PHKEY)(*(_QWORD *)v10 +216i64),

              v21,

              (constunsigned __int16 *)&v106,

              v73,

              (bool)v58);

      if (v17 < 0)

      {

LABEL_19:

        v19 =(HiveInfo *)&v72;

LABEL_20:

        v70 =v17;

        HiveInfo::~HiveInfo(v19,v18);

        goto LABEL_72;

      }

      v17 =Windows::COM::Concat(L"HKEY_LOCAL_MACHINE", &g_RGWCH__bslash_,&v106, (void**)&v62);

      v19 =(HiveInfo *)&v72;

      if (v17 < 0)

        goto LABEL_20;

      HiveInfo::~HiveInfo((HiveInfo*)&v72, v18);

    }

    else

    {

      v13 =(_DWORD *)((unsigned int)v13 | 4);

      Windows::AutoPointerBase<unsigned short const *,Windows::Auto<unsignedshort const *>>::Close(

        (Windows::COM**)&v62,

        (constvoid *)4);

    }

    v16 =v71;

  }

  if (*(_QWORD*)(*(_QWORD *)v10 + 208i64) )

  {

    v23 =(*((_BYTE *)v6 + 24) & 0x40) == 0;

    v72 =0i64;

    v73 =0i64;

    *(_QWORD *)&v74= 0i64;

    if (!v23 )

    {

      v79 =80i64;

      v81 =L"\\Registry\\Machine\\$OFFLINE_RW$COMPONENTS";

      v24 =L"\\Registry\\Machine\\$OFFLINE_RW$COMPONENTS";

      v80 =82i64;

      v25 =*(_OWORD*)&v79;

      goto LABEL_56;

    }

    v26 =RtlInitLUnicodeStringFromNullTerminatedString((__int64)v7, (__int64)&v79);

    if (v26 < 0)

    {

      v70 =ConvertNtStatusToHResult(v26);

      goto LABEL_34;

    }

    v27 =v79;

    if (v79 >= 2)

    {

      do

      {

        if ( v81[(v27 >> 1) - 1] != 92 )

          break;

        v27 -=2i64;

      }

      while ( v27 >=2 );

      v79 =v27;

    }

    v75 =0i64;

    v65 =L"\\System32\\config\\COMPONENTS";

    v76 =0i64;

    v77 =0i64;

    *(_QWORD *)&v64= 54i64;

    *((_QWORD *)&v64+ 1) =56i64;

    v28 =Windows::StringUtil::Rtl::ConcatenateStrings<_LUNICODE_STRING,_LUNICODE_STRING>(

            (__int64)&v79,

            (__int64)&v64,

            (__int64)&v75);

    if (v28 < 0

      ||(v28 =Windows::StringUtil::Rtl::EnsureNullTerminated<Windows::Auto<_LUNICODE_STRING>>((unsigned__int64 *)&v75),

          v28 <0) )

    {

      v70 =ConvertNtStatusToHResult(v28);

    }

    else

    {

      *(_WORD *)&v106= 0;

      memset_0(&v106 +2, 0, 0x206ui64);

      v29 =GetLoadedHiveKeyName(v77, (unsigned __int16 *)&v106, 0x104ui64);

      if (v29 < 0)

      {

        v70 =v29;

        v8 =404;

        v9 ="GetLoadedHiveKeyName(ComponentsHiveWin32Path.Buffer, HiveMountKey,(sizeof(HiveMountKey)/sizeof((HiveMountKey)[0])))";

        Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v75);

        Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v72);

        goto LABEL_45;

      }

      v79 =0i64;

      v64 =*(_OWORD*)&v75;

      v80 =0i64;

      v81 =0i64;

      v65 =v77;

      v31 =RtlConvertWin32FilePathToNtFilePath((__int64)&v64,&v79);

      v32 =0;

      if (v31 < 0)

        v32 =v31;

      if (v32 >= 0)

      {

        v33 =RtlInitLUnicodeStringFromNullTerminatedString((__int64)&v106,(__int64)&v64);

        if ( v33 >= 0 )

        {

          v33 =Windows::StringUtil::Rtl::ConcatenateStrings<_LUNICODE_STRING,_LUNICODE_STRING>(

                  (__int64)&g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_,

                  (__int64)&v64,

                  (__int64)&v72);

          if ( v33 >=0 )

          {

            v34 = (Windows::Rtl::AutoHive*)(*(_QWORD *)v10 + 312i64);

            v65 = *(const wchar_t **)&v74;

            v64 = *(_OWORD *)&v72;

            v33 = Windows::Rtl::AutoHive::Load(

                    v34,

                    (const struct _LUNICODE_STRING *)&v64,

                    (const struct _LUNICODE_STRING *)&v79);

            if ( v33 >=0 )

            {

              Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v79);

              Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v75);

              v24 = v65;

              v25 = v64;

LABEL_56:

              v63 = 0i64;

              v35 = RtlGetSystem(0, 0i64, (__int64*)&v63);

              if ( v35 >=0 )

              {

                v36 = *(_QWORD *)v10;

                v92 = &v102;

                v37 = 1;

                *(_OWORD *)&v102 =g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_;

                v76 = 1i64;

                v103 = L"\\Registry\\Machine\\COMPONENTS\\";

                v105 = v24;

                v99 = 32i64;

                v100 = 32i64;

                v101 = &v92;

                *(_QWORD *)&v64 =v63;

                v75 = (char*)&v98;

                v93 = 1i64;

                v104 = v25;

                v94 = 0i64;

                _mm_storeu_si128((__m128i *)&v66,*(__m128i*)&v75);

                v95 = 0i64;

                LODWORD(v98) = 1;

                *((_QWORD *)&v64 +1) = 0i64;

                v67 = 0i64;

                v65 = 0i64;

                v68 = 0i64;

                v35 = RtlGetSystem(0, (structWindows::WCP::Rtl::_RTL_TRACING_FACILITY *)&v64,(__int64 *)(v36 + 344));

                if ( v35 >=0 )

                {

                 Windows::AutoPointerBase<Windows::Cdf::Rtl::IRtlCdfUlongTableEnumerator*,Windows::Auto<Windows::Cdf::Rtl::IRtlCdfUlongTableEnumerator*>>::Close((int (__fastcall****)(_QWORD))&v63);

                  Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v72);

                  v16 = v71;

                  goto LABEL_61;

                }

              }

              v70 = ConvertNtStatusToHResult(v35);

              Windows::AutoPointerBase<Windows::Cdf::Rtl::IRtlCdfUlongTableEnumerator*,Windows::Auto<Windows::Cdf::Rtl::IRtlCdfUlongTableEnumerator*>>::Close((int (__fastcall****)(_QWORD))&v63);

LABEL_34:

              Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v72);

              goto LABEL_72;

            }

          }

        }

        v32 =v33;

      }

      v70 =ConvertNtStatusToHResult(v32);

      Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v79);

    }

    Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((__int64)&v75);

    goto LABEL_34;

  }

  v37 =1;

LABEL_61:

  if (v16 & 4)

    v13 =(_DWORD *)((unsigned int)v13 | 0x10);

  v14 =CreateNewPseudoWindows();

  if ((v14 &0x80000000) != 0 )

    goto LABEL_11;

  v38 =v84;

  v39 =*(_QWORD*)v10;

  if (!(v71& 2) )

    v38 =4;

  v90 =*((_DWORD*)v6+ 2);

  LODWORD(v63) = 0;

  v84 =v38 | 0x10;

  v58 =(__int64 *)&v63;

  v40 =(_QWORD *)(v39 + 8);

  v14 =v71 & 4? (unsignedint)OpenExistingOfflineStore(

                                  (__int64)&v83,

                                  0,

                                  v13,

                                  (__int64)&GUID_a817521b_2b43_489f_8b84_67aceeab24a8,

                                  v40) : (unsignedint)CreateNewOfflineStore(

                                                        (__int64)&v83,

                                                        0,

                                                        v13,

                                                         (__int64)&GUID_a817521b_2b43_489f_8b84_67aceeab24a8,

                                                        v40);

  if ((v14 &0x80000000) != 0 )

  {

LABEL_11:

    v70 =v14;

LABEL_72:

    Windows::AutoPointerBase<unsigned short const *,Windows::Auto<unsignedshort const *>>::Close(

      (Windows::COM**)&v62,

      v15);

    Windows::AutoPODBase<_OFFLINE_STORE_CREATION_PARAMETERS,Windows::Auto<_OFFLINE_STORE_CREATION_PARAMETERS>>::Close(

      (__int64)&v83,

      v47);

    goto LABEL_73;

  }

  v41 =*(_QWORD*)v10;

  v78 =0i64;

  v42 =*(_QWORD***)(v41+ 8);

  v43 =(int (__fastcall*)(_QWORD**, GUID *,__int64 *))**v42;

  _guard_check_icall_fptr(**v42);

  v44 =v43(v42, &GUID_fe25822e_baa8_419a_b9e0_f194a3722a2b,&v78);

  if (v44 < 0)

  {

    v45 =v78;

    v70 =v44;

    if (v78 )

    {

      v78 =0i64;

      v46 =*(void(__fastcall **)(__int64))(*(_QWORD *)v45 +16i64);

      _guard_check_icall_fptr(*(_QWORD *)(*(_QWORD *)v45 +16i64));

      v46(v45);

    }

    goto LABEL_72;

  }

  v49 =v78;

  v50 =*(_QWORD*)v10;

  v51 =*(int(__fastcall **)(__int64))(*(_QWORD *)v78 +24i64);

  _guard_check_icall_fptr(*(_QWORD *)(*(_QWORD *)v78 +24i64));

  LODWORD(v52) = v51(v49);

  *(_QWORD *)(v50 + 16) = v52;

  **(_DWORD **)v10 =v37;

  v54 =v78;

  v97 =v37;

  v70 =0;

  if (v78 )

  {

    v78 =0i64;

    v55 =*(void(__fastcall **)(__int64))(*(_QWORD *)v54 +16i64);

    _guard_check_icall_fptr(*(_QWORD *)(*(_QWORD *)v54 +16i64));

    v55(v54);

  }

  Windows::AutoPointerBase<unsigned short const *,Windows::Auto<unsignedshort const *>>::Close(

    (Windows::COM**)&v62,

    v53);

  Windows::AutoPODBase<_OFFLINE_STORE_CREATION_PARAMETERS,Windows::Auto<_OFFLINE_STORE_CREATION_PARAMETERS>>::Close(

    (__int64)&v83,

    v56);

  Windows::WCP::Rtl::CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>::~CEnterExitTracer<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame,5>((__int64)&v96);

  return 0i64;

}

繼續閱讀