C# 获取有关当前扩展GPO的信息
我们目前正在开发一个MMC管理单元扩展,它扩展了多个组策略对象(GPO),如下图所示: 该技术是MMC3.0、.NET3.5、C#、VS2013。该扩展在所有GPO上都可用 扩展的主类如下所示(以一种规范化的方式) 一切正常,但我无法确定哪个GPO是当前打开的扩展的父级。我想知道这一点,因为我必须在注册表中写入以下路径:HKLM\Software\Company\Product\Client Group Policy\[GPOID]\ 我希望动态使用此ID: 我尝试了很多事情,但都没有结果:C# 获取有关当前扩展GPO的信息,c#,.net,group-policy,mmc,snap-in,C#,.net,Group Policy,Mmc,Snap In,我们目前正在开发一个MMC管理单元扩展,它扩展了多个组策略对象(GPO),如下图所示: 该技术是MMC3.0、.NET3.5、C#、VS2013。该扩展在所有GPO上都可用 扩展的主类如下所示(以一种规范化的方式) 一切正常,但我无法确定哪个GPO是当前打开的扩展的父级。我想知道这一点,因为我必须在注册表中写入以下路径:HKLM\Software\Company\Product\Client Group Policy\[GPOID]\ 我希望动态使用此ID: 我尝试了很多事情,但都没有结果:
- 在ExtensionSnapIn类中,有一个继承的PrimaryScopeNode属性,它有一个作为GUID的NodeType属性。不幸的是,此属性始终返回00000000-000-0000-0000-000000000000。但是,文档中说,关于PublishSnodeTypeAttribute:
- 每当我尝试读取PrimaryNode.SharedData时,如下所示:
//private const string shdata = "CCF_SCE_GPT_UNKNOWN";
//private const string shdata = "CCF_SNAPIN_CLASSID";
//private const string shdata = "CCF_DISPLAY_NAME";
//private const string shdata = "CCF_NODETYPE";
//private const string shdata = "CCF_SZNODETYPE";
//private const string shdata = "CCF_SNAPIN_CLASSID";
//private const string shdata = "CCF_DISPLAY_NAME";
//private const string shdata = "CFSTR_DSOBJECTNAMES";
private const string shdata = "CCF_SCE_GPT_UNKNOWN";
public ExtensionSnapIn()
{
this.PrimaryNode.SharedData.Add(new SharedDataItem(shdata));
}
protected override void OnInitialize()
{
SharedDataItem sharedDataItem = this.PrimaryNode.SharedData.GetItem(shdata);
}
我总是有例外。对于CCF_节点类型、CCF_SZNODETYPE、CCF_SNAPIN_CLASSID、CCF_DISPLAY_NAME,我得到以下信息:
以下剪贴板格式保留供MMC使用:
CCF\u显示\u名称。指定其他剪贴板格式
其余的剪贴板格式只提供一个PrimarySnapInDataException,其中包含以下堆栈跟踪:
位于Microsoft.ManagementConsole.SharedDaitaItem.GetData()的
中的Balabit.SyslogNgAgent.MMC.ExtensionSnapIn.OnInitialize()
c:\Source\Bergholz\Client\Client.Product\Main\src\MMC\ExtensionSnapIn.cs:line
65分
Microsoft.ManagementConsole.Advanced.NamespaceExtension.ProcessNotification(通知
通知)在
Microsoft.ManagementConsole.Internal.SnapInClient.Microsoft.ManagementConsole.Internal.IMessageClient.ProcessNotification(通知
通知)在
Microsoft.ManagementConsole.Executive.SnapInInitializationOperation.OnStart()
在
Microsoft.ManagementConsole.Executive.RunningOperationsTable.EnqueueOperation(操作
操作)在
Microsoft.ManagementConsole.Executive.NamespaceExtensionComponentData.GetScopeNodeForExpand(IDataObject
数据对象,IntPtr hScopeItem)位于
Microsoft.ManagementConsole.Executive.ComponentData.OneExpand(IDataObject
数据对象,布尔isExpanding,IntPtr hScopeItem)位于
Microsoft.ManagementConsole.Executive.ExpandMMCNotify.OnNotify(IntPtr
数据对象、IntPtr参数、IntPtr参数)位于
Microsoft.ManagementConsole.Executive.MmcNotifyTarget.Notify(IntPtr
数据对象、NotificationType事件类型、IntPtr参数、IntPtr参数)
我在谷歌上搜索这个问题已经好几天了,我读过很多关于MMC扩展插件和GPO的文章,但是我还没有找到任何解决问题的有效方法
提前谢谢你的帮助
//private const string shdata = "CCF_SCE_GPT_UNKNOWN";
//private const string shdata = "CCF_SNAPIN_CLASSID";
//private const string shdata = "CCF_DISPLAY_NAME";
//private const string shdata = "CCF_NODETYPE";
//private const string shdata = "CCF_SZNODETYPE";
//private const string shdata = "CCF_SNAPIN_CLASSID";
//private const string shdata = "CCF_DISPLAY_NAME";
//private const string shdata = "CFSTR_DSOBJECTNAMES";
private const string shdata = "CCF_SCE_GPT_UNKNOWN";
public ExtensionSnapIn()
{
this.PrimaryNode.SharedData.Add(new SharedDataItem(shdata));
}
protected override void OnInitialize()
{
SharedDataItem sharedDataItem = this.PrimaryNode.SharedData.GetItem(shdata);
}