FwpmSubLayerEnum0和FwpmFreeMemory0 [英] FwpmSubLayerEnum0 and FwpmFreeMemory0

查看:332
本文介绍了FwpmSubLayerEnum0和FwpmFreeMemory0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个WFP标注驱动程序,它通过FwpmSubLayerEnum0枚举子图层。基于
的文档
http://msdn.microsoft.com/en-us/library/windows/hardware/aa364211(v=vs.85).aspx:


" The返回的条目数组(但不是单独的条目本身)必须通过调用FwpmFreeMemory0来释放。"


这是正确的吗?我没有看到在Windows 8 WFP采样器示例中这样做的位置。它的PrvCleanPolicy()函数不会释放任何枚举资源,除了模板和句柄。 另外,如果我调用FwpmFreeMemory0(),我会点击BSOD。


什么是正确的要释放由FwpmSubLayerEnum0的条目
参数引用的数组的操作?

解决方案

这是WFPSampler中的一个错误。 你应该释放这样的内存:

 ///枚举并刷新所有不属于WFPSampler的子层
status = HlprFwpmSubLayerCreateEnumHandle(engineHandle,
0,
& enumHandle);
HLPR_BAIL_ON_FAILURE(状态);

status = HlprFwpmSubLayerEnum(engineHandle,
enumHandle,
0xFFFFFFFF,
& ppSubLayers,
& numEntries);
if(status == NO_ERROR&&
ppSubLayers&&
numEntries)
{
for(UINT32 subLayerIndex = 0;
subLayerIndex < numEntries;
subLayerIndex ++)
{
if(!HlprGUIDsAreEqual(ppSubLayers [subLayerIndex] - > providerKey,
& WFPSAMPLER_PROVIDER))
HlprFwpmSubLayerDeleteByKey(engineHandle,
&(ppSubLayers [subLayerIndex] - > subLayerKey));
}

FwpmFreeMemory((VOID **)& ppSubLayers);

ppSubLayers = 0;

numEntries = 0;
}

修复应该是WFPSampler的下一滴。


谢谢,


I have a WFP callout driver that is enumerating sublayers through FwpmSubLayerEnum0. Based on the documentation at http://msdn.microsoft.com/en-us/library/windows/hardware/aa364211(v=vs.85).aspx:

"The returned array of entries (but not the individual entries themselves) must be freed by a call to FwpmFreeMemory0."

Is this correct? I don't see where this is done in the Windows 8 WFP sampler sample. It's PrvCleanPolicy() function does not free any enum resources except for the templates and handles. Also, if I do call FwpmFreeMemory0(), I hit a BSOD.

What is the correct action to take to free the array referenced by the entries argument of FwpmSubLayerEnum0?

解决方案

This is a bug in the WFPSampler.  You should be freeing the memory like this:

      /// Enumerate and flush all sublayers not owned by WFPSampler
      status = HlprFwpmSubLayerCreateEnumHandle(engineHandle,
                                                0,
                                                &enumHandle);
      HLPR_BAIL_ON_FAILURE(status);

      status = HlprFwpmSubLayerEnum(engineHandle,
                                    enumHandle,
                                    0xFFFFFFFF,
                                    &ppSubLayers,
                                    &numEntries);
      if(status == NO_ERROR &&
         ppSubLayers &&
         numEntries)
      {
         for(UINT32 subLayerIndex = 0;
             subLayerIndex < numEntries;
             subLayerIndex++)
         {
            if(!HlprGUIDsAreEqual(ppSubLayers[subLayerIndex]->providerKey,
                                  &WFPSAMPLER_PROVIDER))
               HlprFwpmSubLayerDeleteByKey(engineHandle,
                                           &(ppSubLayers[subLayerIndex]->subLayerKey));
         }

         FwpmFreeMemory((VOID**)&ppSubLayers);

         ppSubLayers = 0;

         numEntries = 0;
      }

The fix should be in teh next drop of the WFPSampler.

Thanks,


这篇关于FwpmSubLayerEnum0和FwpmFreeMemory0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆