sys, dll: Request->FileName: testing

This commit is contained in:
Bill Zissimopoulos 2016-02-09 16:58:22 -08:00
parent 4648ace652
commit 4f5c19c73f
7 changed files with 17 additions and 10 deletions

View File

@ -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

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -1,6 +1,6 @@
#include <tlib/testsuite.h>
int NtfsTests = 1;
int NtfsTests = 0;
int WinFspDiskTests = 1;
int WinFspNetTests = 1;