使用 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 评论),我找到了一种似乎可行的方法,但我还不明白可能存在哪些例外情况(如果有的话):
- 获取 pCurObj 的 lpFileSysPath 字段,这将是 UNC 路径。
- 将“\Registry.pol”附加到路径。
- 读取并解析生成的文件,这将是一个 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
我创建了一个实现 ProcessGroupPolicyEx 的组策略扩展。 当我收到组策略时,我成功收到通知。
然而,我不知道如何从 GPO 内部阅读政策。 example 在遍历 GPO 时停止:
for( pCurGPO = pChangedGPOList; pCurGPO; pCurGPO = pCurGPO->pNext )
{
if( *pbAbort )
{
// Abort.
break;
}
// ...
}
很好,但是如何在 pCurGPO 中获取策略(实际设置)?我需要获取此 GPO 包含的设置或存储它们的注册表项。这是因为我创建了多个以我的扩展为目标的 ADMX 模板,所以我需要区分它们。
到目前为止,我已经找到了一些样本,但它们假定扩展程序事先知道将更改哪些注册表。但是,在我的例子中,我不希望扩展做出这种假设,我希望它检查更新的 GPO 并准确确定正在更改的内容。
任何指点将不胜感激。
所以在研究了 Chromium 代码之后(根据 amritanshu 评论),我找到了一种似乎可行的方法,但我还不明白可能存在哪些例外情况(如果有的话):
- 获取 pCurObj 的 lpFileSysPath 字段,这将是 UNC 路径。
- 将“\Registry.pol”附加到路径。
- 读取并解析生成的文件,这将是一个 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