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

View File

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

View File

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