PFIND_DATA_HANDLE FindDataHandle;
PFIND_FILE_DATA FindFileData;
- UNICODE_STRING NtPath, FilePattern;
+ UNICODE_STRING NtPath, FilePattern, FileName;
PWSTR NtPathBuffer;
RTL_RELATIVE_NAME_U RelativePath;
ULONG DeviceNameInfo = 0;
IO_STATUS_BLOCK IoStatusBlock;
HANDLE hDirectory = NULL;
+ BOOLEAN HadADot = FALSE;
+
/*
* May represent many FILE_BOTH_DIR_INFORMATION
* or many FILE_FULL_DIR_INFORMATION structures.
return INVALID_HANDLE_VALUE;
}
+ RtlInitUnicodeString(&FileName, lpFileName);
+ if (FileName.Length != 0 && FileName.Buffer[FileName.Length / sizeof(WCHAR) - 1] == L'.')
+ {
+ HadADot = TRUE;
+ }
+
if (!RtlDosPathNameToNtPathName_U(lpFileName,
&NtPath,
(PCWSTR*)&FilePattern.Buffer,
PatternIndex++;
}
+
+ /* Handle partial wc if our last dot was eaten */
+ if (HadADot)
+ {
+ if (FilePattern.Buffer[FilePattern.Length / sizeof(WCHAR) - 1] == L'*')
+ {
+ FilePattern.Buffer[FilePattern.Length / sizeof(WCHAR) - 1] = L'<';
+ }
+ }
}
Status = NtQueryDirectoryFile(hDirectory,