我正在尝试用DCOM实现两件事(进程之外)
使用pAuthList.
我的想法:
。
客户端看起来像这样(德尔菲)
var
authList : SOLE_AUTHENTICATION_LIST;
authidentity : SEC_WINNT_AUTH_IDENTITY_W;
authInfo : array[0..1] of SOLE_AUTHENTICATION_INFO;
pcAuthSvc : DWORD;
asAuthSvc : array[0..0] of SOLE_AUTHENTICATION_SERVICE;
Token : TJwSecurityToken;
begin
ZeroMemory( @authidentity, sizeof(authidentity) );
authidentity.User := 'Testbenutzer';
authidentity.UserLength := Length('Testbenutzer');
authidentity.Domain := '';
authidentity.DomainLength := 0;
authidentity.Password := 'test';
authidentity.PasswordLength := 4;
authidentity.Flags := SEC_WINNT_AUTH_IDENTITY_UNICODE;
ZeroMemory( @authInfo, sizeof( authInfo ) );
// NTLM Settings
authInfo[0].dwAuthnSvc := RPC_C_AUTHN_WINNT;
authInfo[0].dwAuthzSvc := RPC_C_AUTHZ_NONE;
authInfo[0].pAuthInfo := @authidentity;
authList.cAuthInfo := 1;
authList.aAuthInfo := @authInfo;
OleCheck(CoInitializeSecurity(
NULL, // Security descriptor
-1, // Count of entries in asAuthSvc
NULL, // asAuthSvc array
NULL, // Reserved for future use
RPC_C_AUTHN_LEVEL_CONNECT, // Authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, // Impersonation level
@authList, // Authentication Information
DWORd(EOAC_DYNAMIC_CLOAKING), // Additional capabilities
NULL // Reserved
));
//create COM object
int := CoSecurityTestObj.Create;
int.TestCall;服务器还设置了标志EOAC_DYNAMIC_CLOAKING。它使用CoImpersonateClient来获取线程令牌和用户名。它还使用CoQueryClientBlanket来获取authInfo (作为SEC_WINNT_AUTH_IDENTITY_W结构)。但是,这两个调用总是返回客户端的进程标识。
此外,手动模拟也不起作用(2.):
Token := TJwSecurityToken.CreateLogonUser(authidentity.User, '', authidentity.Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT);
Token.ImpersonateLoggedOnUser;
int := CoSecurityTestObj.Create;
int.TestCall;再次提问:
这是绝地Windows安全代码库的基本工作,我将其扩展到支持COM安全性。所以你的帮助会转到GPL/MPL。
参考文献:
隐身:
CoInitializeSecurity和pAuthInfo
获得安全保护层(服务器端)
发布于 2012-01-31 16:27:24
您试过用RPC_C_AUTHN_LEVEL_CALL而不是RPC_C_AUTHN_LEVEL_CONNECT调用RPC_C_AUTHN_LEVEL_CALL()吗?
通常,在创建DCOM客户端时,我会创建COSERVERINFO,并使用安全凭据传递给CoCreateInstanceEx(),记住在所有接口上调用CoSetProxyBlanket()。
https://stackoverflow.com/questions/1993651
复制相似问题