我们目前正在开发一个 MMC 管理单元扩展,它扩展了多个组策略对象 (GPO),如下图所示:
技术是 MMC 3.0、.NET 3.5、C#、VS2013。该扩展适用于所有 GPO。
扩展的主类看起来像这样(以匿名的方式)
[SnapInSettings("{3B6F64DC-4572-4A64-957A-E8A9E2FEBD54}", DisplayName = "DisplayName", Description = "MMC Snap-In")]
[ExtendsNodeType("{8FC0B739-A0E1-11D1-A7D3-0000F87571E3}")]
[ExtendsNodeType("{D37CB93E-0DDC-4204-AA04-C3D70B01A7D8}")]
public class ExtensionSnapIn : NamespaceExtension
{
}
一切正常,除了我无法确定哪个 GPO 是当前打开的扩展的父级。我想知道这一点,因为我必须将注册表写入以下路径:HKLM\Software\Company\Product\Client Group Policy\[GPOID]\
我想动态地拥有这个 ID:我正在寻找突出显示的 GUID
我已经尝试了很多没有结果的事情:
- 在 ExtensionSnapIn 类中有一个继承的 PrimaryScopeNode 属性,它有一个 NodeType 属性,它是一个 GUID。不幸的是,这个属性总是返回 00000000-000-0000-0000-000000000000。但是文档说关于 PublishesNodeTypeAttribute:
如果一个节点没有这个属性,它就不能注册为一个可扩展的节点。
- 每当我尝试像这样读取 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_NODETYPE、CCF_SZNODETYPE、CCF_SNAPIN_CLASSID、CCF_DISPLAY_NAME 我得到这个:
以下剪贴板格式保留供 MMC 使用:CCF_DISPLAY_NAME。指定另一种剪贴板格式。
其余的剪贴板格式只给出一个带有此堆栈跟踪的 PrimarySnapInDataException:
在 Microsoft.ManagementConsole.SharedDataItem.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 dataObject, IntPtr hScopeItem) 在 Microsoft.ManagementConsole。Executive.ComponentData.OnExpand(IDataObject dataObject, Boolean isExpanding, IntPtr hScopeItem) at Microsoft.ManagementConsole.Executive.ExpandMmcNotification.OnNotify(IntPtr dataObject, IntPtr arg, IntPtr param) at Microsoft.ManagementConsole.Executive.MmcNotifyTarget.Notify(IntPtr dataObject, NotificationType事件类型,IntPtr 参数,IntPtr 参数)
我已经用谷歌搜索这个问题好几天了,我已经阅读了大量关于 MMC 扩展管理单元和 GPO 的文章,但我还没有找到任何可用的解决方案来解决我的问题。
提前感谢您的帮助。