sys: FSP_FILE_NODE::MainFileNode: reference/dereference on create/delete

This commit is contained in:
Bill Zissimopoulos 2016-12-29 13:16:11 -08:00
parent fa54898c64
commit e4b4e6a1f9
3 changed files with 6 additions and 1 deletions

View File

@ -444,7 +444,9 @@ static NTSTATUS FspFsvolCreateNoLock(
FileAttributes = 0;
/* remember the main file node */
ASSERT(0 == FileNode->MainFileNode);
FileNode->MainFileNode = FileDesc->MainFileObject->FsContext;
FspFileNodeReference(FileNode->MainFileNode);
Result = STATUS_SUCCESS;

View File

@ -1208,7 +1208,7 @@ typedef struct FSP_FILE_NODE
UINT64 IndexNumber;
BOOLEAN IsDirectory;
BOOLEAN IsRootDirectory;
struct FSP_FILE_NODE *MainFileNode; /* this becomes invalid after our last desc close */
struct FSP_FILE_NODE *MainFileNode;
WCHAR FileNameBuf[];
} FSP_FILE_NODE;
typedef struct

View File

@ -252,6 +252,9 @@ VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode)
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
FspFsvolDeviceExtension(FileNode->FsvolDeviceObject);
if (0 != FileNode->MainFileNode)
FspFileNodeDereference(FileNode->MainFileNode);
FsRtlUninitializeOplock(FspFileNodeAddrOfOplock(FileNode));
FsRtlUninitializeFileLock(&FileNode->FileLock);