mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: IRP_MJ_QUERY_INFORMATION
This commit is contained in:
parent
81bcbb9ea0
commit
a0b0f9600c
@ -343,7 +343,7 @@ static BOOLEAN FspFileNodeTryGetFileInfoNp(FSP_FILE_NODE_NONPAGED *FileNodeNp,
|
||||
BOOLEAN Result;
|
||||
|
||||
KeAcquireSpinLock(&FileNodeNp->InfoSpinLock, &Irql);
|
||||
if (0 < FileNodeNp->InfoExpirationTime && FileNodeNp->InfoExpirationTime < KeQueryInterruptTime())
|
||||
if (0 < FileNodeNp->InfoExpirationTime && KeQueryInterruptTime() < FileNodeNp->InfoExpirationTime)
|
||||
{
|
||||
FileInfoNp->FileAttributes = FileNodeNp->FileAttributes;
|
||||
FileInfoNp->ReparseTag = FileNodeNp->ReparseTag;
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <strsafe.h>
|
||||
#include "memfs.h"
|
||||
|
||||
void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout);
|
||||
void *memfs_start(ULONG Flags);
|
||||
void memfs_stop(void *data);
|
||||
PWSTR memfs_volumename(void *data);
|
||||
@ -12,9 +13,9 @@ extern int NtfsTests;
|
||||
extern int WinFspDiskTests;
|
||||
extern int WinFspNetTests;
|
||||
|
||||
void getinfo_dotest(ULONG Flags, PWSTR Prefix)
|
||||
void getinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
||||
{
|
||||
void *memfs = memfs_start(Flags);
|
||||
void *memfs = memfs_start_ex(Flags, FileInfoTimeout);
|
||||
|
||||
HANDLE Handle;
|
||||
BOOL Success;
|
||||
@ -125,12 +126,18 @@ void getinfo_test(void)
|
||||
{
|
||||
WCHAR DirBuf[MAX_PATH] = L"\\\\?\\";
|
||||
GetCurrentDirectoryW(MAX_PATH - 4, DirBuf + 4);
|
||||
getinfo_dotest(-1, DirBuf);
|
||||
getinfo_dotest(-1, DirBuf, 0);
|
||||
}
|
||||
if (WinFspDiskTests)
|
||||
getinfo_dotest(MemfsDisk, 0);
|
||||
{
|
||||
getinfo_dotest(MemfsDisk, 0, 0);
|
||||
getinfo_dotest(MemfsDisk, 0, 1000);
|
||||
}
|
||||
if (WinFspNetTests)
|
||||
getinfo_dotest(MemfsNet, L"\\\\memfs\\share");
|
||||
{
|
||||
getinfo_dotest(MemfsNet, L"\\\\memfs\\share", 0);
|
||||
getinfo_dotest(MemfsNet, L"\\\\memfs\\share", 1000);
|
||||
}
|
||||
}
|
||||
|
||||
void getinfo_tests(void)
|
||||
|
@ -18,7 +18,7 @@ static unsigned __stdcall memfs_thread(void *Memfs0)
|
||||
return FspFileSystemLoop(MemfsFileSystem(Memfs));
|
||||
}
|
||||
|
||||
void *memfs_start(ULONG Flags)
|
||||
void *memfs_start_ex(ULONG Flags, ULONG FileInfoTimeout)
|
||||
{
|
||||
if (-1 == Flags)
|
||||
return 0;
|
||||
@ -31,7 +31,7 @@ void *memfs_start(ULONG Flags)
|
||||
data = malloc(sizeof *data);
|
||||
ASSERT(0 != data);
|
||||
|
||||
Result = MemfsCreate(Flags, 1000, 65500, &Memfs);
|
||||
Result = MemfsCreate(Flags, FileInfoTimeout, 1000, 65500, &Memfs);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 != Memfs);
|
||||
|
||||
@ -44,6 +44,11 @@ void *memfs_start(ULONG Flags)
|
||||
return data;
|
||||
}
|
||||
|
||||
void *memfs_start(ULONG Flags)
|
||||
{
|
||||
return memfs_start_ex(Flags, 0);
|
||||
}
|
||||
|
||||
void memfs_stop(void *data)
|
||||
{
|
||||
if (0 == data)
|
||||
|
@ -399,7 +399,8 @@ static VOID MemfsLeaveOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_
|
||||
LeaveCriticalSection(&Memfs->Lock);
|
||||
}
|
||||
|
||||
NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize,
|
||||
NTSTATUS MemfsCreate(ULONG Flags, ULONG FileInfoTimeout,
|
||||
ULONG MaxFileNodes, ULONG MaxFileSize,
|
||||
MEMFS **PMemfs)
|
||||
{
|
||||
NTSTATUS Result;
|
||||
@ -429,6 +430,7 @@ NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize,
|
||||
|
||||
memset(&VolumeParams, 0, sizeof VolumeParams);
|
||||
VolumeParams.SectorSize = MEMFS_SECTOR_SIZE;
|
||||
VolumeParams.FileInfoTimeout = FileInfoTimeout;
|
||||
wcscpy_s(VolumeParams.Prefix, sizeof VolumeParams.Prefix / sizeof(WCHAR), L"\\memfs\\share");
|
||||
|
||||
Result = FspFileSystemCreate(DevicePath, &VolumeParams, &MemfsInterface, &Memfs->FileSystem);
|
||||
|
@ -23,7 +23,8 @@ enum
|
||||
MemfsThreadPool = 0x02,
|
||||
};
|
||||
|
||||
NTSTATUS MemfsCreate(ULONG Flags, ULONG MaxFileNodes, ULONG MaxFileSize,
|
||||
NTSTATUS MemfsCreate(ULONG Flags, ULONG FileInfoTimeout,
|
||||
ULONG MaxFileNodes, ULONG MaxFileSize,
|
||||
MEMFS **PMemfs);
|
||||
VOID MemfsDelete(MEMFS *Memfs);
|
||||
FSP_FILE_SYSTEM *MemfsFileSystem(MEMFS *Memfs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user