获取文件基名

时间:2012-02-12 22:37:47

标签: windows kernel

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

例如从bar.txt

获取c:\foo\bar.txt

1 个答案:

答案 0 :(得分:2)

您可以考虑使用FsRtlDissectName构造循环,直到剩余的路径参数为空。

这样的东西可能会做你想要的(尽管你需要处理像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.
    }
}