38 #pragma alloc_text(PAGE, RfsdLookupFileName) 39 #pragma alloc_text(PAGE, RfsdScanDir) 40 #pragma alloc_text(PAGE, RfsdCreateFile) 41 #pragma alloc_text(PAGE, RfsdCreateVolume) 42 #pragma alloc_text(PAGE, RfsdCreate) 44 #pragma alloc_text(PAGE, RfsdCreateInode) 45 #pragma alloc_text(PAGE, RfsdSupersedeOrOverWriteFile) 46 #endif // !RFSD_READ_ONLY 47 #pragma alloc_text(PAGE, RfsdScanDirCallback) 79 }
else if (FullFileName->Buffer[0] ==
L'\\') {
81 ParentMcb =
Vcb->McbTree;
90 if (FullFileName->Length == 0) {
95 if (FullFileName->Length == 2 && FullFileName->Buffer[0] ==
L'\\') {
100 *RfsdMcb =
Vcb->McbTree;
106 while (bRun && i < FullFileName->
Length/2) {
114 while(i < FullFileName->
Length/2 && FullFileName->Buffer[
i] ==
L'\\')
i++;
120 while(i < FullFileName->
Length/2 && (FullFileName->Buffer[
i] !=
L'\\'))
i++;
143 if (i < FullFileName->
Length/2) {
161 if (i < FullFileName->
Length/2) {
186 #if 0 // disabled by ffs too 188 RFSD_FEATURE_INCOMPAT_FILETYPE)) {
189 if (rfsd_dir.file_type == RFSD_FT_DIR)
219 Mcb->Key.k_offset =
Mcb->Key.k_type = 0;
236 Mcb->Key.k_dir_id,
Mcb->Key.k_objectid));
334 BOOLEAN NoIntermediateBuffering;
389 VcbResourceAcquired =
TRUE;
391 if (
Irp->Overlay.AllocationSize.HighPart) {
448 RfsdPrint((
DBG_INFO,
"RfsdCreateFile: %S (NameLen=%xh) Paging=%xh Option: %xh.\n",
488 if (PathName.
Buffer[0] !=
L'\\') {
492 ParentMcb =
Vcb->McbTree;
500 if (((RemainName.
Length != 0) && (RemainName.
Buffer[0] ==
L'\\')) ||
506 if (RemainName.
Length != 0) {
523 PathName = RemainName;
560 bParentFcbCreated =
TRUE;
596 if ( (RealName.
Length == 0x10) &&
640 #if DISABLED // dirctl.c [ see also in cleanup.c ] 662 }
else if (OpenTargetDirectory) {
692 if (OpenTargetDirectory) {
711 RfsdMcb = RfsdMcb->
Parent;
732 if (NonDirectoryFile) {
744 if (OpenTargetDirectory) {
762 bFcbAllocated =
TRUE;
780 #if DISABLED // ONLY FOR WRITE SUPPORT? 793 EntryName.
Buffer = &NameBuf[0];
806 EntryName.
Buffer = &NameBuf[0];
807 NameBuf[0] = NameBuf[1] = (
USHORT)
'.';
811 Fcb->RfsdMcb->Parent->Inode,
815 Fcb->RfsdMcb->Parent->Inode,
822 &(
Irp->Overlay.AllocationSize));
870 (
Fcb->SectionObject.DataSectionObject !=
NULL)) {
922 Fcb->ReferenceCount++;
925 Fcb->NonCachedOpenCount++;
928 Vcb->OpenFileHandleCount++;
929 Vcb->ReferenceCount++;
1000 &(
Irp->Overlay.AllocationSize));
1008 #if DISABLED // dirctl.c 1033 if (bParentFcbCreated) {
1037 if (VcbResourceAcquired) {
1043 if (!bFcbAllocated) {
1094 if (OpenTargetDirectory) {
1105 if (
Vcb->OpenHandleCount > 0) {
1140 Vcb->ReferenceCount++;
1141 Vcb->OpenHandleCount++;
1170 Irp = IrpContext->Irp;
1212 if (!IrpContext->ExceptionInProgress) {
1248 "RfsdCreateInode: %S in %S(Key=%x,%xh)\n",
1286 if (
Type == RFSD_FT_DIR) {
1289 }
else if (
Type == RFSD_FT_REG_FILE) {
1337 Fcb->Inode->i_size = 0;
1340 KdPrint((
"Reminder: Fcb->Inode->i_size_high = 0;\n"));
1347 Fcb->Inode->i_atime =
1355 KdPrint((
"Reminder: Fcb->Inode->i_size_high = 0;\n"));
1372 #endif // !RFSD_READ_ONLY 1393 ULONG idxDentryInSpan = 0;
1395 USHORT InodeFileNameLength;
1417 ( &pDirectoryItemHeader ),
1424 KdPrint((
"Block %i did not contain the appropriate diritem header\n", BlockNumber));
1438 while (!bFound && (idxDentryInSpan < pDirectoryItemHeader->
u.ih_entry_count) ) {
1450 {
goto ProcessNextEntry; }
1478 InodeFileName.
Length = 0;
1510 pPrevDentry = pCurrentDentry;
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
#define KeQuerySystemTime(t)
#define STATUS_OBJECT_NAME_COLLISION
#define ExGetCurrentResourceThread()
BOOLEAN NTAPI MmCanFileBeTruncated(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN PLARGE_INTEGER NewFileSize)
BOOLEAN NTAPI CcPurgeCacheSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN UninitializeCacheMaps)
#define STATUS_DELETE_PENDING
NTSTATUS RfsdAddEntry(IN PRFSD_IRP_CONTEXT IrpContext, IN PRFSD_VCB Vcb, IN PRFSD_FCB Dcb, IN ULONG FileType, IN ULONG Inode, IN PUNICODE_STRING FileName)
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
NTSTATUS RfsdExpandFile(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, PRFSD_FCB Fcb, PLARGE_INTEGER AllocationSize)
#define FILE_SEQUENTIAL_ONLY
NTSTATUS RfsdCompleteIrpContext(IN PRFSD_IRP_CONTEXT IrpContext, IN NTSTATUS Status)
#define STATUS_FILE_IS_A_DIRECTORY
#define SL_CASE_SENSITIVE
#define STATUS_INSUFFICIENT_RESOURCES
#define FILE_ATTRIBUTE_TEMPORARY
_In_ ULONG _In_ ULONG _In_ ULONG Length
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR _In_ ULONGLONG _In_ ULONGLONG _In_opt_ PEVENT_FILTER_DESCRIPTOR _Inout_opt_ PVOID CallbackContext
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
NTSTATUS RfsdScanDirCallback(ULONG BlockNumber, PVOID pContext)
#define STATUS_NO_SUCH_MEMBER
#define __drv_mustHoldCriticalRegion
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
FSRTL_ADVANCED_FCB_HEADER Header
OUT PRFSD_DENTRY_HEAD pMatchingDentry
Running count of the dentries processed, so that MatchingIndex will be relative to all dentry spans.
NTSTATUS RfsdFindItemHeaderInBlock(IN PRFSD_VCB Vcb, IN PRFSD_KEY_IN_MEMORY pKey, IN PUCHAR pBlockBuffer, OUT PRFSD_ITEM_HEAD *ppTargetItemHeader, IN RFSD_KEY_COMPARISON(*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY))
#define SL_OPEN_PAGING_FILE
#define STATUS_INVALID_PARAMETER
struct _RFSD_SCANDIR_CALLBACK_CONTEXT RFSD_SCANDIR_CALLBACK_CONTEXT
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
VOID RfsdNotifyReportChange(IN PRFSD_IRP_CONTEXT IrpContext, IN PRFSD_VCB Vcb, IN PRFSD_FCB Fcb, IN ULONG Filter, IN ULONG Action)
if(OpenRequiringOplock &&(Iosb.Status==STATUS_SUCCESS))
#define FILE_DIRECTORY_FILE
#define STATUS_EVENT_DONE
NTSTATUS RfsdSupersedeOrOverWriteFile(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, PRFSD_FCB Fcb, ULONG Disposition)
PUCHAR RfsdAllocateAndLoadBlock(IN PRFSD_VCB Vcb, IN ULONG BlockIndex)
#define RFSD_IS_ROOT_KEY(x)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG CreateDisposition
NTSTATUS RfsdFlushVolume(IN PRFSD_VCB Vcb, BOOLEAN bShutDown)
#define FILE_NOTIFY_CHANGE_SIZE
#define FILE_NOTIFY_CHANGE_LAST_WRITE
NTSTATUS RfsdFlushFiles(IN PRFSD_VCB Vcb, BOOLEAN bShutDown)
#define FILE_NOTIFY_CHANGE_FILE_NAME
VOID NTAPI IoSetShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, OUT PSHARE_ACCESS ShareAccess)
ULONG RfsdOEMToUnicodeSize(IN PANSI_STRING Oem)
OUT PULONG pMatchingIndex
If a matching dentry is found, the callback will fill this structure with it.
#define FO_NO_INTERMEDIATE_BUFFERING
NTSTATUS RfsdNewInode(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, ULONG GroupHint, ULONG mode, PULONG Inode)
NTSTATUS RfsdParseFilesystemTree(IN PRFSD_VCB Vcb, IN PRFSD_KEY_IN_MEMORY Key, IN ULONG StartingBlockNumber, IN RFSD_CALLBACK(fpDirectoryCallback), IN PVOID Context)
#define FILE_NOTIFY_CHANGE_DIR_NAME
BOOLEAN NTAPI FsRtlDoesNameContainWildCards(IN PUNICODE_STRING Name)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT ShareAccess
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
#define FCB_DELETE_PENDING
#define FILE_WRITE_ATTRIBUTES
IN PUNICODE_STRING pTargetFilename
#define FILE_OPEN_BY_FILE_ID
#define RtlMoveMemory(Destination, Source, Length)
PDEVICE_OBJECT DeviceObject
#define FCB_DELETE_ON_CLOSE
struct reiserfs_de_head * PRFSD_DENTRY_HEAD
PUCHAR RfsdNtStatusToString(IN NTSTATUS Status)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
_In_ PDEVICE_OBJECT DeviceObject
struct _RFSD_FCB * PRFSD_FCB
return STATUS_NOT_IMPLEMENTED
NTSTATUS RfsdLookupFileName(IN PRFSD_VCB Vcb, IN PUNICODE_STRING FullFileName, IN PRFSD_MCB ParentMcb, OUT PRFSD_MCB *RfsdMcb, IN OUT PRFSD_INODE Inode)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB Vcb
#define FILE_NO_INTERMEDIATE_BUFFERING
#define STATUS_NOT_A_DIRECTORY
#define STATUS_SHARING_VIOLATION
#define FILE_NO_EA_KNOWLEDGE
#define RfsdSetReadOnly(m)
#define FILE_ACTION_MODIFIED
__drv_mustHoldCriticalRegion NTSTATUS RfsdCreate(IN PRFSD_IRP_CONTEXT IrpContext)
#define FILE_OVERWRITE_IF
RFSD_IDENTIFIER_TYPE Type
__drv_mustHoldCriticalRegion NTSTATUS RfsdCreateFile(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb)
#define STATUS_MEDIA_WRITE_PROTECTED
#define STATUS_USER_MAPPED_FILE
struct _RFSD_SCANDIR_CALLBACK_CONTEXT * PRFSD_SCANDIR_CALLBACK_CONTEXT
#define STATUS_FILE_DELETED
#define FILE_ATTRIBUTE_DIRECTORY
VOID RfsdUnpinRepinnedBcbs(IN PRFSD_IRP_CONTEXT IrpContext)
struct _RFSD_VCB * PRFSD_VCB
IN PRFSD_KEY_IN_MEMORY pDirectoryKey
#define FILE_DELETE_ON_CLOSE
PRFSD_MCB RfsdAllocateMcb(PRFSD_VCB, PUNICODE_STRING FileName, ULONG FileAttr)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG _Out_opt_ PULONG CreateDisposition
#define NT_SUCCESS(StatCode)
VOID NTAPI FsRtlDissectName(IN UNICODE_STRING Name, OUT PUNICODE_STRING FirstPart, OUT PUNICODE_STRING RemainingPart)
BOOLEAN NTAPI MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN MMFLUSH_TYPE FlushType)
_In_ WDFCOLLECTION _In_ ULONG Index
struct _DEVICE_OBJECT * RealDevice
#define FILE_ATTRIBUTE_READONLY
#define STATUS_OBJECT_PATH_NOT_FOUND
BOOLEAN RfsdSaveInode(IN PRFSD_IRP_CONTEXT IrpContext, IN PRFSD_VCB Vcb, IN ULONG inode, IN PRFSD_INODE Inode)
#define STATUS_ACCESS_DENIED
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
_In_ ULONGLONG DirectoryKey
struct _RFSD_FCBVCB * PRFSD_FCBVCB
NTSTATUS RfsdScanDir(IN PRFSD_VCB Vcb, IN PRFSD_MCB ParentMcb, IN PUNICODE_STRING FileName, IN OUT PULONG Index, IN OUT PRFSD_DENTRY_HEAD rfsd_dir)
#define FO_CACHE_SUPPORTED
ULONG RfsdInodeTime(IN LARGE_INTEGER SysTime)
#define DBG_TRACE(fmt,...)
#define STATUS_UNSUCCESSFUL
#define VCB_WRITE_PROTECTED
#define ExAllocatePoolWithTag(hernya, size, tag)
#define FILE_DOES_NOT_EXIST
#define STATUS_CANNOT_DELETE
#define FILE_ATTRIBUTE_NORMAL
PRFSD_MCB RfsdSearchMcb(PRFSD_VCB Vcb, PRFSD_MCB Parent, PUNICODE_STRING FileName)
#define VCB_DISMOUNT_PENDING
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
#define FCB_FILE_MODIFIED
#define FILE_NON_DIRECTORY_FILE
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
ClearFlag(Dirent->Flags, DIRENT_FLAG_NOT_PERSISTENT)
BOOLEAN RfsdLoadInode(IN PRFSD_VCB Vcb, IN PRFSD_KEY_IN_MEMORY pKey, IN OUT PRFSD_INODE Inode)
#define RfsdRaiseStatus(IRPCONTEXT, STATUS)
IN PFCB IN PFILE_OBJECT FileObject IN ULONG AllocationSize
NTSTATUS NTAPI IoCheckShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess, IN BOOLEAN Update)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
struct _FileName FileName
#define SL_OPEN_TARGET_DIRECTORY
#define STATUS_OBJECT_NAME_NOT_FOUND
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
NTSTATUS RfsdTruncateFile(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, PRFSD_FCB Fcb, PLARGE_INTEGER AllocationSize)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN _In_ BOOLEAN DeleteOnClose
#define FILE_NOTIFY_CHANGE_ATTRIBUTES
_In_ PIO_STACK_LOCATION IrpSp
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
#define STATUS_NO_SUCH_FILE
RFSD_KEY_COMPARISON CompareKeysWithoutOffset(IN PRFSD_KEY_IN_MEMORY a, IN PRFSD_KEY_IN_MEMORY b)
#define STATUS_OBJECT_NAME_INVALID
NTSTATUS RfsdOEMToUnicode(IN OUT PUNICODE_STRING Oem, IN POEM_STRING Unicode)
#define RFSD_KEY_TYPE_v2_DIRENTRY
NTSTATUS RfsdCreateInode(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, PRFSD_FCB ParentFcb, ULONG Type, ULONG FileAttr, PUNICODE_STRING FileName)
#define VCB_VOLUME_LOCKED
#define FILE_ACTION_ADDED
static USHORT RfsdStringLength(PUCHAR buffer, USHORT MaximumLength)
VOID RfsdAddMcbNode(PRFSD_VCB Vcb, PRFSD_MCB Parent, PRFSD_MCB Child)
#define S_IPERMISSION_MASK
#define STATUS_VOLUME_DISMOUNTED
PRFSD_FCB RfsdAllocateFcb(IN PRFSD_VCB Vcb, IN PRFSD_MCB RfsdMcb, IN PRFSD_INODE Inode)
#define RtlZeroMemory(Destination, Length)
PRFSD_CCB RfsdAllocateCcb(VOID)
#define RtlCopyMemory(Destination, Source, Length)
VOID NTAPI ExReleaseResourceForThreadLite(IN PERESOURCE Resource, IN ERESOURCE_THREAD Thread)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
RFSD_IDENTIFIER Identifier
IN PDCB IN POEM_STRING OemName
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
HRESULT Create([out]ITransactionReceiver **ppReceiver)
__drv_mustHoldCriticalRegion NTSTATUS RfsdCreateVolume(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT _In_ ULONG _In_ BOOLEAN NoEaKnowledge
BOOLEAN RfsdFreeInode(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, ULONG Inode, ULONG Type)