sys: FileNodes are now registered only in the ContextByNameTable; the ContextTable can be removed if desired

This commit is contained in:
Bill Zissimopoulos 2016-02-09 11:38:32 -08:00
parent 6c94eb3398
commit 2a567effbf
2 changed files with 3 additions and 11 deletions

View File

@ -600,7 +600,6 @@ typedef struct
/* locked under FSP_FSVOL_DEVICE_EXTENSION::ContextTableResource */ /* locked under FSP_FSVOL_DEVICE_EXTENSION::ContextTableResource */
LONG OpenCount; LONG OpenCount;
SHARE_ACCESS ShareAccess; SHARE_ACCESS ShareAccess;
FSP_DEVICE_CONTEXT_TABLE_ELEMENT ContextElementStorage;
FSP_DEVICE_CONTEXT_BY_NAME_TABLE_ELEMENT ContextByNameElementStorage; FSP_DEVICE_CONTEXT_BY_NAME_TABLE_ELEMENT ContextByNameElementStorage;
/* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource */ /* locked under FSP_FSVOL_DEVICE_EXTENSION::FileRenameResource */
UNICODE_STRING FileName; UNICODE_STRING FileName;

View File

@ -264,8 +264,8 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
FspFsvolDeviceLockContextTable(FsvolDeviceObject); FspFsvolDeviceLockContextTable(FsvolDeviceObject);
OpenedFileNode = FspFsvolDeviceInsertContext(FsvolDeviceObject, OpenedFileNode = FspFsvolDeviceInsertContextByName(FsvolDeviceObject,
FileNode->UserContext, FileNode, &FileNode->ContextElementStorage, &Inserted); &FileNode->FileName, FileNode, &FileNode->ContextByNameElementStorage, &Inserted);
ASSERT(0 != OpenedFileNode); ASSERT(0 != OpenedFileNode);
if (Inserted) if (Inserted)
@ -277,9 +277,6 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
*/ */
ASSERT(OpenedFileNode == FileNode); ASSERT(OpenedFileNode == FileNode);
FspFsvolDeviceInsertContextByName(FsvolDeviceObject,
&FileNode->FileName, FileNode, &FileNode->ContextByNameElementStorage, 0);
IoSetShareAccess(GrantedAccess, ShareAccess, FileObject, IoSetShareAccess(GrantedAccess, ShareAccess, FileObject,
&OpenedFileNode->ShareAccess); &OpenedFileNode->ShareAccess);
} }
@ -364,11 +361,7 @@ VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
IoRemoveShareAccess(FileObject, &FileNode->ShareAccess); IoRemoveShareAccess(FileObject, &FileNode->ShareAccess);
if (0 == --FileNode->OpenCount) if (0 == --FileNode->OpenCount)
{ FspFsvolDeviceDeleteContextByName(FsvolDeviceObject, &FileNode->FileName, &Deleted);
FspFsvolDeviceDeleteContext(FsvolDeviceObject, FileNode->UserContext, &Deleted);
if (Deleted)
FspFsvolDeviceDeleteContextByName(FsvolDeviceObject, &FileNode->FileName, 0);
}
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject); FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);