获取有关当前扩展的GPO的信息

时间:2015-12-16 16:15:26

标签: c# .net group-policy mmc snap-in

我们目前正在开发一个MMC SnapIn扩展,它扩展了多个组策略对象(GPO),就像您可以在下面的图像中看到它一样:

Group Policy Management Editor - Extended

Thecnology是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:I'm looking look for the highlighted GUID

我尝试过很多没有任何结果的事情:

  • 在ExtensionSnapIn类中,有一个继承的PrimaryScopeNode属性,该属性具有一个GUID的NodeType属性。不幸的是,此属性始终返回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:

  

at Microsoft.ManagementConsole.SharedDataItem.GetData()at   Balabit.SyslogNgAgent.MMC.ExtensionSnapIn.OnInitialize()in   C:\源\伯格霍尔兹\客户\ Client.Product \主\ SRC \ MMC \ ExtensionSnapIn.cs:线   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)at   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 eventType,IntPtr arg,IntPtr param)

我已经搜索了这个问题好几天了,我已经阅读了大量有关MMC Extension SnapIns和GPO的文章,但我还没有找到任何可用的解决方案来解决我的问题。

提前感谢您的帮助。

0 个答案:

没有答案