佚名通过本文主要向大家介绍了内存卡出口贸易问题,内存条兼容问题,电脑内存条兼容问题,内存条出现问题,笔记本内存条兼容问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 有关内存释放的问题??
描述:
为什么ExFreePool(subStr.Buffer); 释放内存会失败。还请详细讲解下。
解决方案1:
描述:
NTSTATUS Str_SubString(IN OUT PUNICODE_STRING SourceString, IN ULONG Start, IN ULONG Length, OUT PUNICODE_STRING SubString)
{
NTSTATUS status = STATUS_SUCCESS;
UNICODE_STRING subStr;
subStr.Buffer = (PWSTR)ExAllocatePool(PagedPool, Length + 2);
RtlCopyMemory(subStr.Buffer, SourceString->Buffer + Start, Length*sizeof(WCHAR));
subStr.Length = (USHORT)Length*sizeof(WCHAR);
subStr.MaximumLength = subStr.Length + 2;
SubString = &subStr;
ExFreePool(subStr.Buffer); //
return status;
}
为什么ExFreePool(subStr.Buffer); 释放内存会失败。还请详细讲解下。
解决方案1:
第一:看该块内存受否被使用
第二:看用到的函数是否正确
第三:看提示什么信息,然后定位到其中去寻找答案
楼主可使用 ExAllocatePoolWithTag 和 ExFreePool这两个函数处理内核内存!
WDK 描述:
Callers of ExFreePool must be running at IRQL <= DISPATCH_LEVEL. A caller at DISPATCH_LEVEL must have specified a NonPagedXxx PoolType when the memory was allocated. Otherwise, the caller must be running at IRQL <= APC_LEVEL.
也就是说只要是在ExAllocatePoolWithTag 分配内存时是使用 NonPagedPool进行的非分页内存分配,在DISPATCH_LEVEL 进行释放是可以的!
不知道这个是否能够帮你解决问题~