получить базовое имя файла - PullRequest
2 голосов
/ 13 февраля 2012

Какие API ядра Windows я использую для получения базового имени файла пути из драйвера? (Я предполагаю, что мне не нужно искать строку для последнего '\')

например, получить bar.txt из c:\foo\bar.txt

1 Ответ

2 голосов
/ 13 февраля 2012

Вы можете рассмотреть возможность создания цикла с использованием 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.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...