Com 在CoCreateInstance上拒绝E_访问

Com 在CoCreateInstance上拒绝E_访问,com,directshow,Com,Directshow,下面是一段代码片段 #include "stdafx.h" #include <tchar.h> #include <windows.h> #include <dshow.h> #include <ExDisp.h> int _tmain(int argc, _TCHAR* argv[]) { CoInitialize(NULL); HRESULT hr = S_OK; DWORD err = 0; // Try

下面是一段代码片段

#include "stdafx.h"
#include <tchar.h>
#include <windows.h>
#include <dshow.h>
#include <ExDisp.h>
int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    HRESULT hr = S_OK;
    DWORD err = 0;

    // Try to create graph builder
    IGraphBuilder* pGraph = 0;
    hr = CoCreateInstance(CLSID_FilterGraph, NULL,
    CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph );
    err = GetLastError();

    // Here, hr is E_ACCESSDENIED
    // err is 5 (ERROR_ACCESS_DENIED)
    // Try to create capture graph builder (succeeds)
    ICaptureGraphBuilder2* pBuild = 0;
    hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void **)&pBuild );
    err = GetLastError();

    // Here, hr is S_OK
    // err is 0 (ERROR_SUCCESS)
    // Try to create IWebBrowser (succeeds)
    IWebBrowser2* pBrowser = 0;
    hr = CoCreateInstance (CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID *)&pBrowser);

    err = GetLastError();

    // Here, hr is S_OK
    // err is 0 (ERROR_SUCCESS)
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
int _tmain(int argc,_TCHAR*argv[]
{
共初始化(空);
HRESULT hr=S_正常;
德沃德误差=0;
//尝试创建图形生成器
IGraphBuilder*pGraph=0;
hr=CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_INPROC_服务器、IID_IGraphBuilder(void**)和pGraph);
err=GetLastError();
//在这里,人力资源被拒绝
//错误为5(错误\访问被拒绝)
//尝试创建捕获图生成器(成功)
ICaptureGraphBuilder2*pBuild=0;
hr=CoCreateInstance(CLSID_CaptureGraphBuilder2,NULL,CLSCTX_INPROC_服务器,IID_ICaptureGraphBuilder2,(void**)和pBuild);
err=GetLastError();
//这里,人力资源部还好吗
//错误为0(错误\成功)
//尝试创建IWebBrowser(成功)
IWebBrowser2*pBrowser=0;
hr=CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_LOCAL_服务器,IID_IWebBrowser2,(LPVOID*)和pBrowser);
err=GetLastError();
//这里,人力资源部还好吗
//错误为0(错误\成功)
返回0;
}

我正在尝试创建IFilterGraph,但由于E_ACCESSDENIED而失败。另一方面,创建其他directshow对象也可以。其他一些COM对象也是如此(以IWebBrowser2为例)。知道有什么问题吗?谢谢

嗯,那看起来不太好。这是Windows安全问题的结果。这通常不会失败,coclass位于c:\windows\system32\quartz.dll中。有许多可能导致失败的操作,包括读取注册表和加载DLL时遇到问题


也许解决它的最佳方法是使用SysInternals的ProcMon并观察程序的操作。请注意结果列,您应该可以在那里看到错误。这应该会让您更接近于找出安全配置问题的根源。

嗯,这看起来不太好。这是Windows安全问题的结果。这通常不会失败,coclass位于c:\windows\system32\quartz.dll中。有许多可能导致失败的操作,包括读取注册表和加载DLL时遇到问题


也许解决它的最佳方法是使用SysInternals的ProcMon并观察程序的操作。请注意结果列,您应该可以在那里看到错误。这应该会让您更接近于找出安全配置问题的根源。

非常正确,我调试了许多看起来很奇怪的问题。我想一个链接会非常有用:谢谢,我完全忘记了ProcMon在这里可以提供帮助。其中一个DLL是从一个我的用户没有权限的文件夹中注册的。没错,我调试了很多看起来很奇怪的问题。我想一个链接会非常有用:谢谢,我完全忘记了ProcMon在这里可以提供帮助。其中一个DLL是从我的用户没有权限的文件夹中注册的。