作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为 IO 过滤器驱动程序编写内核模式测试。当我运行我的测试时,它们都通过了,但是如果我连续运行它们 3 次,测试就会开始失败。我将问题缩小到 ExAllocatePoolWithTag
一段时间后开始返回 STATUS_INSUFFICIENT_RESOURCES
。为了重现这个问题我写了一个专门的测试
static void __stdcall TestFoo_StressLoad()
{
int i;
for(i = 0; i < 100; i++)
{
CFIX_ASSERT(QueueInitialize() == 0); // Soon returns STATUS_INSUFFICIENT_RESOURCES
CFIX_ASSERT(QueueDestroy() == 0);
}
}
我的使用模式是:
ExAllocatePoolWithTag
)ExFreePoolWithTag
)我的问题是:如何正确使用ExAllocatePoolWithTag
这样它就不会返回 STATUS_INSUFFICIENT_RESOURCES
?
这是 QueueInitialize
和 QueueDestroy
的摘录
int QueueInitialize()
{
SIZE_T poolSize;
poolSize = sizeof(Event) * 1024;
Queue = (Event *)ExAllocatePoolWithTag(NonPagedPool, poolSize, '9gaT');
if( Queue == NULL )
return STATUS_INSUFFICIENT_RESOURCES;
return 0;
}
int QueueDestroy()
{
SIZE_T poolSize;
if(Queue != NULL)
{
poolSize = sizeof(Event) * 1024;
ExFreePoolWithTag((void *)Queue, '9gaT');
ProcessQueue = NULL;
return 0;
}
}
我正在使用 cfix 进行内核测试并在 Windows 7 x64 上运行测试。
最佳答案
我建议使用后备列表,因为缓冲区的大小总是相同的。这将显着减少内核堆碎片。
关于c - 如何正确使用 ExAllocatePoolWithTag 使其不返回 STATUS_INSUFFICIENT_RESOURCES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321750/
我正在为 IO 过滤器驱动程序编写内核模式测试。当我运行我的测试时,它们都通过了,但是如果我连续运行它们 3 次,测试就会开始失败。我将问题缩小到 ExAllocatePoolWithTag一段时间后
我是一名优秀的程序员,十分优秀!