mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
sys: renamed "main stream" to "main file"
This commit is contained in:
parent
5c3a82a074
commit
03df0a9c26
@ -168,7 +168,7 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
FSP_FILE_NODE *FileNode = FileObject->FsContext;
|
||||
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
|
||||
HANDLE MainStreamHandle;
|
||||
HANDLE MainFileHandle;
|
||||
|
||||
ASSERT(FileNode == FileDesc->FileNode);
|
||||
|
||||
@ -176,12 +176,12 @@ static VOID FspFsvolCleanupRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Co
|
||||
|
||||
FspFileNodeCleanupComplete(FileNode, FileObject);
|
||||
|
||||
MainStreamHandle = FileDesc->MainStreamHandle;
|
||||
FileDesc->MainStreamHandle = 0;
|
||||
MainFileHandle = FileDesc->MainFileHandle;
|
||||
FileDesc->MainFileHandle = 0;
|
||||
|
||||
FspFileNodeReleaseOwner(FileNode, Main, Request);
|
||||
|
||||
FspMainStreamClose(MainStreamHandle, 0);
|
||||
FspMainFileClose(MainFileHandle, 0);
|
||||
}
|
||||
|
||||
NTSTATUS FspCleanup(
|
||||
|
@ -77,7 +77,7 @@ static NTSTATUS FspFsvolClose(
|
||||
FspFileNodeClose(FileNode, FileObject);
|
||||
|
||||
/* delete the FileDesc and deref the FileNode; order is important (FileDesc has FileNode ref) */
|
||||
FspFileDescDelete(FileDesc); /* this will also close the MainStreamObject if any */
|
||||
FspFileDescDelete(FileDesc); /* this will also close the MainFileObject if any */
|
||||
FspFileNodeDereference(FileNode);
|
||||
|
||||
/*
|
||||
|
@ -147,7 +147,7 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
UNICODE_STRING MainStreamName = { 0 }, StreamPart = { 0 };
|
||||
UNICODE_STRING MainFileName = { 0 }, StreamPart = { 0 };
|
||||
PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
|
||||
ULONG CreateDisposition = (IrpSp->Parameters.Create.Options >> 24) & 0xff;
|
||||
ULONG CreateOptions = IrpSp->Parameters.Create.Options;
|
||||
@ -232,9 +232,9 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
(((PUINT8)StreamPart.Buffer + StreamPart.Length / sizeof(WCHAR)) -
|
||||
(PUINT8)FileName.Buffer - 1);
|
||||
|
||||
MainStreamName.Length = MainStreamName.MaximumLength = (USHORT)
|
||||
MainFileName.Length = MainFileName.MaximumLength = (USHORT)
|
||||
((PUINT8)StreamPart.Buffer - (PUINT8)FileName.Buffer - 1);
|
||||
MainStreamName.Buffer = FileName.Buffer;
|
||||
MainFileName.Buffer = FileName.Buffer;
|
||||
}
|
||||
|
||||
/* is this a relative or absolute open? */
|
||||
@ -351,19 +351,19 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
return Result;
|
||||
}
|
||||
|
||||
/* if we have a non-empty stream part, open the main stream */
|
||||
/* if we have a non-empty stream part, open the main file */
|
||||
if (0 != StreamPart.Buffer)
|
||||
{
|
||||
Result = FspMainStreamOpen(FsvolDeviceObject,
|
||||
&MainStreamName, CaseSensitive,
|
||||
Result = FspMainFileOpen(FsvolDeviceObject,
|
||||
&MainFileName, CaseSensitive,
|
||||
CreateDisposition,
|
||||
&FileDesc->MainStreamHandle,
|
||||
&FileDesc->MainStreamObject);
|
||||
&FileDesc->MainFileHandle,
|
||||
&FileDesc->MainFileObject);
|
||||
if (!NT_SUCCESS(Result))
|
||||
goto main_stream_exit;
|
||||
|
||||
/* check that the main stream is one we recognize */
|
||||
if (!FspFileNodeIsValid(FileDesc->MainStreamObject->FsContext))
|
||||
/* check that the main file is one we recognize */
|
||||
if (!FspFileNodeIsValid(FileDesc->MainFileObject->FsContext))
|
||||
{
|
||||
Result = STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
goto main_stream_exit;
|
||||
@ -383,8 +383,8 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
goto main_stream_exit;
|
||||
}
|
||||
|
||||
/* remember the the main stream node */
|
||||
FileNode->MainStreamFileNode = FileDesc->MainStreamObject->FsContext;
|
||||
/* remember the main file node */
|
||||
FileNode->MainFileNode = FileDesc->MainFileObject->FsContext;
|
||||
|
||||
Result = STATUS_SUCCESS;
|
||||
|
||||
|
@ -431,15 +431,15 @@ VOID FspUnicodePathSuffix(PUNICODE_STRING Path, PUNICODE_STRING Remain, PUNICODE
|
||||
NTSTATUS FspCreateGuid(GUID *Guid);
|
||||
NTSTATUS FspGetDeviceObjectPointer(PUNICODE_STRING ObjectName, ACCESS_MASK DesiredAccess,
|
||||
PULONG PFileNameIndex, PFILE_OBJECT *PFileObject, PDEVICE_OBJECT *PDeviceObject);
|
||||
NTSTATUS FspMainStreamOpen(
|
||||
NTSTATUS FspMainFileOpen(
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PUNICODE_STRING MainStreamName, BOOLEAN CaseSensitive,
|
||||
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
|
||||
ULONG Disposition,
|
||||
PHANDLE PMainStreamHandle,
|
||||
PFILE_OBJECT *PMainStreamObject);
|
||||
NTSTATUS FspMainStreamClose(
|
||||
HANDLE MainStreamHandle,
|
||||
PFILE_OBJECT MainStreamObject);
|
||||
PHANDLE PMainFileHandle,
|
||||
PFILE_OBJECT *PMainFileObject);
|
||||
NTSTATUS FspMainFileClose(
|
||||
HANDLE MainFileHandle,
|
||||
PFILE_OBJECT MainFileObject);
|
||||
NTSTATUS FspSendSetInformationIrp(PDEVICE_OBJECT DeviceObject, PFILE_OBJECT FileObject,
|
||||
FILE_INFORMATION_CLASS FileInformationClass, PVOID FileInformation, ULONG Length);
|
||||
NTSTATUS FspBufferUserBuffer(PIRP Irp, ULONG Length, LOCK_OPERATION Operation);
|
||||
@ -916,8 +916,8 @@ typedef struct FSP_FILE_NODE
|
||||
LONG OpenCount; /* ContextTable ref count */
|
||||
LONG HandleCount; /* HANDLE count (CREATE/CLEANUP) */
|
||||
SHARE_ACCESS ShareAccess;
|
||||
ULONG MainStreamDenyDeleteCount; /* number of times main stream is denying delete */
|
||||
ULONG StreamDenyDeleteCount; /* number of open streams that are denying delete */
|
||||
ULONG MainFileDenyDeleteCount; /* number of times main file is denying delete */
|
||||
ULONG StreamDenyDeleteCount; /* number of times open streams are denying delete */
|
||||
FSP_DEVICE_CONTEXT_BY_NAME_TABLE_ELEMENT ContextByNameElementStorage;
|
||||
/* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource or Header.Resource */
|
||||
UNICODE_STRING FileName;
|
||||
@ -952,7 +952,7 @@ typedef struct FSP_FILE_NODE
|
||||
UINT64 IndexNumber;
|
||||
BOOLEAN IsDirectory;
|
||||
BOOLEAN IsRootDirectory;
|
||||
struct FSP_FILE_NODE *MainStreamFileNode; /* this becomes invalid after our last desc close */
|
||||
struct FSP_FILE_NODE *MainFileNode; /* this becomes invalid after our last desc close */
|
||||
WCHAR FileNameBuf[];
|
||||
} FSP_FILE_NODE;
|
||||
typedef struct
|
||||
@ -968,8 +968,8 @@ typedef struct
|
||||
UINT64 DirInfo;
|
||||
ULONG DirInfoCacheHint;
|
||||
/* stream support */
|
||||
HANDLE MainStreamHandle;
|
||||
PFILE_OBJECT MainStreamObject;
|
||||
HANDLE MainFileHandle;
|
||||
PFILE_OBJECT MainFileObject;
|
||||
} FSP_FILE_DESC;
|
||||
NTSTATUS FspFileNodeCopyList(PDEVICE_OBJECT DeviceObject,
|
||||
FSP_FILE_NODE ***PFileNodes, PULONG PFileNodeCount);
|
||||
|
@ -427,13 +427,13 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
||||
|
||||
/*
|
||||
* If this is a named stream we must also check with our main stream.
|
||||
* Note that FileNode->MainStreamFileNode and OpenedFileNode->MainStreamFileNode
|
||||
* If this is a named stream we must also check with our main file.
|
||||
* Note that FileNode->MainFileNode and OpenedFileNode->MainFileNode
|
||||
* will always be the same.
|
||||
*/
|
||||
if (0 != FileNode->MainStreamFileNode)
|
||||
if (0 != FileNode->MainFileNode)
|
||||
{
|
||||
DeletePending = 0 != FileNode->MainStreamFileNode->DeletePending;
|
||||
DeletePending = 0 != FileNode->MainFileNode->DeletePending;
|
||||
MemoryBarrier();
|
||||
if (DeletePending)
|
||||
{
|
||||
@ -441,7 +441,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (0 < FileNode->MainStreamFileNode->MainStreamDenyDeleteCount)
|
||||
if (0 < FileNode->MainFileNode->MainFileDenyDeleteCount)
|
||||
{
|
||||
if (FlagOn(GrantedAccess, DELETE))
|
||||
{
|
||||
@ -474,7 +474,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||
* opening a prior FileNode that we found in the table.
|
||||
*/
|
||||
ASSERT(OpenedFileNode != FileNode);
|
||||
ASSERT(OpenedFileNode->MainStreamFileNode == FileNode->MainStreamFileNode);
|
||||
ASSERT(OpenedFileNode->MainFileNode == FileNode->MainFileNode);
|
||||
|
||||
DeletePending = 0 != OpenedFileNode->DeletePending;
|
||||
MemoryBarrier();
|
||||
@ -484,11 +484,11 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* if this is a main stream check whether there is a named stream that denies delete */
|
||||
/* if this is a main file check whether there is a named stream that denies delete */
|
||||
if (0 < OpenedFileNode->StreamDenyDeleteCount)
|
||||
{
|
||||
/* we must be the main stream! */
|
||||
ASSERT(0 == OpenedFileNode->MainStreamFileNode);
|
||||
/* we must be the main file! */
|
||||
ASSERT(0 == OpenedFileNode->MainFileNode);
|
||||
|
||||
if (FlagOn(GrantedAccess, DELETE))
|
||||
{
|
||||
@ -529,10 +529,10 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||
|
||||
if (FileObject->DeleteAccess && !FileObject->SharedDelete)
|
||||
{
|
||||
if (0 == OpenedFileNode->MainStreamFileNode)
|
||||
OpenedFileNode->MainStreamDenyDeleteCount++;
|
||||
if (0 == OpenedFileNode->MainFileNode)
|
||||
OpenedFileNode->MainFileDenyDeleteCount++;
|
||||
else
|
||||
OpenedFileNode->MainStreamFileNode->StreamDenyDeleteCount++;
|
||||
OpenedFileNode->MainFileNode->StreamDenyDeleteCount++;
|
||||
}
|
||||
|
||||
Result = STATUS_SUCCESS;
|
||||
@ -615,10 +615,10 @@ VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject
|
||||
|
||||
if (FileObject->DeleteAccess && !FileObject->SharedDelete)
|
||||
{
|
||||
if (0 == FileNode->MainStreamFileNode)
|
||||
FileNode->MainStreamDenyDeleteCount--;
|
||||
if (0 == FileNode->MainFileNode)
|
||||
FileNode->MainFileDenyDeleteCount--;
|
||||
else
|
||||
FileNode->MainStreamFileNode->StreamDenyDeleteCount--;
|
||||
FileNode->MainFileNode->StreamDenyDeleteCount--;
|
||||
}
|
||||
|
||||
IoRemoveShareAccess(FileObject, &FileNode->ShareAccess);
|
||||
@ -1153,7 +1153,7 @@ VOID FspFileDescDelete(FSP_FILE_DESC *FileDesc)
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
FspMainStreamClose(FileDesc->MainStreamHandle, FileDesc->MainStreamObject);
|
||||
FspMainFileClose(FileDesc->MainFileHandle, FileDesc->MainFileObject);
|
||||
|
||||
if (0 != FileDesc->DirectoryPattern.Buffer &&
|
||||
FspFileDescDirectoryPatternMatchAll != FileDesc->DirectoryPattern.Buffer)
|
||||
|
@ -23,15 +23,15 @@ VOID FspUnicodePathSuffix(PUNICODE_STRING Path, PUNICODE_STRING Remain, PUNICODE
|
||||
NTSTATUS FspCreateGuid(GUID *Guid);
|
||||
NTSTATUS FspGetDeviceObjectPointer(PUNICODE_STRING ObjectName, ACCESS_MASK DesiredAccess,
|
||||
PULONG PFileNameIndex, PFILE_OBJECT *PFileObject, PDEVICE_OBJECT *PDeviceObject);
|
||||
NTSTATUS FspMainStreamOpen(
|
||||
NTSTATUS FspMainFileOpen(
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PUNICODE_STRING MainStreamName, BOOLEAN CaseSensitive,
|
||||
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
|
||||
ULONG Disposition,
|
||||
PHANDLE PMainStreamHandle,
|
||||
PFILE_OBJECT *PMainStreamObject);
|
||||
NTSTATUS FspMainStreamClose(
|
||||
HANDLE MainStreamHandle,
|
||||
PFILE_OBJECT MainStreamObject);
|
||||
PHANDLE PMainFileHandle,
|
||||
PFILE_OBJECT *PMainFileObject);
|
||||
NTSTATUS FspMainFileClose(
|
||||
HANDLE MainFileHandle,
|
||||
PFILE_OBJECT MainFileObject);
|
||||
NTSTATUS FspSendSetInformationIrp(PDEVICE_OBJECT DeviceObject, PFILE_OBJECT FileObject,
|
||||
FILE_INFORMATION_CLASS FileInformationClass, PVOID FileInformation, ULONG Length);
|
||||
static NTSTATUS FspSendSetInformationIrpCompletion(
|
||||
@ -102,8 +102,8 @@ NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);
|
||||
#pragma alloc_text(PAGE, FspUnicodePathSuffix)
|
||||
#pragma alloc_text(PAGE, FspCreateGuid)
|
||||
#pragma alloc_text(PAGE, FspGetDeviceObjectPointer)
|
||||
#pragma alloc_text(PAGE, FspMainStreamOpen)
|
||||
#pragma alloc_text(PAGE, FspMainStreamClose)
|
||||
#pragma alloc_text(PAGE, FspMainFileOpen)
|
||||
#pragma alloc_text(PAGE, FspMainFileClose)
|
||||
#pragma alloc_text(PAGE, FspSendSetInformationIrp)
|
||||
#pragma alloc_text(PAGE, FspBufferUserBuffer)
|
||||
#pragma alloc_text(PAGE, FspLockUserBuffer)
|
||||
@ -384,25 +384,25 @@ NTSTATUS FspGetDeviceObjectPointer(PUNICODE_STRING ObjectName, ACCESS_MASK Desir
|
||||
return Result;
|
||||
}
|
||||
|
||||
NTSTATUS FspMainStreamOpen(
|
||||
NTSTATUS FspMainFileOpen(
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PUNICODE_STRING MainStreamName, BOOLEAN CaseSensitive,
|
||||
PUNICODE_STRING MainFileName, BOOLEAN CaseSensitive,
|
||||
ULONG Disposition,
|
||||
PHANDLE PMainStreamHandle,
|
||||
PFILE_OBJECT *PMainStreamObject)
|
||||
PHANDLE PMainFileHandle,
|
||||
PFILE_OBJECT *PMainFileObject)
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
IO_STATUS_BLOCK IoStatus;
|
||||
HANDLE MainStreamHandle;
|
||||
PFILE_OBJECT MainStreamObject;
|
||||
HANDLE MainFileHandle;
|
||||
PFILE_OBJECT MainFileObject;
|
||||
|
||||
/* assert that the supplied name is actually a main stream name */
|
||||
ASSERT(FspUnicodePathIsValid(MainStreamName, 0));
|
||||
/* assert that the supplied name is actually a main file name */
|
||||
ASSERT(FspUnicodePathIsValid(MainFileName, 0));
|
||||
|
||||
*PMainStreamHandle = 0;
|
||||
*PMainStreamObject = 0;
|
||||
*PMainFileHandle = 0;
|
||||
*PMainFileObject = 0;
|
||||
|
||||
switch (Disposition)
|
||||
{
|
||||
@ -422,13 +422,13 @@ NTSTATUS FspMainStreamOpen(
|
||||
|
||||
InitializeObjectAttributes(
|
||||
&ObjectAttributes,
|
||||
MainStreamName,
|
||||
MainFileName,
|
||||
OBJ_KERNEL_HANDLE | OBJ_FORCE_ACCESS_CHECK | (CaseSensitive ? 0 : OBJ_CASE_INSENSITIVE),
|
||||
0/*RootDirectory*/,
|
||||
0/*SecurityDescriptor*/);
|
||||
|
||||
IoStatus.Status = IoCreateFileSpecifyDeviceObjectHint(
|
||||
&MainStreamHandle,
|
||||
&MainFileHandle,
|
||||
FILE_READ_ATTRIBUTES,
|
||||
&ObjectAttributes,
|
||||
&IoStatus,
|
||||
@ -447,38 +447,38 @@ NTSTATUS FspMainStreamOpen(
|
||||
return IoStatus.Status;
|
||||
|
||||
IoStatus.Status = ObReferenceObjectByHandle(
|
||||
MainStreamHandle,
|
||||
MainFileHandle,
|
||||
0/*DesiredAccess*/,
|
||||
*IoFileObjectType,
|
||||
KernelMode,
|
||||
&MainStreamObject,
|
||||
&MainFileObject,
|
||||
0/*HandleInformation*/);
|
||||
if (!NT_SUCCESS(IoStatus.Status))
|
||||
{
|
||||
ObCloseHandle(MainStreamHandle, KernelMode);
|
||||
ObCloseHandle(MainFileHandle, KernelMode);
|
||||
return IoStatus.Status;
|
||||
}
|
||||
|
||||
*PMainStreamHandle = MainStreamHandle;
|
||||
*PMainStreamObject = MainStreamObject;
|
||||
*PMainFileHandle = MainFileHandle;
|
||||
*PMainFileObject = MainFileObject;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS FspMainStreamClose(
|
||||
HANDLE MainStreamHandle,
|
||||
PFILE_OBJECT MainStreamObject)
|
||||
NTSTATUS FspMainFileClose(
|
||||
HANDLE MainFileHandle,
|
||||
PFILE_OBJECT MainFileObject)
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
NTSTATUS Result = STATUS_SUCCESS;
|
||||
|
||||
if (0 != MainStreamObject)
|
||||
ObDereferenceObject(MainStreamObject);
|
||||
if (0 != MainFileObject)
|
||||
ObDereferenceObject(MainFileObject);
|
||||
|
||||
if (0 != MainStreamHandle)
|
||||
if (0 != MainFileHandle)
|
||||
{
|
||||
Result = ObCloseHandle(MainStreamHandle, KernelMode);
|
||||
Result = ObCloseHandle(MainFileHandle, KernelMode);
|
||||
if (!NT_SUCCESS(Result))
|
||||
DEBUGLOG("ObCloseHandle() = %s", NtStatusSym(Result));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user