sys: implement named stream open/close and related delete/share access issues

This commit is contained in:
Bill Zissimopoulos
2016-09-27 14:53:59 -07:00
parent 2ba46fdb71
commit 495fc7a5dc
7 changed files with 274 additions and 15 deletions

View File

@ -431,6 +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(
PDEVICE_OBJECT DeviceObject,
PUNICODE_STRING MainStreamName, BOOLEAN CaseSensitive,
ULONG Disposition,
PHANDLE PMainStreamHandle,
PFILE_OBJECT *PMainStreamObject);
NTSTATUS FspMainStreamClose(
HANDLE MainStreamHandle,
PFILE_OBJECT MainStreamObject);
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);
@ -896,7 +905,7 @@ typedef struct
UINT64 DirInfo;
UINT64 StreamInfo;
} FSP_FILE_NODE_NONPAGED;
typedef struct
typedef struct FSP_FILE_NODE
{
FSRTL_ADVANCED_FCB_HEADER Header;
FSP_FILE_NODE_NONPAGED *NonPaged;
@ -907,6 +916,8 @@ typedef struct
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 */
FSP_DEVICE_CONTEXT_BY_NAME_TABLE_ELEMENT ContextByNameElementStorage;
/* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource or Header.Resource */
UNICODE_STRING FileName;
@ -941,6 +952,7 @@ typedef struct
UINT64 IndexNumber;
BOOLEAN IsDirectory;
BOOLEAN IsRootDirectory;
struct FSP_FILE_NODE *MainStreamFileNode; /* this becomes invalid after our last desc close */
WCHAR FileNameBuf[];
} FSP_FILE_NODE;
typedef struct
@ -955,6 +967,9 @@ typedef struct
UINT64 DirectoryOffset;
UINT64 DirInfo;
ULONG DirInfoCacheHint;
/* stream support */
HANDLE MainStreamHandle;
PFILE_OBJECT MainStreamObject;
} FSP_FILE_DESC;
NTSTATUS FspFileNodeCopyList(PDEVICE_OBJECT DeviceObject,
FSP_FILE_NODE ***PFileNodes, PULONG PFileNodeCount);