【问题标题】:Convert PUCHAR to PWCHAR in Minifilter在 Minifilter 中将 PUCHAR 转换为 PWCHAR
【发布时间】:2021-03-07 08:12:11
【问题描述】:

在我使用 Minifilter 之前,我将 PUCHAR 更改为 char*,然后使用 GetWC 将其更改为 wchar_t Like:

wchar_t* GetWC(const char* c)
{
    long cSize = strlen(c) + 1;
    wchar_t* wc = ExAllocatePool(POOL_FLAG_NON_PAGED, cSize);
    if (!wc)
    {
        return NULL;
    }
    mbstowcs(wc, c, cSize);
    return wc;
}
wchar_t* pathwchart = GetWC((char*)ntpath);

但是现在我使用Minifilter,当我在Minifilter的CallBacks中使用ExAllocatePool时,它会在蓝屏中返回一个SYSTEM_SERVICE_EXCEPTION 0X3B错误,那么我如何在Minifilter中将PUCHAR转换为PWCHAR。

【问题讨论】:

  • POOL_FLAG_NON_PAGED 这是来自POOL_FLAGS 的标志,用于另一个 api - ExAllocatePool2。这是 ExAllocatePool 中使用的 POOL_TYPE 的无效参数,并且在所有情况下都使用非分页池错误
  • 而你的cSize 对于wchar_t 字符串来说太小(总是)
  • 哦,谢谢你,我就用wchar_t* imgct = ExAllocatePool2(POOL_FLAG_PAGED, strlen(imagename) + 1, "CAMT");解决问题

标签: windows memory wdk windows-kernel minifilter


【解决方案1】:
wchar_t* GetWC(const char* c) {
    long cSize = strlen(c) + 1;
    wchar_t* wc = ExAllocatePool2(POOL_FLAG_PAGED, cSize,"TAGHERE");
    if (!wc)
    {
        return NULL;
    }
    mbstowcs(wc, c, cSize);
    return wc; }

只需将 ExAllocatePool 更改为 ExAllocatePool2 和页面标志即可解决问题

【讨论】:

  • 代码还是错了,cSize = strlen(c) + 1; 太小了。你需要什么ExAllocatePool2
  • 你的意思是我申请的内存太小了?我把code改成long cSize = (strlen(c) + 1) * 4;//现在我*sizeof(wchar_t)是batter?或者我可以用其他方法来代替这个更好
  • sizeof(wchar_t)==2,不是 4. 更正确的调用 RtlMultiByteToUnicodeSize
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
相关资源
最近更新 更多