热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenStore是值得看一下的

OpenStore是值得看一下的在CreateNewOfflineStore和OpenExistingOfflineStore中调用。调用`anonymou

OpenStore是值得看一下的

 

CreateNewOfflineStore 和 OpenExistingOfflineStore 中调用。

调用

  `anonymous namespace'::CNtStoreCreationParameters::CNtStoreCreationParameters((int)&v20);
  v9 =((int (__stdcall*)(int))`anonymous namespace'::CNtStoreCreationParameters::Initialize)(a2);
  v10 =&v20;
  v19 =0;
  v21 =a1 & 1;
  v11 =(int *)GetRerootedSIL((int)&v20,(int *)&v19);
  if ((signed int)v11 <0
    ||(v11 =`anonymous namespace'::SetupOfflineStoreEnvironment((int)&v20,v19), (signed int)v11 <0)
    ||(v11 =(int *)`anonymous namespace'::OpenStore((_DWORD **)&v20, v19,a3, (int)a4), (signed int)v11 <0) )

 

`anonymousnamespace'::OpenStore(

classA0x4bc90b42::CNtStoreCreationParameters const *,

structWindows::Rtl::IRtlSystemIsolationLayer *,

struct_GUID const &,

structIUnknown * *)

 

//----- (10120AB0)--------------------------------------------------------
int __fastcall `anonymous namespace'::OpenStore(

_DWORD **a1,

int *a2,

int a3,

int a4)
{
  struct
IStore2 *v46; //ST10_4@47
  int (__stdcall*v47)(structIStore2 *, int, int); // esi@47
  structWindows::Rtl::IRtlSystemIsolationLayer *v51;// [sp+0h] [bp-88h]@0
  struct ICSIStore **v53; // [sp+0h][bp-88h]@35
  struct Windows::Rtl::IRtlKey *v54; // [sp+4h][bp-84h]@0
  const struct _GUID *v55; // [sp+4h][bp-84h]@8
  struct ICSIStore **v56; // [sp+4h][bp-84h]@35
  struct IStore2 *v69; // [sp+3Ch][bp-4Ch]@35
  struct Windows::ComponentStore::Rtl::IRtlComponentStore*v71; //[sp+44h] [bp-44h]@1

  v77 =a1;
  v59 =a2;
 Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame::CSimpleHResultCarryingFrame((Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame*)&v76);
  v5 =*(_DWORD*)(v4+ 36);
  v78[0] = *(_DWORD *)(v4 + 28);
  v71 =(structWindows::ComponentStore::Rtl::IRtlComponentStore *)1;
  v79 =*(_DWORD*)(v4+ 32);
  v6 =*(_WORD*)(v5+ 2 * ((unsignedint)v78[0] >> 1) - 2) == 92;
  v7 =2;
  v80 =*(_DWORD*)(v4+ 36);
  if (v6 )
  {
    v8 =(signed int)v71;
  }
  else
  {

    v8 =2;
    v81 =g_LUNICODE_STRING__bslash_;
    v82 =*((_DWORD*)&g_LUNICODE_STRING__bslash_ + 1);
    v83 =*((_DWORD*)&g_LUNICODE_STRING__bslash_ + 2);
  }
  v9 =&v78[3 * v8];
  *v9= g_LUNICODE_STRING_WinSxS[0];
  v9[1] =g_LUNICODE_STRING_WinSxS[1];
  v9[2] = g_LUNICODE_STRING_WinSxS[2];
  v66 =0;
  v67 =0;
  v68 =0;
  v10 =RtlConcatenateLUnicodeStrings(0, v8 + 1, v78, (int)&v66);
  if (v10 < 0)
  {
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v10);
LABEL_56:
    Windows::Auto<_LUTF8_STRING>::~Auto<_LUTF8_STRING>(&v66);
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CVoidRaiseFrame>::ReportErrorPropagation(
      &v76,
      v48);
    return v76;
  }
  v75 =0;
  v11 =*v59;
//  OpenRegistryKey

  v12 = (*(int(__thiscall **)(int *,_DWORD, signed int, int *,int *, _DWORD))(v11 + 20))(
          v59,
          0,
          131097,
         g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_COMPONENTS_bslash_,
          &v75,
          0);
  if (v12 < 0
    ||(v12 =Windows::COM::VerifyStoreVersionNumber(v75,v59, (Windows::COM *)*((_WORD *)v77 + 92), v51, v54, v57),
        v12 <0) )
  {
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v12);
LABEL_55:
    Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v75);
    goto LABEL_56;
  }
  v13 =*v59;
  v74 =0;
//  OpenRegistryKey

  v14 = (*(int(__thiscall **)(int *,_DWORD, signed int, int *,int *, _DWORD))(v13 + 20))(
          v59,
          0,
          131097,
         g_LUNICODE_STRING__bslash_Registry_bslash_Machine_bslash_SOFTWARE_bslash_Microsoft_bslash_Windows_bslash_CurrentVersion_bslash_SideBySide_bslash_,
          &v74,
          0);
  if (v14 < 0)
  {
    Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v14);
LABEL_54:
    Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v74);
    goto LABEL_55;
  }
  v15 =*v59;
  v73 =0;
//  OpenFileSystemDirectory

  v16 = (*(int(__thiscall **)(int *,_DWORD, signed int, int *,signed int, signed int, int *, _DWORD))(v15+ 8))(
          v59,
          0,
          1179785,
          (int*)&v66,
          7,
          33,
          &v73,
          0);
  if (v16 < 0)
  {
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v16);
LABEL_53:
    Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v73);
    goto LABEL_54;
  }
  v17 =v77;
  v72 =0;
  if (v77[43] )
  {
    v18 =*v59;
//  OpenRegistryKey

    v19 = (*(int(__thiscall **)(int *,_DWORD, signed int, int *,int *, _DWORD))(v18 + 20))(
            v59,
            0,
            131097,
            dword_10012014, // \Registry\Machine\ExtStorage
            (int *)&v72,
            0);
    if (v19 < 0)
    {
     Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
        &v76,
        v19);
LABEL_52:
      Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v72);
      goto LABEL_53;
    }
    v17 =v77;
  }
  v20 =*((_WORD*)v17+ 92);
  if ((_WORD)v20 )
  {
    if
(v20 == 6)
    {
      v50 =4;
    }
    else
    {
      if
(v20 == 9)
        goto LABEL_27;
      if (v20 == 12)
      {
        v50 =16;
      }
      else
      {
        if
( v20 != 5 )
        {
         Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetInvalidParameter(&v76);
          Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v72);
          Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v73);
          Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v74);
          Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v75);
          Windows::Auto<_LUTF8_STRING>::~Auto<_LUTF8_STRING>(&v66);
          v65 ="base\\wcp\\dll\\offline.cpp";
          v66 ="`anonymous-namespace'::OpenStore";
          v67 =478;
          v68 ="false";
         Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::ReportErrorOrigination(
            (int*)&v76,
            (int)&v65);
          return v76;
        }
        v50 =8;
      }
    }

    v7 =v50;
    goto LABEL_27;
  }
  v7 =1;
LABEL_27:
  if (*((_BYTE*)v17+ 186) )
    v7 |=0x20u;
  v60 =20;
  v61 =g_LUNICODE_STRING_Winners;
  v62 =64;
  v63 =0;
  v64 =0;
  v70 =0;
  v21 =v74;
  v22 =*(_DWORD*)v74;
// IRtlKey SideBySide, OpenExistingKey

  v23 = (*(int(__thiscall **)(int, _DWORD, signed int, int*, int *, _DWORD))(v22+ 40))(v21, 0, 131097, &v60,&v70, 0);
  if (v23 < 0)
  {
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v23);
LABEL_51:
    Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v70);
    goto LABEL_52;
  }
  v24 =(unsigned int *)v77;
  v71 =0;
  v25 =Windows::Rtl::AutoString<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::IsEmpty((int)(v77 + 40));
  v77 =0;
  if (!v25 )
    v77 =v26;
  v27 =`anonymous namespace'::CreateRtlStore(
          v7,
          (int)v59,
          v75,
          v74,
          v70,
          (int*)&v66,
          (volatilesigned __int32 *)&v71,
          (int)v77,
          v72);
  if (v27 < 0)
  {
   Windows::ErrorHandling::COM::CBaseFrame<Windows::ErrorHandling::COM::CSimpleHResultCarryingFrame>::SetNtStatus(
      &v76,
      v27);
LABEL_50:
    Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v71);
    goto LABEL_51;
  }
  v6 =(*v24& 4) == 0;
  v28 =*v24;
  v29 =v28 & 0x10;
  v30 =!v6 ?0 : 1;
  v69 =0;
  v59 =(int *)&v69;
  v31 =BUCL::Com::CFunkyOperatorAmpersandReturnType<BUCL::Com::CSmartRef<IStorePendingTransaction>>::operatorIStorePendingTransaction * *(&v59);
  v34 =Windows::COM::CopyOut(
          v30,
          v71,
          v32,
          (structWindows::ComponentStore::Rtl::IRtlComponentStore *)*((_WORD *)v24 + 92),
          v29,
          v33,
          v31,
          v52,
          v55,
          v58);
  if (v34 < 0)
    goto LABEL_61;
  if (!(unsigned__int8)operator==(a3, (int)&_GUID_a5c62f6d_5e3e_4cd9_b345_6b281d7a1d1e)
    &&!(unsigned__int8)operator==(v35, (int)&_GUID_a817521b_2b43_489f_8b84_67aceeab24a8) )
  {
    v77 =0;
    v38 =(volatile signed __int32*)Windows::ServicingAPI::Initialize(v37, v36);
    if ((signed int)v38 <0
      ||(v38 =Windows::ServicingAPI::CCSIStore::CreateOrGet(v69,v30 == 0,0, (structIStore2 *)&v77, v53, v56),
          (signedint)v38 <0) )
    {
      v39 =v77;
    }
    else
    {

      v42 =v77;
      v43 =(int (__stdcall*)(_DWORD**, int, int))**v77;
      __guard_check_icall_fptr(**v77);
      v38 =(volatile signed __int32*)v43(v42, a3, a4);
      v39 =v77;
      if ((signed int)v38 >=0 )
      {
        if
( v77 )
        {
          v77 =0;
          v44 =v39;
          v45 =(void (__stdcall*)(_DWORD))(*v39)[2];
          __guard_check_icall_fptr((*v39)[2]);
          v45(v44);
        }
        goto
LABEL_46;
      }
    }

    v76 =(__int32)v38;
    if (v39 )
    {
      v77 =0;
      v40 =v39;
      v41 =(void (__stdcall*)(_DWORD))(*v39)[2];
      __guard_check_icall_fptr((*v39)[2]);
      v41(v40);
    }
LABEL_49:
    BUCL::Com::CSmartRef<IStore2>::~CSmartRef<IStore2>(&v69);
    goto LABEL_50;
  }
  v46 =v69;
  v47 =**(int(__stdcall ***)(struct IStore2 *,int, int))v69;
  __guard_check_icall_fptr(**(_DWORD **)v69);
  v34 =v47(v46, a3, a4);
  if (v34 < 0)
  {
LABEL_61:
    v76 =v34;
    goto LABEL_49;
  }
LABEL_46:
  Windows::ErrorHandling::Rtl::CBaseFrame<Windows::ErrorHandling::Rtl::CVoidRaiseFrame>::SetCanonicalSuccess(&v76);
  BUCL::Com::CSmartRef<IStore2>::~CSmartRef<IStore2>(&v69);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v71);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v70);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v72);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v73);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v74);
  Windows::Auto<Windows::Rtl::IRtlSystemIsolationLayer *>::~Auto<Windows::Rtl::IRtlSystemIsolationLayer *>(&v75);
  Windows::Auto<_LUTF8_STRING>::~Auto<_LUTF8_STRING>(&v66);
  return v76;
}


推荐阅读
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
八戒走你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有