mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys, dll: Request->FileName: testing
This commit is contained in:
parent
4648ace652
commit
4f5c19c73f
@ -217,7 +217,7 @@ typedef struct
|
|||||||
} Info;
|
} Info;
|
||||||
} SetInformation;
|
} SetInformation;
|
||||||
} Req;
|
} Req;
|
||||||
FSP_FSCTL_TRANSACT_BUF FileName; /* {Create,Overwrite,Cleanup,SetInformation/{Disposition,Rename}} */
|
FSP_FSCTL_TRANSACT_BUF FileName; /* {Create,Cleanup,SetInformation/{Disposition,Rename}} */
|
||||||
FSP_FSCTL_DECLSPEC_ALIGN UINT8 Buffer[];
|
FSP_FSCTL_DECLSPEC_ALIGN UINT8 Buffer[];
|
||||||
} FSP_FSCTL_TRANSACT_REQ;
|
} FSP_FSCTL_TRANSACT_REQ;
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -54,7 +54,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
VOID (*Cleanup)(FSP_FILE_SYSTEM *FileSystem,
|
VOID (*Cleanup)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode, BOOLEAN Delete);
|
PVOID FileNode, PWSTR FileName, BOOLEAN Delete);
|
||||||
VOID (*Close)(FSP_FILE_SYSTEM *FileSystem,
|
VOID (*Close)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode);
|
PVOID FileNode);
|
||||||
@ -77,7 +77,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode);
|
PVOID FileNode, PWSTR FileName);
|
||||||
NTSTATUS (*Rename)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*Rename)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode,
|
PVOID FileNode,
|
||||||
|
@ -12,6 +12,7 @@ FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
if (0 != FileSystem->Interface->Cleanup)
|
if (0 != FileSystem->Interface->Cleanup)
|
||||||
FileSystem->Interface->Cleanup(FileSystem, Request,
|
FileSystem->Interface->Cleanup(FileSystem, Request,
|
||||||
(PVOID)Request->Req.Cleanup.UserContext,
|
(PVOID)Request->Req.Cleanup.UserContext,
|
||||||
|
0 != Request->FileName.Size ? (PWSTR)Request->Buffer : 0,
|
||||||
0 != Request->Req.Cleanup.Delete);
|
0 != Request->Req.Cleanup.Delete);
|
||||||
|
|
||||||
return FspFileSystemSendCleanupResponse(FileSystem, Request);
|
return FspFileSystemSendCleanupResponse(FileSystem, Request);
|
||||||
|
@ -79,7 +79,8 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
if (0 != FileSystem->Interface->CanDelete)
|
if (0 != FileSystem->Interface->CanDelete)
|
||||||
if (Request->Req.SetInformation.Info.Disposition.Delete)
|
if (Request->Req.SetInformation.Info.Disposition.Delete)
|
||||||
Result = FileSystem->Interface->CanDelete(FileSystem, Request,
|
Result = FileSystem->Interface->CanDelete(FileSystem, Request,
|
||||||
(PVOID)Request->Req.SetInformation.UserContext);
|
(PVOID)Request->Req.SetInformation.UserContext,
|
||||||
|
(PWSTR)Request->Buffer);
|
||||||
else
|
else
|
||||||
Result = STATUS_SUCCESS;
|
Result = STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
@ -64,12 +64,12 @@ static NTSTATUS FspFsvolCleanup(
|
|||||||
FspFileNodeClose(FileNode, FileObject, &DeletePending);
|
FspFileNodeClose(FileNode, FileObject, &DeletePending);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The FileNode is no longer in the Context table, therefore we do not
|
* If DeletePending is TRUE, the FileNode is no longer in the Context table,
|
||||||
* need to protect its FileName against renames!
|
* therefore we do not need to protect its FileName against renames!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* create the user-mode file system request; MustSucceed because IRP_MJ_CLEANUP cannot fail */
|
/* create the user-mode file system request; MustSucceed because IRP_MJ_CLEANUP cannot fail */
|
||||||
FspIopCreateRequestMustSucceed(Irp, &FileNode->FileName, 0, &Request);
|
FspIopCreateRequestMustSucceed(Irp, DeletePending ? &FileNode->FileName : 0, 0, &Request);
|
||||||
Request->Kind = FspFsctlTransactCleanupKind;
|
Request->Kind = FspFsctlTransactCleanupKind;
|
||||||
Request->Req.Cleanup.UserContext = FileNode->UserContext;
|
Request->Req.Cleanup.UserContext = FileNode->UserContext;
|
||||||
Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2;
|
Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#undef _DEBUG
|
#undef _DEBUG
|
||||||
#include "memfs.h"
|
#include "memfs.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
#define MEMFS_SECTOR_SIZE 512
|
#define MEMFS_SECTOR_SIZE 512
|
||||||
#define MEMFS_SECTORS_PER_ALLOCATION_UNIT 1
|
#define MEMFS_SECTORS_PER_ALLOCATION_UNIT 1
|
||||||
@ -375,11 +376,13 @@ NTSTATUS Overwrite(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
|
static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode0, BOOLEAN Delete)
|
PVOID FileNode0, PWSTR FileName, BOOLEAN Delete)
|
||||||
{
|
{
|
||||||
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
||||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||||
|
|
||||||
|
assert(0 == FileName || 0 == wcscmp(FileNode->FileName, FileName));
|
||||||
|
|
||||||
if (Delete && !MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
if (Delete && !MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
||||||
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
||||||
}
|
}
|
||||||
@ -484,11 +487,13 @@ NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode0)
|
PVOID FileNode0, PWSTR FileName)
|
||||||
{
|
{
|
||||||
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
||||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||||
|
|
||||||
|
assert(0 == FileName || 0 == wcscmp(FileNode->FileName, FileName));
|
||||||
|
|
||||||
if (MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
if (MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
||||||
return STATUS_DIRECTORY_NOT_EMPTY;
|
return STATUS_DIRECTORY_NOT_EMPTY;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include <tlib/testsuite.h>
|
#include <tlib/testsuite.h>
|
||||||
|
|
||||||
int NtfsTests = 1;
|
int NtfsTests = 0;
|
||||||
int WinFspDiskTests = 1;
|
int WinFspDiskTests = 1;
|
||||||
int WinFspNetTests = 1;
|
int WinFspNetTests = 1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user