2015-04-22 28 views
5

Ho usato il codice qui sotto ma mi sta dando un risultato del percorso del file.Ottieni il percorso del file nel driver del minifiltro

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 

ma voglio che il percorso del file come ho

 
c:\Users\Filename.ext 

Come posso ottenere questo si prega di aiuto.

+1

Probabilmente un modo migliore, ma FltParseFileNameInformation() per ottenere il percorso del volume, quindi una ricerca da un elenco dei risultati di una chiamata a querydosdevice() per ogni getlogicaldrivestrings() - ricordando il percorso potrebbe non avere una corrispondente lettera di unità fisica –

risposta

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

Ecco la soluzione migliore, ma la sua ancora una volta non si utilizza unità letter.But utilizzando Volume GUID

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

+0

La sua per i driver kmdf e umdf Voglio la stessa cosa per il driver Minifilter per favore Aiuto. –

+0

FltGetVolumeGuidName: la funzione utilizzata è parte di minifiltro. Fonte: https: //msdn.microsoft.com/en-us/library/windows/hardware/ff543230%28v=vs.85%29.aspx – samjeba