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