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;
|
||||
} SetInformation;
|
||||
} 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_TRANSACT_REQ;
|
||||
typedef struct
|
||||
|
@ -54,7 +54,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||
VOID (*Cleanup)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode, BOOLEAN Delete);
|
||||
PVOID FileNode, PWSTR FileName, BOOLEAN Delete);
|
||||
VOID (*Close)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode);
|
||||
@ -77,7 +77,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode);
|
||||
PVOID FileNode, PWSTR FileName);
|
||||
NTSTATUS (*Rename)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode,
|
||||
|
@ -12,6 +12,7 @@ FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
|
||||
if (0 != FileSystem->Interface->Cleanup)
|
||||
FileSystem->Interface->Cleanup(FileSystem, Request,
|
||||
(PVOID)Request->Req.Cleanup.UserContext,
|
||||
0 != Request->FileName.Size ? (PWSTR)Request->Buffer : 0,
|
||||
0 != Request->Req.Cleanup.Delete);
|
||||
|
||||
return FspFileSystemSendCleanupResponse(FileSystem, Request);
|
||||
|
@ -79,7 +79,8 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
||||
if (0 != FileSystem->Interface->CanDelete)
|
||||
if (Request->Req.SetInformation.Info.Disposition.Delete)
|
||||
Result = FileSystem->Interface->CanDelete(FileSystem, Request,
|
||||
(PVOID)Request->Req.SetInformation.UserContext);
|
||||
(PVOID)Request->Req.SetInformation.UserContext,
|
||||
(PWSTR)Request->Buffer);
|
||||
else
|
||||
Result = STATUS_SUCCESS;
|
||||
break;
|
||||
|
@ -64,12 +64,12 @@ static NTSTATUS FspFsvolCleanup(
|
||||
FspFileNodeClose(FileNode, FileObject, &DeletePending);
|
||||
|
||||
/*
|
||||
* The FileNode is no longer in the Context table, therefore we do not
|
||||
* need to protect its FileName against renames!
|
||||
* If DeletePending is TRUE, the FileNode is no longer in the Context table,
|
||||
* 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 */
|
||||
FspIopCreateRequestMustSucceed(Irp, &FileNode->FileName, 0, &Request);
|
||||
FspIopCreateRequestMustSucceed(Irp, DeletePending ? &FileNode->FileName : 0, 0, &Request);
|
||||
Request->Kind = FspFsctlTransactCleanupKind;
|
||||
Request->Req.Cleanup.UserContext = FileNode->UserContext;
|
||||
Request->Req.Cleanup.UserContext2 = FileDesc->UserContext2;
|
||||
|
@ -7,6 +7,7 @@
|
||||
#undef _DEBUG
|
||||
#include "memfs.h"
|
||||
#include <map>
|
||||
#include <cassert>
|
||||
|
||||
#define MEMFS_SECTOR_SIZE 512
|
||||
#define MEMFS_SECTORS_PER_ALLOCATION_UNIT 1
|
||||
@ -375,11 +376,13 @@ NTSTATUS Overwrite(FSP_FILE_SYSTEM *FileSystem,
|
||||
|
||||
static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode0, BOOLEAN Delete)
|
||||
PVOID FileNode0, PWSTR FileName, BOOLEAN Delete)
|
||||
{
|
||||
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||
|
||||
assert(0 == FileName || 0 == wcscmp(FileNode->FileName, FileName));
|
||||
|
||||
if (Delete && !MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
||||
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
||||
}
|
||||
@ -484,11 +487,13 @@ NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
|
||||
|
||||
NTSTATUS CanDelete(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode0)
|
||||
PVOID FileNode0, PWSTR FileName)
|
||||
{
|
||||
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||
|
||||
assert(0 == FileName || 0 == wcscmp(FileNode->FileName, FileName));
|
||||
|
||||
if (MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
||||
return STATUS_DIRECTORY_NOT_EMPTY;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <tlib/testsuite.h>
|
||||
|
||||
int NtfsTests = 1;
|
||||
int NtfsTests = 0;
|
||||
int WinFspDiskTests = 1;
|
||||
int WinFspNetTests = 1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user