mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 01:13:04 -05:00
sys: FspFileNodeRename
This commit is contained in:
parent
2a567effbf
commit
1b63e7d506
@ -643,7 +643,6 @@ VOID FspFileNodeDereference(FSP_FILE_NODE *FileNode)
|
|||||||
if (0 == RefCount)
|
if (0 == RefCount)
|
||||||
FspFileNodeDelete(FileNode);
|
FspFileNodeDelete(FileNode);
|
||||||
}
|
}
|
||||||
VOID FspFileNodeSetExternalFileName(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);
|
|
||||||
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
@ -655,6 +654,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
UINT32 GrantedAccess, UINT32 ShareAccess, NTSTATUS *PResult);
|
UINT32 GrantedAccess, UINT32 ShareAccess, NTSTATUS *PResult);
|
||||||
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
PBOOLEAN PDeletePending);
|
PBOOLEAN PDeletePending);
|
||||||
|
VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);
|
||||||
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
BOOLEAN FspFileNodeTryGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
BOOLEAN FspFileNodeTryGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,
|
VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
||||||
ULONG ExtraSize, FSP_FILE_NODE **PFileNode);
|
ULONG ExtraSize, FSP_FILE_NODE **PFileNode);
|
||||||
VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode);
|
VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode);
|
||||||
VOID FspFileNodeSetExternalFileName(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);
|
|
||||||
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
@ -21,6 +20,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
UINT32 GrantedAccess, UINT32 ShareAccess, NTSTATUS *PResult);
|
UINT32 GrantedAccess, UINT32 ShareAccess, NTSTATUS *PResult);
|
||||||
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
PBOOLEAN PDeletePending);
|
PBOOLEAN PDeletePending);
|
||||||
|
VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);
|
||||||
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
BOOLEAN FspFileNodeTryGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
BOOLEAN FspFileNodeTryGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,
|
VOID FspFileNodeSetFileInfo(FSP_FILE_NODE *FileNode, PFILE_OBJECT CcFileObject,
|
||||||
@ -33,7 +33,6 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
|||||||
#ifdef ALLOC_PRAGMA
|
#ifdef ALLOC_PRAGMA
|
||||||
#pragma alloc_text(PAGE, FspFileNodeCreate)
|
#pragma alloc_text(PAGE, FspFileNodeCreate)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeDelete)
|
#pragma alloc_text(PAGE, FspFileNodeDelete)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeSetExternalFileName)
|
|
||||||
#pragma alloc_text(PAGE, FspFileNodeAcquireSharedF)
|
#pragma alloc_text(PAGE, FspFileNodeAcquireSharedF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeTryAcquireSharedF)
|
#pragma alloc_text(PAGE, FspFileNodeTryAcquireSharedF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeAcquireExclusiveF)
|
#pragma alloc_text(PAGE, FspFileNodeAcquireExclusiveF)
|
||||||
@ -43,6 +42,7 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc);
|
|||||||
#pragma alloc_text(PAGE, FspFileNodeReleaseOwnerF)
|
#pragma alloc_text(PAGE, FspFileNodeReleaseOwnerF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeOpen)
|
#pragma alloc_text(PAGE, FspFileNodeOpen)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeClose)
|
#pragma alloc_text(PAGE, FspFileNodeClose)
|
||||||
|
#pragma alloc_text(PAGE, FspFileNodeRename)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeGetFileInfo)
|
#pragma alloc_text(PAGE, FspFileNodeGetFileInfo)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeTryGetFileInfo)
|
#pragma alloc_text(PAGE, FspFileNodeTryGetFileInfo)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeSetFileInfo)
|
#pragma alloc_text(PAGE, FspFileNodeSetFileInfo)
|
||||||
@ -112,17 +112,6 @@ VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode)
|
|||||||
FspFree(FileNode);
|
FspFree(FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspFileNodeSetExternalFileName(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName)
|
|
||||||
{
|
|
||||||
PAGED_CODE();
|
|
||||||
|
|
||||||
if (0 != FileNode->ExternalFileName)
|
|
||||||
FspFree(FileNode->ExternalFileName);
|
|
||||||
|
|
||||||
FileNode->FileName = *NewFileName;
|
|
||||||
FileNode->ExternalFileName = NewFileName->Buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
@ -372,6 +361,30 @@ VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
*PDeletePending = Deleted && DeletePending;
|
*PDeletePending = Deleted && DeletePending;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
PDEVICE_OBJECT FsvolDeviceObject = FileNode->FsvolDeviceObject;
|
||||||
|
BOOLEAN Deleted, Inserted;
|
||||||
|
|
||||||
|
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
||||||
|
|
||||||
|
FspFsvolDeviceDeleteContextByName(FsvolDeviceObject, &FileNode->FileName, &Deleted);
|
||||||
|
ASSERT(Deleted);
|
||||||
|
|
||||||
|
if (0 != FileNode->ExternalFileName)
|
||||||
|
FspFree(FileNode->ExternalFileName);
|
||||||
|
FileNode->FileName = *NewFileName;
|
||||||
|
FileNode->ExternalFileName = NewFileName->Buffer;
|
||||||
|
|
||||||
|
FspFsvolDeviceInsertContextByName(FsvolDeviceObject, &FileNode->FileName, FileNode,
|
||||||
|
&FileNode->ContextByNameElementStorage, &Inserted);
|
||||||
|
ASSERT(Inserted);
|
||||||
|
|
||||||
|
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
||||||
|
}
|
||||||
|
|
||||||
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo)
|
VOID FspFileNodeGetFileInfo(FSP_FILE_NODE *FileNode, FSP_FSCTL_FILE_INFO *FileInfo)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
@ -884,21 +884,13 @@ NTSTATUS FspFsvolSetRenameInformationSuccess(
|
|||||||
FSP_FILE_NODE *FileNode = FileObject->FsContext;
|
FSP_FILE_NODE *FileNode = FileObject->FsContext;
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
||||||
UNICODE_STRING NewFileName;
|
UNICODE_STRING NewFileName;
|
||||||
BOOLEAN Deleted, Inserted;
|
|
||||||
|
|
||||||
NewFileName.Length = NewFileName.MaximumLength =
|
NewFileName.Length = NewFileName.MaximumLength =
|
||||||
Request->Req.SetInformation.Info.Rename.NewFileName.Size - sizeof(WCHAR);
|
Request->Req.SetInformation.Info.Rename.NewFileName.Size - sizeof(WCHAR);
|
||||||
NewFileName.Buffer = FspAllocMustSucceed(NewFileName.Length);
|
NewFileName.Buffer = FspAllocMustSucceed(NewFileName.Length);
|
||||||
RtlCopyMemory(NewFileName.Buffer, Request->Buffer + Request->FileName.Size, NewFileName.Length);
|
RtlCopyMemory(NewFileName.Buffer, Request->Buffer + Request->FileName.Size, NewFileName.Length);
|
||||||
|
|
||||||
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
FspFileNodeRename(FileNode, &NewFileName);
|
||||||
FspFsvolDeviceDeleteContextByName(FsvolDeviceObject, &FileNode->FileName, &Deleted);
|
|
||||||
ASSERT(Deleted);
|
|
||||||
FspFileNodeSetExternalFileName(FileNode, &NewFileName);
|
|
||||||
FspFsvolDeviceInsertContextByName(FsvolDeviceObject, &FileNode->FileName, FileNode,
|
|
||||||
&FileNode->ContextByNameElementStorage, &Inserted);
|
|
||||||
ASSERT(Inserted);
|
|
||||||
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
|
||||||
|
|
||||||
FspIopRequestContext(Request, RequestFileNode) = 0;
|
FspIopRequestContext(Request, RequestFileNode) = 0;
|
||||||
FspIopRequestContext(Request, RequestDeviceObject) = 0;
|
FspIopRequestContext(Request, RequestDeviceObject) = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user