【问题标题】:How to remove filename from path in Windows File Filter Driver?如何从 Windows 文件过滤器驱动程序中的路径中删除文件名?
【发布时间】:2020-05-04 14:32:16
【问题描述】:

我可以通过以下方式在我的文件过滤器驱动程序中获取完整的文件名图像:

UNICODE_STRING fi = FltObjects->FileObject->FileName

所以,文件名将是:

\Device\HarddiskVolume5\tests\myfile.txt

我想从 fileName 中删除 myfile.txt。所以 fi 必须只有路径:

\Device\HarddiskVolume5\tests\

怎么做?

【问题讨论】:

  • 找到最后一个\符号并更改UNICODE_STRING的长度

标签: c windows file filter driver


【解决方案1】:

Microsoft开始,UNICODE_STRING是一个结构体,包括宽字符串的长度(Length)、分配给字符串的内存(MaximumLength)和指向实际宽字符串本身的指针(@ 987654325@)。所以我认为你可以这样做:

if (fi.Length > 0)
{
    PWSTR ptr = fi.Buffer;
    ptr += fi.Length - 1;
    // Scan backwards
    int i;
    while(*ptr != '\\' && ptr != fi.Buffer)
    {
        *ptr = '\0'; // Clear the filename
    }
}

操纵UNICODE_STRING,使其不包含文件名。

【讨论】:

  • 不幸的是,此代码不起作用,'while' 循环导致窗口挂起!。
  • 抱歉错误。它应该是fi.Bufferfi.Length,因为fi 是一个结构,而不是一个指向结构的指针。
【解决方案2】:

谢谢大家。 最后,我为我的问题编写了合适的驱动模型安全代码:

UNICODE_STRING GetPathOnly(UNICODE_STRING str)
{
    USHORT i = 0;
    if (str.Length > 0)
    {
        for (i = str.Length; i > 0; i--)
        {
            if (str.Buffer[i] == L'\\')
            {
                str.Length = (i+1)*2;
                break;
            }
        }
    }
    return str;
}

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多