2015-04-22 8 views
5

abrufen Ich habe den folgenden Code verwendet, er gibt mir jedoch ein Ergebnis des Dateipfads.Dateipfad im Minifiltertreiber

status = FltGetFileNameInformation(Data, 
     FLT_FILE_NAME_OPENED | 
     FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP, 
     &nameInfo); 
    DbgPrint("\n Filename : %wZ",&nameInfo->Name); 
 
\Device\HarddiskVolume1\Users\filename.ext 

Aber ich möchte den Dateipfad als ich

 
c:\Users\Filename.ext 

Wie kann ich das bitte helfen bekommen.

+1

Eine bessere Methode aber FltParseFileNameInformation() die Lautstärke Weg zu bekommen, dann ein Nachschlagen aus einer Liste der Ergebnisse eines Aufrufs zu querydosdevice() für jeden getlogicaldrivestrings() - Erinnerung an den Pfad möglicherweise keinen entsprechenden physischen Laufwerksbuchstaben –

Antwort

1
NameLength = (USHORT)dosName.MaximumLength + Data->Iopb->TargetFileObject->FileName.MaximumLength + 2; 
NameBuffer = ExAllocatePoolWithTag(PagedPool,NameLength,NC_MAPPING_TAG); 
NameString.Length = 0; 
NameString.MaximumLength = NameLength; 
NameString.Buffer = NameBuffer; 
RtlCopyUnicodeString(&NameString, &dosName); 
RtlAppendUnicodeStringToString(&NameString, &Data->Iopb->TargetFileObject->FileName); 
0

Hier ist die beste Lösung, aber es ist wieder mit nicht-Laufwerk letter.But GUID Volume mit

mehr: https://www.osr.com/nt-insider/2014-issue2/drive-letter-alternatives/

+0

Seine für kmdf und umdf Treiber möchte ich das gleiche für Minifilter Treiber können Sie bitte Hilfe. –

+0

FltGetVolumeGuidName - Funktion, die verwendet wurde, ist Teil des Minifilters. Quelle: https: //msdn.microsoft.com/en-us/library/windows/hardware/ff543230%28v=vs.85%29.aspx – samjeba