windows - få filbasenavn

Indlæg af Hanne Mølgaard Plasc

Problem



Hvilke Windows-kernel-API'er bruger jeg til at hente basisfilnavnet på en sti fra en driver? (Jeg antager, at jeg ikke skal søge i strengen for den sidste '\')


fx opnå bar.txt fra c:fooar.txt

Bedste reference


Du kan overveje at opbygge en loop ved hjælp af FsRtlDissectName, indtil det resterende sti argument er tomt. [4]


Noget som dette kan gøre, hvad du vil (selv om du skal håndtere ting som ADS stream navne, samt tilføje korrekt fejl kontrol):


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.
    }
}