- Pass cache manager callbacks structure at every CcInitializeCacheMap() call, it's mandatory.

svn path=/trunk/; revision=32607
This commit is contained in:
Aleksey Bragin 2008-03-08 10:35:32 +00:00
parent 778097fbec
commit 5776256730
5 changed files with 50 additions and 11 deletions

View file

@ -33,7 +33,7 @@
#define NDEBUG
#include <debug.h>
/* FUNCTIONS ****************************************************************/
/* GLOBALS ******************************************************************/
PCDFS_GLOBAL_DATA CdfsGlobalData;
@ -98,9 +98,41 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
DriverObject->DriverUnload = NULL;
/* Cache manager */
CdfsGlobalData->CacheMgrCallbacks.AcquireForLazyWrite = CdfsAcquireForLazyWrite;
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromLazyWrite = CdfsReleaseFromLazyWrite;
CdfsGlobalData->CacheMgrCallbacks.AcquireForReadAhead = CdfsAcquireForLazyWrite;
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromReadAhead = CdfsReleaseFromLazyWrite;
IoRegisterFileSystem(DeviceObject);
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
return(STATUS_SUCCESS);
}
BOOLEAN NTAPI
CdfsAcquireForLazyWrite(IN PVOID Context,
IN BOOLEAN Wait)
{
PFCB Fcb = (PFCB)Context;
ASSERT(Fcb);
DPRINT("CdfsAcquireForLazyWrite(): Fcb %p\n", Fcb);
if (!ExAcquireResourceExclusiveLite(&(Fcb->MainResource), Wait))
{
DPRINT("CdfsAcquireForLazyWrite(): ExReleaseResourceLite failed.\n");
return FALSE;
}
return TRUE;
}
VOID NTAPI
CdfsReleaseFromLazyWrite(IN PVOID Context)
{
PFCB Fcb = (PFCB)Context;
ASSERT(Fcb);
DPRINT("CdfsReleaseFromLazyWrite(): Fcb %p\n", Fcb);
ExReleaseResourceLite(&(Fcb->MainResource));
}

View file

@ -178,6 +178,7 @@ typedef struct _FCB
{
FSRTL_COMMON_FCB_HEADER RFCB;
SECTION_OBJECT_POINTERS SectionObjectPointers;
ERESOURCE MainResource;
ERESOURCE PagingIoResource;
PFILE_OBJECT FileObject;
@ -189,8 +190,6 @@ typedef struct _FCB
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
WCHAR ShortNameBuffer[13];
ERESOURCE MainResource;
LIST_ENTRY FcbListEntry;
struct _FCB* ParentFcb;
@ -233,6 +232,7 @@ typedef struct
PDRIVER_OBJECT DriverObject;
PDEVICE_OBJECT DeviceObject;
ULONG Flags;
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
} CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
extern PCDFS_GLOBAL_DATA CdfsGlobalData;
@ -418,4 +418,11 @@ NTSTATUS STDCALL
DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath);
BOOLEAN NTAPI
CdfsAcquireForLazyWrite(IN PVOID Context,
IN BOOLEAN Wait);
VOID NTAPI
CdfsReleaseFromLazyWrite(IN PVOID Context);
#endif //CDFS_H

View file

@ -245,8 +245,8 @@ CdfsFCBInitializeCache(PVCB Vcb,
CcInitializeCacheMap(FileObject,
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
FALSE,
NULL,
NULL);
&(CdfsGlobalData->CacheMgrCallbacks),
Fcb);
ObDereferenceObject(FileObject);
Fcb->Flags |= FCB_CACHE_INITIALIZED;
@ -430,8 +430,8 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
CcInitializeCacheMap(FileObject,
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
FALSE,
NULL,
NULL);
&(CdfsGlobalData->CacheMgrCallbacks),
Fcb);
Fcb->Flags |= FCB_CACHE_INITIALIZED;
}

View file

@ -402,8 +402,8 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject,
CcInitializeCacheMap(DeviceExt->StreamFileObject,
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
TRUE,
NULL,
NULL);
&(CdfsGlobalData->CacheMgrCallbacks),
Fcb);
ExInitializeResourceLite(&DeviceExt->VcbResource);
ExInitializeResourceLite(&DeviceExt->DirResource);

View file

@ -85,8 +85,8 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt,
CcInitializeCacheMap(FileObject,
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
FALSE,
NULL,
NULL);
&(CdfsGlobalData->CacheMgrCallbacks),
Fcb);
}
FileOffset.QuadPart = (LONGLONG)ReadOffset;