2015-04-22 13 views
5

Tôi đã sử dụng mã bên dưới nhưng nó cho tôi kết quả của đường dẫn tệp.Nhận đường dẫn tệp trong trình điều khiển minifilter

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 

Nhưng tôi muốn các đường dẫn tập tin như tôi

 
c:\Users\Filename.ext 

Làm thế nào tôi có thể có được điều này xin vui lòng giúp đỡ.

+1

Có lẽ một cách tốt hơn nhưng FltParseFileNameInformation() để có được con đường âm lượng, sau đó tìm kiếm từ danh sách kết quả cuộc gọi tới querydosdevice() cho mỗi getlogicaldrivestrings() - nhớ đường dẫn có thể không có ký tự ổ đĩa vật lý tương ứng –

Trả lời

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

Dưới đây là giải pháp tốt nhất, nhưng một lần nữa nó không sử dụng Drive letter.But sử dụng Khối lượng GUID

hơn: https://www.osr.com/nt-insider/2014-issue2/drive-letter-alternatives/

+0

Trình điều khiển kmdf và umdf của nó Tôi muốn điều tương tự cho trình điều khiển Minifilter bạn có thể vui lòng Cứu giúp. –

+0

FltGetVolumeGuidName - chức năng được sử dụng là một phần của minifilter. Nguồn: https: //msdn.microsoft.com/en-us/library/windows/hardware/ff543230%28v=vs.85%29.aspx – samjeba

Các vấn đề liên quan