描述:
想问以下的问题:
1、dcom能在广域网上实现吗?
2、现在我的dcom能够在局域网的环境下成功实现,但是假如是我的服务器的代码要在广域网上实现,就不能用NTLMSSP (Windows NT LAN Manager Security Support Provider)来实现身份验证;于是我的代码看起来如下:
void CclientTestDlg::OnBnClickedOk()
{
ITsWA* pITs=NULL;
/* HRESULT hr=::CoCreateInstance(CLSID_TsWA,NULL, CLSCTX_REMOTE_SERVER ,IID_ITsWA,(void**)&pITs);
if(SUCCEEDED(hr))
{
pITs->TestMethod();
pITs->Release();
}
else
{
CString strError;
strError.Format("Error code is :0x%x",hr);
MessageBox(strError,strError,MB_OK);
}
*/ COSERVERINFO svrInfo;
COAUTHINFO authInfo;
COAUTHIDENTITY authIdentity;
svrInfo.dwReserved1=0;
svrInfo.dwReserved2=0;
svrInfo.pwszName=L"10.0.0.35";
svrInfo.pAuthInfo=&authInfo;
authInfo.dwAuthnLevel=RPC_C_AUTHN_LEVEL_DEFAULT;
authInfo.dwAuthnSvc= RPC_C_AUTHN_GSS_KERBEROS;
authInfo.dwAuthzSvc=RPC_C_AUTHZ_NAME;
authInfo.dwCapabilities=EOAC_NONE;
authInfo.dwImpers />
authInfo.pAuthIdentityData=&authIdentity;
authInfo.pwszServerPrincName=(LPWSTR)L"10.0.0.35";
authIdentity.Domain=(USHORT *)(L"WorkGroup");//组
authIdentity.DomainLength=wcslen((LPWSTR)authIdentity.Domain);
authIdentity.Flags=SEC_WINNT_AUTH_IDENTITY_UNICODE;
authIdentity.Password=(USHORT *)(LPWSTR)L"";//服务端Guest密码
authIdentity.PasswordLength=wcslen((LPWSTR)authIdentity.Password);
authIdentity.User=(USHORT *)L"Guest";//服务器端的能够access的账号
authIdentity.UserLength=wcslen((LPWSTR)authIdentity.User);
MULTI_QI qi;
qi.pIID = &IID_IUnknown;
qi.pItf = NULL;
qi.hr = 0;
HRESULT hr1=::CoCreateInstanceEx(CLSID_TsWA,NULL,CLSCTX_REMOTE_SERVER,&svrInfo,1,&qi);
CString strErr;
if(SUCCEEDED(hr1))
{
HRESULT hr2=qi.pItf->QueryInterface(IID_ITsWA,(void **)&pITs);
if(SUCCEEDED(hr2))
{
pITs->TestMethod();
pITs->Release();
qi.pItf->Release();
}
else
{
qi.pItf->Release();
strErr.Format("hr1 is 0x%x,hr2 is 0x%x",hr1,hr2);
MessageBox(strErr,strErr,MB_OK);
}
}
else
{
strErr.Format("hr1 is 0x%x",hr1);
MessageBox(strErr,strErr,MB_OK);
}
}
但现在,如果用winnt的NTLMSSP验证,比如被注释的部分采用注册表设置,就肯定能成功调用server上的dcom组件,反之不是返回说访问被拒绝就是说RPC server未启动;
3、COAUTHINFO的pwszServerPrincName成员究竟是什么意思?