如何在C#中调用explorer.exe进程中的COM+对象?
连接Explorer.exe的Immersive Settings Cache COM+ API
当explorer.exe启动时,会加载twinui.dll,该DLL包含名为Immersive Settings Cache(CLSID:A919EA73-490E-4D5C-9BA7-97CBC73119FE)的COM+类,它实现了以下接口:
IImmersiveSettingsCacheIImmersiveShellComponentIMarshalIObjectWithSiteIServiceProviderIUnknown- 工厂接口:
IClassFactoryIUnknown
对应的接口定义如下:
[Guid("7665c60a-c9a7-4306-ae31-bf520214fa71")] interface IImmersiveSettings : IUnknown { HRESULT Proc3(); HRESULT Proc4(/* Stack Offset: 8 */ [Out] /* C:(FC_TOP_LEVEL_CONFORMANCE)(16)(FC_DEREFERENCE)(FC_ULONG)(0) */ struct Struct_685[]* p0, /* Stack Offset: 16 */ [Out] int* p1, /* Stack Offset: 24 */ [Out] int* p2); HRESULT Proc5(/* Stack Offset: 8 */ [In] int p0); } [Guid("4214f6fa-eb36-4e2f-9ca2-23fdc1832df7")] interface IImmersiveSettingsCache : IUnknown { HRESULT Proc3(/* Stack Offset: 8 */ [In] /* ENUM32 */ int p0); HRESULT Proc4(/* Stack Offset: 8 */ [In] /* ENUM32 */ int p0, /* Stack Offset: 16 */ [Out] int* p1); HRESULT Proc5(/* Stack Offset: 8 */ [In] /* ENUM32 */ int p0, /* Stack Offset: 16 */ [Out] int* p1); HRESULT Proc6(/* Stack Offset: 8 */ [In] IImmersiveSettingsCacheNotification* p0, /* Stack Offset: 16 */ [Out] int* p1); HRESULT Proc7(/* Stack Offset: 8 */ [In] int p0); } [Guid("0b40e4e6-2749-461f-9a84-29491c297f86")] interface IImmersiveSettingsCacheNotification : IUnknown { HRESULT Proc3(/* Stack Offset: 8 */ [In] /* ENUM32 */ int p0); }
我发现SystemSettings.exe会通过此API通知explorer.exe某些设置变更,比如系统-多任务-虚拟桌面。其中高亮行执行了COM+方法:
这是一个CoCreateInstance调用(上图第9行):
在SystemSettings.exe执行该操作后,我在Process Monitor中观察到explorer.exe触发了RegQueryValue事件,调用栈如下:
我希望从自己的C#应用程序向explorer.exe发送相同的事件,请问如何将我的应用程序连接到explorer.exe的这个COM+ API?
内容的提问来源于stack exchange,提问作者Andrei Golubkov
相关产品推荐
相关产品推荐

