我要使用哪些Windows内核API从驱动程序获取路径的基本文件名? (我假设我不必在字符串中搜索最后一个'\')

例如从bar.txt获取c:\foo\bar.txt

最佳答案

您可以考虑使用FsRtlDissectName构造一个循环,直到剩下的path参数为空为止。

这样的事情可能会做您想要的(尽管您将需要处理诸如ADS流名称之类的事情,以及添加适当的错误检查):

void FetchFileName( IN PUNICODE_STRING pSourceString, OUT PUNICODE_STRING pFileName )
{
    UNICODE_STRING current = *pSourceString; // structure copy.
    UNICODE_STRING remaining;
    for(;;)
    {
        // Fetch the next path component.
        FsRtlDissectName( current, pFileName, &remaining );
        if( remaining.Length == 0 )
        {
            // Nothing left to parse.  pFilename will
            // contain the last filename found.
            break;
        }

        // Advance down the string.
        current = remaining;                // structure copy.
    }
}

关于windows - 获取文件基本名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9253371/

10-14 17:07