标签: com

COM和OLE有什么区别?

COM和OLE有什么区别,如果有的话?

com ole

46
推荐指数
2
解决办法
2万
查看次数

在DCOM调用中使用默认身份验证和单独的隐藏/模拟

我正在尝试用DCOM实现两件事(进程外)

  1. 使用CoInitializeSecurity及其参数pAuthList设置流程范围的身份验证.
  2. 在特殊情况下使用隐藏真实内容来改变呼叫者的身份(COM呼叫)

我的想法:

  1. AFAIK auth信息结构包含所有新COM调用的默认身份验证信息(如RPC_C_AUTHN_WINNT的用户名和密码).因此,COM应该使用auth结构中的信息而不是进程令牌.但是,所有COM调用/连接始终使用进程的标识而不是应用的默认标识.

  2. 通常,可以使用CoSetProxyBlanket来更改代理的身份验证信息.这适合我.我的问题是,如果我自己模仿令牌并调用COM函数,它是否必须工作.我已阅读各种MSDN文章,将EOAC_DYNAMIC_CLOAKING应用于CoInitializeSecurity应该可以使其正常工作.但是,我手动"模拟的COM调用始终在服务器端显示进程标识.

客户端看起来像这样(Delphi)

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 := …
Run Code Online (Sandbox Code Playgroud)

delphi security com

43
推荐指数
1
解决办法
1877
查看次数

Windows 64位注册表与32位注册表

我听说在Windows x64架构上,为了支持运行x86和x64应用程序,有两个独立/不同的Windows注册表集 - 一个用于x86应用程序访问,另一个用于x64应用程序访问?例如,如果COM在x86注册表集中注册CLSID,那么x64应用程序永远无法通过CLSID访问COM组件,因为x86/x64具有不同的注册表集?

所以,我的问题是我对上述样本的理解是否正确?我还想获得更多文档来学习这个主题,关于x64架构上的两个不同的注册表集.(我做了一些搜索,但没有找到任何有价值的信息.)

com registry 64-bit x86 clsid

41
推荐指数
2
解决办法
7万
查看次数

COM(C++)编程教程?

有没有从头开始学习C++/COM的好网站?我正在寻找类似于速成课程的内容,可能有两周的内容.

该课程可以采用标准C/C++的知识,或至少不是一个完整的假人.

c++ com

41
推荐指数
3
解决办法
5万
查看次数

stdole.dll做什么用?

我们有一个大型的C#(.net 2.0)应用程序,它使用我们自己的C++ COM组件和第三方指纹扫描程序库,也可以通过COM访问.我们遇到了一个问题,在生产过程中,指纹库中的某些事件不会被C#应用程序触发,尽管来自我们自己的C++ COM组件的事件被触发并且收到的很好.

使用MSINFO32将工作系统上加载的模块与发生故障的系统上的模块进行比较,我们确定这是由STDOLE.DLL不在GAC中引起的,因此未加载到故障进程中.

将此文件拖到GAC中会导致事件从指纹COM库恢复正常.

那么stdole.dll做什么?它的大小是16k所以它不能太多......它是否与STDOLE32这样的另一个库有某种联系?它的缺席怎么会导致这种奇怪的行为?

我们如何分发stdole.dll?这是一个XCOPY部署应用程序,我们不使用GAC.我们应该将它打包为资源并使用System.EnterpriseServices.Internal.Publish.GacInstall来确保它在GAC中吗?

c# com stdole

39
推荐指数
3
解决办法
6万
查看次数

在哪里可以找到可以在Powershell中创建的所有COM对象?

在Powershell中,我可以创建COM对象,例如,可以用来控制Microsoft Office应用程序:

$excel = New-Object -com "Excel.Application"
$excel.visible = $true
Run Code Online (Sandbox Code Playgroud)

如何列出可以在Powershell中创建的所有可用COM对象?

com powershell

38
推荐指数
3
解决办法
3万
查看次数

你可以用Python中的COM/ActiveX做什么?

我已经读过可以使用COM/ActiveX在Crystal Reports中自动执行月度报告.我不是那么先进,无法理解这是什么,或者甚至可以用它来做什么.

我也使用Excel做了很多工作,看起来你也使用COM/ActiveX与它进行交互.

有人可以解释这是如何工作的,也许可以提供一个简短的例

python com activex pywin32 crystal-reports

38
推荐指数
1
解决办法
4万
查看次数

RegAsm.exe和regsvr32有什么区别?如何使用regsvr32生成tlb文件?

任何机构都可以告诉我regsvr32和RegAsm有什么区别?我的Dll在C#中,那么如何将类导入到c ++中呢?

c# c++ com regasm visual-c++

38
推荐指数
1
解决办法
3万
查看次数

使用ComVisible(false)时指定Guid有什么意义吗?

在Visual Studio中创建新的C#项目时,生成的AssemblyInfo.cs文件包含指定程序集GUID的属性.属性上方的注释表明它"如果此项目暴露给COM".

我的程序集都没有包含需要对COM可见的类型,因此我已经标记了我的程序集[assembly: ComVisible(false)].那么指定GUID有什么意义吗?

我的感觉是答案是"不" - 那么为什么默认的AssemblyInfo.cs文件包含[assembly: ComVisible(false)][assembly: Guid("...")]


编辑:

总结一下回答:

在它们之间,答案解释了当且仅当正在使用COM互操作时才需要指定GUID.所以,在我的情况下,没有必要使用GUID.

sharptooth进一步解释说,[assembly: ComVisible(false)]并不意味着不使用COM互操作,因为可以覆盖ComVisible各个类型.因此,默认的AssembyInfo.cs包含两者[assembly: ComVisible(false)]和GUID.

.net c# com guid comvisible

38
推荐指数
2
解决办法
2万
查看次数

如何修复COMException错误80040154?

将工作C#项目从64位Windows 7计算机移动到32位XP计算机会导致以下错误:

由于以下错误,检索具有CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6}的组件的COM类工厂失败:80040154.

681EF637-F129-4AE9-94BB-618937E3F6B6不在注册表中,因此未正确安装,但这是以前在64位Windows 7计算机上出现问题的ID.在这里找到了64位Windows 7机器上的此错误的解决方案(将Platform Target更改为x86),但这并没有解决32位XP机器上的问题.我如何找到681EF637-F129-4AE9-94BB-618937E3F6B6,或者甚至更好相关的DLL,我该如何修复此异常?

.net com exception dllregistration

38
推荐指数
3
解决办法
19万
查看次数