使用 GP 扩展处理组策略

Processing group policy with GP Extension

我创建了一个实现 ProcessGroupPolicyEx 的组策略扩展。 当我收到组策略时,我成功收到通知。

然而,我不知道如何从 GPO 内部阅读政策。 example 在遍历 GPO 时停止:

 for( pCurGPO = pChangedGPOList; pCurGPO; pCurGPO = pCurGPO->pNext )
   {
       if( *pbAbort )
       {
           // Abort.
           break;
       }
       // ...
   }

很好,但是如何在 pCurGPO 中获取策略(实际设置)?我需要获取此 GPO 包含的设置或存储它们的注册表项。这是因为我创建了多个以我的扩展为目标的 ADMX 模板,所以我需要区分它们。

到目前为止,我已经找到了一些样本,但它们假定扩展程序事先知道将更改哪些注册表。但是,在我的例子中,我不希望扩展做出这种假设,我希望它检查更新的 GPO 并准确确定正在更改的内容。

任何指点将不胜感激。

所以在研究了 Chromium 代码之后(根据 amritanshu 评论),我找到了一种似乎可行的方法,但我还不明白可能存在哪些例外情况(如果有的话):

  1. 获取 pCurObj 的 lpFileSysPath 字段,这将是 UNC 路径。
  2. 将“\Registry.pol”附加到路径。
  3. 读取并解析生成的文件,这将是一个 PReg 文件。

PReg 文件记录在此处: https://msdn.microsoft.com/en-us/library/aa374407(v=vs.85).aspx

如果有人发现此方法有任何问题,或知道此算法有任何异常,请告诉我。

编辑: 还发现这个博客写得更好,但解释相似:https://redsigil.weebly.com/home/group-policy-callbacks-the-missing-documentation