mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: IRP_MJ_QUERY_DIRECTORY
This commit is contained in:
parent
594f2644f7
commit
c78e77cf52
@ -139,6 +139,8 @@ typedef struct
|
|||||||
UINT16 Size;
|
UINT16 Size;
|
||||||
FSP_FSCTL_FILE_INFO FileInfo;
|
FSP_FSCTL_FILE_INFO FileInfo;
|
||||||
UINT64 NextOffset;
|
UINT64 NextOffset;
|
||||||
|
/* padding to make struct as big as FILE_ID_BOTH_DIR_INFORMATION; allows for in-place copying */
|
||||||
|
UINT8 Padding[24];
|
||||||
WCHAR FileNameBuf[];
|
WCHAR FileNameBuf[];
|
||||||
} FSP_FSCTL_DIR_INFO;
|
} FSP_FSCTL_DIR_INFO;
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -73,12 +73,14 @@ static NTSTATUS FspFsvolQueryDirectoryCopy(
|
|||||||
#define FILL_INFO_BASE(TYPE, ...)\
|
#define FILL_INFO_BASE(TYPE, ...)\
|
||||||
do\
|
do\
|
||||||
{\
|
{\
|
||||||
TYPE *Info = DestBuf;\
|
TYPE InfoStruct = { 0 }, *Info = &InfoStruct;\
|
||||||
Info->NextEntryOffset = 0;\
|
Info->NextEntryOffset = 0;\
|
||||||
Info->FileIndex = FILE_INDEX_FROM_OFFSET(DirInfo->NextOffset);\
|
Info->FileIndex = FILE_INDEX_FROM_OFFSET(DirInfo->NextOffset);\
|
||||||
Info->FileNameLength = FileName.Length;\
|
Info->FileNameLength = FileName.Length;\
|
||||||
RtlCopyMemory(Info->FileName, DirInfo->FileNameBuf, FileName.Length);\
|
|
||||||
__VA_ARGS__\
|
__VA_ARGS__\
|
||||||
|
Info = DestBuf;\
|
||||||
|
*Info = InfoStruct;\
|
||||||
|
RtlCopyMemory(Info->FileName, DirInfo->FileNameBuf, FileName.Length);\
|
||||||
} while (0,0)
|
} while (0,0)
|
||||||
#define FILL_INFO(TYPE, ...)\
|
#define FILL_INFO(TYPE, ...)\
|
||||||
FILL_INFO_BASE(TYPE,\
|
FILL_INFO_BASE(TYPE,\
|
||||||
@ -301,7 +303,10 @@ static NTSTATUS FspFsvolQueryDirectoryCopyInPlace(
|
|||||||
UINT64 DirectoryOffset = FileDesc->DirectoryOffset;
|
UINT64 DirectoryOffset = FileDesc->DirectoryOffset;
|
||||||
|
|
||||||
ASSERT(DirInfo == DestBuf);
|
ASSERT(DirInfo == DestBuf);
|
||||||
ASSERT(sizeof(FSP_FSCTL_DIR_INFO) >= FIELD_OFFSET(FILE_ID_BOTH_DIR_INFORMATION, FileName));
|
static_assert(
|
||||||
|
FIELD_OFFSET(FSP_FSCTL_DIR_INFO, FileNameBuf) >=
|
||||||
|
FIELD_OFFSET(FILE_ID_BOTH_DIR_INFORMATION, FileName),
|
||||||
|
"FSP_FSCTL_DIR_INFO must be bigger than FILE_ID_BOTH_DIR_INFORMATION");
|
||||||
|
|
||||||
Result = FspFsvolQueryDirectoryCopy(DirectoryPattern, CaseInsensitive, &DirectoryOffset,
|
Result = FspFsvolQueryDirectoryCopy(DirectoryPattern, CaseInsensitive, &DirectoryOffset,
|
||||||
FileInformationClass, ReturnSingleEntry,
|
FileInformationClass, ReturnSingleEntry,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user