我正在开发一个minifilter来从内核模式重定向打开文件。
我通过更改Data->Iopb->TargetFileObject->FileName
来重定向文件名。但我不知道应该使用哪个标签来释放和分配这个unicode字符串缓冲区。
我用过:
pFileName = &Data->Iopb->TargetFileObject->FileName;
if (pFileName->Buffer != NULL)
ExFreePool(pFileName->Buffer);
pFileName->Length = gRedirectFullFilePath.Length;
pFileName->MaximumLength = pFileName->Length;
pFileName->Buffer = (PWCH) ExAllocatePool(NonPagedPool, pFileName->MaximumLength); // This is line 392
但是当我使用Code Analysis
构建项目时,我收到了如下警告:
C28159 Consider using another function instead Consider using 'ExAllocatePoolWithTag'
instead of 'ExAllocatePool'. Reason: No tag interferes with debugging.
FsMiniFilter fsminifilter.c 392
和
C28751 Banned usage of ExAllocatePool and its variants
Banned usage of ExAllocatePool and its variants:
ExAllocatePool is a banned API for improved error handling purposes.
FsMiniFilter fsminifilter.c 392
所以我必须改为ExAllocatePoolWithTag
pFileName->Buffer = (PWCH) ExAllocatePoolWithTag(NonPagedPool, pFileName->MaximumLength,
WHAT_IS_TAG_HERE);
我应该为WHAT_IS_TAG_HERE
使用什么?
(我使用的是32位Windows 7,MS Visual Studio 2012 Ultimate和WDK 8.0。)
答案 0 :(得分:0)
阅读此处的说明
TAG是唯一的签名,用于标识驱动程序组件的内存分配。因此,为您的驱动程序创建TAG,这将有助于调试器或验证程序识别您的驱动程序。