描述:
我用ATL写了一个DCOM程序,在本机上测试的时候COM组件能够正常启动,但是远程执行的时候却总是不成功。我查看了HRESULT值,结果显示“拒绝访问”。
我的客户端调用时的权限函数设置如下:
//初始化安全设置
hr = CoInitializeSecurity(
NULL, //Points to security descriptor
-1, //Count of entries in asAuthSvc
NULL, //Array of names to register
NULL, //Reserved for future use
RPC_C_AUTHN_LEVEL_DEFAULT, //The default authentication level for proxies
RPC_C_IMP_LEVEL_IDENTIFY, //The default impersonation level for proxies
NULL, //Reserved; must be set to NULL
0, //Additional client or server-side capabilities
NULL //Reserved for future use
);
在MMC中,我也修改了DCOM的默认访问权限,默认的身份验证级别设置为"无", 默认的模拟级别设置为"匿名",同时增加了“INTERACTIVE”,“NETWORK”和“EVERYONE”的远程访问权限,结果还是不能运行,不知道哪位高手能够帮忙解决一下?
测试的服务器端和客户端的操作系统都是XP SP2 Home Edition,不能使用组策略,不知道是否Home Edition对DCOM的访问有特别的限制?
谢谢!
解决方案1:
IClassFactory *pIF=NULL;
IYourServer *pYourI=NULL;
COSERVERINFO info;
memset(&info,0,sizeof(COSERVERINFO));
info.pwszName = _T("127.0.0.1"); //远程机器ip
//建类厂
hr = CoGetClassObject(CLSID_YourServer,CLSCTX_REMOTE_SERVER,&info,IID_IClassFactory,reinterpret_cast<void **>(&pIF));
//建实例
HRESULT hr = pIF->CreateInstance(NULL,IID_IYourServer,reinterpret_cast<void **>(&pYourI));
看看返回值,记得对方的防火墙要关。