我受够了试图实例化一个远程对象。
使用 dcomcnfg,启用对所有 Windows 7 相同工作组 PC 的访问。
CoInitializeEx(0,COINIT_APARTMENTTHREADED);
CoInitializeSecurity(0, -1, NULL, NULL,RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
COAUTHINFO ca = {0};
ca.dwAuthnSvc = RPC_C_AUTHN_WINNT;
ca.dwAuthzSvc = RPC_C_AUTHZ_NONE;
ca.dwAuthnLevel = RPC_C_AUTHN_LEVEL_DEFAULT;
ca.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
COAUTHIDENTITY id = {0};
ca.pAuthIdentityData = &id;
id.User = (USHORT*)<username>;
id.UserLength = length;
id.Password = (USHORT*)<password>;
id.PasswordLength = pwdlength;
id.Domain = (USHORT*)L"WORKGROUP";
id.DomainLength = 9;
id.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
COSERVERINFO c = {0};
c.pwszName = L"192.168.10.3";
c.pAuthInfo = &ca;
MULTI_QI res = {0};
res.pIID = &TheIID;
HRESULT hr = CoCreateInstanceEx(TheCLSID,0,CLSCTX_REMOTE_SERVER,&c,1,&res);
总是 E_ACCESSDENIED。顺便说一下,这个示例 (http://support.microsoft.com/kb/259011) 有效。但我找不到它的来源。
服务器还调用具有相同级别的 CoInitializeSecurity()。
以 Windows XP 计算机为目标时,CoCreateInstanceEx() 返回 S_OK,但未创建服务器。针对 Windows 7 时,E_ACCESSDENIED。
有什么线索吗?此外,工作示例不使用 U+P。也许我应该尝试匿名电话?