Minifilter哪个标签应该与文件系统字符串缓冲区一起使用?

时间:2015-02-27 02:33:49

标签: c windows visual-studio unicode-string minifilter

我正在开发一个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。)

1 个答案:

答案 0 :(得分:0)

阅读此处的说明

ExAllocatePoolWithTag routine

TAG是唯一的签名,用于标识驱动程序组件的内存分配。因此,为您的驱动程序创建TAG,这将有助于调试器或验证程序识别您的驱动程序。