首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CoCreateInstance调用返回代码0x80040154的一种解决方法

在另外一台Win7机器上测试时,缩略图中并没有出现想象中的LOGO。一看日志文件,发现一直在报:CoCreateInstance()调用返回0x80040154。...那么CoCreateInstance()为啥会返回0x80040154呢?这个代码又意味着什么嗯?从网上的搜索结果来看,0x80040154是表示"Class Not Registered"。...再一想,开发时采用的一直是Windows10,可以正常运行。到了Windows7上为啥就不行了呢?难道是WIC在Windows7上不支持?...这个怀疑显然是不成立的,从MSDN上来看从XP SP2就开始支持了啊: ?       那么难道是参数给的不对?...自然CoCreateInstance()调用就会返回0x80040154了。解决方案就是传递CLSID_WICImagingFactory1给CoCreateInstance()。

2.5K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    无招胜有招: 看我如何通过劫持COM服务器绕过AMSI

    这个过程我们在IDA中可以看出,从图中 我们可以看到COM服务接口ID(IID)和ClassID(CLSID)传递给CoCreateInstance(): 甚至,我们可以通过查看ProcMon来验证这一点...如您所见,Microsoft似乎删除了对CoCreateInstance()的调用,并将其替换为直接调用DllGetClassObject()。...通过直接调用amsi.dll的DllGetClassObject()函数替换CoCreateInstance,这一修复方法避免了注册表解析操作,由于AMSI不再在COM服务器的注册表中查询CLSID,因此我们无法再劫持它...在进行研究之前,我们需要明白的是:基本上,脚本解释器(如PowerShell)从工作目录加载amsi.dll,而不是从安全路径(如System32)加载它。...由于这个易受攻击的AMSI版本仍然调用CoCreateInstance()函数,因此我们仍然可以通过劫持注册表的搜索顺序来劫持AMSI,整个操作方法如下: 首先,我们可以通过为powershell.exe

    2.7K70

    CVE-2020-1362 漏洞分析

    我们可以在自己写的程序(下面称为客户端)中使用 CoCreateInstance() 或者 CoGetClassObject() 等函数来创建对象,通过调用获得的对象的类方法来使用服务提供的功能。...() 函数会使 WalletService 调用这个函数来创建出接口类返回给客户端。...那么如何调用 WalletXFactory::CreateInstance() 并创建出 WalletX 对象呢?我们需要在客户端使用 CoCreateInstance() 。...有了 WalletXFactory 的 CLSID 和 WalletX 的 IID,然后在客户端调用 CoCreateInstance(),WalletService 就会调用 CLSID 对应的工厂类...其它 在控制虚表函数程序流到 LoadLibraryExW() 时,需要绕过下面两个 check。 第一个是需要设置 this+0x80 这个地址的值,使得下面的 and 操作为 true。 ?

    77920

    测试人员代码分析5步法

    从当前代码所在的模块出发梳理调用关系,首先需要明确调用关系是两个以上模块之间的关系,也就是在调用过程中,存在调用方和被调用方;其次,当前代码所在模块在实际调用中,可能会调用其它模块,也可能被其它模块调用...我们理清实现和泛化关系,就等同于找到房子的承重墙;组合、聚合和关联更能代表代码结构的横向关系,是具体实现过程;依赖关系也是一种代码结构的横向关系,但是这种关系比较弱,即对代码的整个框架影响较小,所以分析时不建议花费太多时间...2、当前模块调用了哪些模块:在.vcproj工程文件中搜.lib、LoadLibrary、CoCreateInstance,可以看出dllCall.exe包含shell32.lib等静态库。 ?...dllCall.exe会通过LoadLibrary调用dllTest.dll这个动态库。 ? dllCall.exe会通过CoCreateInstance调用dllCom.dll等动态库。 ?...第四步 确定模块间的接口 C++接口一般分为COM接口和LoadLibrary导出接口两类,其中LoadLibrary导出接口的使用方法又细分为两种: ①COM接口,CoCreateInstance的第四个参数就是接口的

    1.4K100

    SkeyeLive中DirectShow采集音视频流程及几种采集方式介绍

    调用标准方法CoCreateInstance生成系统设备枚举器(Device Enumerator),类标识(CLSID)为CLSID_SystemDeviceEnum,方法如下:CAMERA_LIST_T...ISampleGrabber::SetCallback( ISampleGrabberCB *pCallback, long WhichMethodToCallback) = 0;从函数接口我们可以看出...lBufferSize);g_cbInfo.bHaveData=TRUE;return 0;}两种方式相比较,个人观点:各有优劣;在SkeyeLive中我们采用的是回调方式,当时引进这个库就是为了能在采集端保证音视频从源头是同步的...而回调模式就正好相反,其优点是:稳定性高,随时都能保证取的帧是连续的,即使不做缓存也不会出现取出来的数据出现丢帧的情况,当然在取数据时比如编码慢(或者回调中做其他延时处理),就会出现预览和回调同步延时的情况...,回调缓存的数据量会越来越大,延时也将增大;当然,如果在多路同时采集时,甚至多路同时进行数据处理时,采用回调模式会更显优势!

    91630

    COM开发中的Win32 SDK头文件、宏定义和HRESULT

    使用这些头文件时,通常需要在源代码文件的顶部包含它们,以便使用其中定义的接口和函数。例如,当你定义一个COM接口时,需要包含Unknwn.h以获取IUnknown接口的定义。...DECLARE_INTERFACE_:用于声明一个从基接口派生的COM接口。 STDMETHOD:用于声明一个返回HRESULT的接口成员函数。...HRESULT HRESULT是一个32位的值,用于表示函数调用的结果。它由以下几个部分组成: S (Severity):严重性,1表示失败,0表示成功。...使用HRESULT 在COM中,HRESULT的使用遵循以下规则: 成功与失败:使用SUCCEEDED和FAILED宏来判断函数调用是否成功或失败。...例如,当你调用一个COM方法时,你可以通过检查其返回的HRESULT值来确定调用是否成功: HRESULT hr = CoCreateInstance(CLSID_MyComObject, NULL,

    2.3K00

    ATL源码学习2---聚合的支持

    如果有 一个客户程序创建了A对象使得自己可以调用IA的方法,但同时又想获得IB的接口,调用IB的方法。...从组件A如何管理组件B的方法上,第二种方法还可以分为两种:包容和聚合。...同样,如果组件仅支持聚合,那么T1就是CComFailCreator,创建时直接返回E_FAIL。      CComAggObject提供了两个IUnknown的实现。...含有AUTO与没有AUTO的区别是,前者不需要对聚合对象执行任何的初始化,在需要它们时再创建,避免资源浪费。没有AUTO则必须在FinalConstruct函数中预先初始化被聚合的对象。...m_pIB)               hr = ::CoCreateInstance(CLSID_B,                   GetControllingUnknown(),

    75020

    使用MSHTML解析HTML页面

    使用CoCreateInstance创建一个接口,对于IHTMLDocument2接口一般是使用下面的语句: HRESULT hr = CoCreateInstance(CLSID_HTMLDocument...函数有三个参数,第一个参数表示数组中元素类型,一般给VT_VARIANT表示它是一个自动类型,第二个参数数组元素起始位置的下标,对于VC来说,数组元素总是从0开始,所以这个位置一般给0,第三个参数是数组的维数...b)SafeArrayAccessData:允许用户操作这个数组,在需要读写这个数组时都需要调用这个函数,以便获取这个数组的操作权。...在操作返回值时就是围绕着CComVariant类来进行 返回确定值 当它返回一个确定值时很好解决,由于事先知道返回值得类型,只需要调用结构体的不同成员即可 CComVariant varResult;...在调用js时,如果不知道函数的名称,目前为止没有方法可以调用,这样就需要我们在HTML中使用正则表达式等方法进行提取,但是在HTML中调用js的方法实在太多,而有的只有一个函数,并没有调用,这些情况给工作带来了很大的挑战

    3.6K30

    事务对象和命令对象

    事务是一种对数据源的一系列更新进行分组或批处理以便当所有更新都成功时同时提交这些更新,或者如果任何一个更新失败则不提交任何更新并且回滚整个事务的方法....[optional] interface ITransactionObject; } 在创建了数据库连接之后使用QueryInterface 查询出IDBCreateSeesion对象,然后调用...需要注意的是,一个数据源连接可以创建多个回话对象,这里只能通过这种方式创建回话对象,而不能直接通过CoCreateInstance 来创建。...IDBCreateSession); BOOL bRet = FALSE; HWND hDesktop = GetDesktopWindow(); HRESULT hRes = CoCreateInstance...接着调用IDBCreateCommand接口来创建一个命令对象并尝试query命令对象的其他接口,得出数据源支持哪些接口。 这个例子非常简单,只是为了演示如何创建会话对象和数据源对象罢了。

    86120
    领券