sys: FSP_FILE_DESC: rename QueryFileName to DirectoryPattern

This commit is contained in:
Bill Zissimopoulos 2016-03-21 13:26:36 -07:00
parent 85a2d61d31
commit 0095b3c1dc
3 changed files with 38 additions and 37 deletions

View File

@ -13,7 +13,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
BOOLEAN CanWait);
static NTSTATUS FspFsvolQueryDirectoryCopy(
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
PUNICODE_STRING QueryFileName, BOOLEAN CaseInsensitive,
PUNICODE_STRING DirectoryPattern, BOOLEAN CaseInsensitive,
PVOID DestBuf, PULONG PDestLen,
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize);
static NTSTATUS FspFsvolNotifyChangeDirectory(
@ -118,10 +118,10 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
if (!Success)
return FspWqRepostIrpWorkItem(Irp, FspFsvolQueryDirectoryRetry, 0);
InitialQuery = 0 == FileDesc->QueryFileName.Buffer;
InitialQuery = 0 == FileDesc->DirectoryPattern.Buffer;
/* set the QueryFileName in the FileDesc */
Result = FspFileDescResetQueryFileName(FileDesc, FileName, RestartScan);
/* set the DirectoryPattern in the FileDesc */
Result = FspFileDescResetDirectoryPattern(FileDesc, FileName, RestartScan);
if (!NT_SUCCESS(Result))
{
FspFileNodeRelease(FileNode, Full);
@ -130,9 +130,9 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
/* determine where to (re)start */
if (IndexSpecified)
FileDesc->QueryOffset = (UINT64)IrpSp->Parameters.QueryDirectory.FileIndex << 32;
FileDesc->DirectoryOffset = (UINT64)IrpSp->Parameters.QueryDirectory.FileIndex << 32;
else if (RestartScan)
FileDesc->QueryOffset = 0;
FileDesc->DirectoryOffset = 0;
FspFileNodeConvertExclusiveToShared(FileNode, Full);
@ -145,7 +145,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
BOOLEAN CaseInsensitive = 0 == FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch;
Result = FspFsvolQueryDirectoryCopy(FileInformationClass, ReturnSingleEntry,
&FileDesc->QueryFileName, CaseInsensitive,
&FileDesc->DirectoryPattern, CaseInsensitive,
Buffer, &Length, DirInfoBuffer, DirInfoSize);
FspFileNodeDereferenceDirInfo(DirInfoBuffer);
@ -184,7 +184,7 @@ static NTSTATUS FspFsvolQueryDirectoryRetry(
static NTSTATUS FspFsvolQueryDirectoryCopy(
FILE_INFORMATION_CLASS FileInformationClass, BOOLEAN ReturnSingleEntry,
PUNICODE_STRING QueryFileName, BOOLEAN CaseInsensitive,
PUNICODE_STRING DirectoryPattern, BOOLEAN CaseInsensitive,
PVOID DestBuf, PULONG PDestLen,
FSP_FSCTL_DIR_INFO *DirInfo, ULONG DirInfoSize)
{
@ -204,7 +204,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
PAGED_CODE();
BOOLEAN MatchAll = FspFileDescQueryFileNameMatchAll == QueryFileName->Buffer;
BOOLEAN MatchAll = FspFileDescDirectoryPatternMatchAll == DirectoryPattern->Buffer;
PVOID PrevDestBuf = 0;
PUINT8 DestBufBgn = (PUINT8)DestBuf;
PUINT8 DestBufEnd = (PUINT8)DestBuf + *PDestLen;
@ -250,7 +250,7 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
FileName.Length = FileName.MaximumLength = (USHORT)FileNameLen;
FileName.Buffer = DirInfo->FileNameBuf;
if (MatchAll || FsRtlIsNameInExpression(QueryFileName, &FileName, CaseInsensitive, 0))
if (MatchAll || FsRtlIsNameInExpression(DirectoryPattern, &FileName, CaseInsensitive, 0))
{
if ((PUINT8)DestBuf + FSP_FSCTL_ALIGN_UP(BaseInfoLen + FileNameLen, sizeof(LONGLONG)) >
DestBufEnd)

View File

@ -626,7 +626,7 @@ enum
FspFsvolDeviceSecurityCacheCapacity = 100,
FspFsvolDeviceSecurityCacheItemSizeMax = 4096,
FspFsvolDeviceDirInfoCacheCapacity = 100,
FspFsvolDeviceDirInfoCacheItemSizeMax = 16384,
FspFsvolDeviceDirInfoCacheItemSizeMax = FSP_FSCTL_ALIGN_UP(16384, PAGE_SIZE),
};
typedef struct
{
@ -834,8 +834,9 @@ typedef struct
FSP_FILE_NODE *FileNode;
UINT64 UserContext2;
BOOLEAN DeleteOnClose;
UNICODE_STRING QueryFileName;
UINT64 QueryOffset;
UNICODE_STRING DirectoryPattern;
UINT64 DirectoryOffset;
ULONG DirInfoCacheHint;
} FSP_FILE_DESC;
NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
ULONG ExtraSize, FSP_FILE_NODE **PFileNode);
@ -888,7 +889,7 @@ BOOLEAN FspFileNodeTrySetDirInfo(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG S
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
PUNICODE_STRING FileName, BOOLEAN Reset);
#define FspFileNodeAcquireShared(N,F) FspFileNodeAcquireSharedF(N, FspFileNodeAcquire ## F)
#define FspFileNodeTryAcquireShared(N,F) FspFileNodeTryAcquireSharedF(N, FspFileNodeAcquire ## F, FALSE)
@ -936,7 +937,7 @@ extern FAST_IO_DISPATCH FspFastIoDispatch;
extern CACHE_MANAGER_CALLBACKS FspCacheManagerCallbacks;
extern FSP_IOPREP_DISPATCH *FspIopPrepareFunction[];
extern FSP_IOCMPL_DISPATCH *FspIopCompleteFunction[];
extern WCHAR FspFileDescQueryFileNameMatchAll[];
extern WCHAR FspFileDescDirectoryPatternMatchAll[];
/* multiversion support */
typedef

View File

@ -45,7 +45,7 @@ BOOLEAN FspFileNodeTrySetDirInfo(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG S
VOID FspFileNodeInvalidateParentDirInfo(FSP_FILE_NODE *FileNode);
NTSTATUS FspFileDescCreate(FSP_FILE_DESC **PFileDesc);
VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
PUNICODE_STRING FileName, BOOLEAN Reset);
#ifdef ALLOC_PRAGMA
@ -79,7 +79,7 @@ NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
// !#pragma alloc_text(PAGE, FspFileNodeInvalidateParentDirInfo)
#pragma alloc_text(PAGE, FspFileDescCreate)
#pragma alloc_text(PAGE, FspFileDescDelete)
#pragma alloc_text(PAGE, FspFileDescResetQueryFileName)
#pragma alloc_text(PAGE, FspFileDescResetDirectoryPattern)
#endif
#define FSP_FILE_NODE_GET_FLAGS() \
@ -879,70 +879,70 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc)
{
PAGED_CODE();
if (0 != FileDesc->QueryFileName.Buffer &&
FspFileDescQueryFileNameMatchAll != FileDesc->QueryFileName.Buffer)
if (0 != FileDesc->DirectoryPattern.Buffer &&
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
{
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
FspFsvolDeviceExtension(FsvolDeviceObject);
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
FspFree(FileDesc->QueryFileName.Buffer);
FspFree(FileDesc->DirectoryPattern.Buffer);
else
RtlFreeUnicodeString(&FileDesc->QueryFileName);
RtlFreeUnicodeString(&FileDesc->DirectoryPattern);
}
FspFree(FileDesc);
}
NTSTATUS FspFileDescResetQueryFileName(FSP_FILE_DESC *FileDesc,
NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc,
PUNICODE_STRING FileName, BOOLEAN Reset)
{
PAGED_CODE();
if (Reset || 0 == FileDesc->QueryFileName.Buffer)
if (Reset || 0 == FileDesc->DirectoryPattern.Buffer)
{
PDEVICE_OBJECT FsvolDeviceObject = FileDesc->FileNode->FsvolDeviceObject;
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
FspFsvolDeviceExtension(FsvolDeviceObject);
UNICODE_STRING QueryFileName;
UNICODE_STRING DirectoryPattern;
if (0 == FileName || (sizeof(WCHAR) == FileName->Length && L'*' == FileName->Buffer[0]))
{
QueryFileName.Length = QueryFileName.MaximumLength = sizeof(WCHAR); /* L"*" */
QueryFileName.Buffer = FspFileDescQueryFileNameMatchAll;
DirectoryPattern.Length = DirectoryPattern.MaximumLength = sizeof(WCHAR); /* L"*" */
DirectoryPattern.Buffer = FspFileDescDirectoryPatternMatchAll;
}
else
{
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
{
QueryFileName.Length = QueryFileName.MaximumLength = FileName->Length;
QueryFileName.Buffer = FspAlloc(FileName->Length);
if (0 == QueryFileName.Buffer)
DirectoryPattern.Length = DirectoryPattern.MaximumLength = FileName->Length;
DirectoryPattern.Buffer = FspAlloc(FileName->Length);
if (0 == DirectoryPattern.Buffer)
return STATUS_INSUFFICIENT_RESOURCES;
RtlCopyMemory(QueryFileName.Buffer, FileName->Buffer, FileName->Length);
RtlCopyMemory(DirectoryPattern.Buffer, FileName->Buffer, FileName->Length);
}
else
{
NTSTATUS Result = RtlUpcaseUnicodeString(&QueryFileName, FileName, TRUE);
NTSTATUS Result = RtlUpcaseUnicodeString(&DirectoryPattern, FileName, TRUE);
if (NT_SUCCESS(Result))
return Result;
}
}
if (0 != FileDesc->QueryFileName.Buffer &&
FspFileDescQueryFileNameMatchAll != FileDesc->QueryFileName.Buffer)
if (0 != FileDesc->DirectoryPattern.Buffer &&
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
{
if (FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch)
FspFree(FileDesc->QueryFileName.Buffer);
FspFree(FileDesc->DirectoryPattern.Buffer);
else
RtlFreeUnicodeString(&FileDesc->QueryFileName);
RtlFreeUnicodeString(&FileDesc->DirectoryPattern);
}
FileDesc->QueryFileName = QueryFileName;
FileDesc->DirectoryPattern = DirectoryPattern;
}
return STATUS_SUCCESS;
}
WCHAR FspFileDescQueryFileNameMatchAll[] = L"*";
WCHAR FspFileDescDirectoryPatternMatchAll[] = L"*";