FwpmSubLayerEnum0和FwpmFreeMemory0 [英] FwpmSubLayerEnum0 and 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屋!