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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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