{
CcInitView();
}
+
+/*
+ * @unimplemented
+ */
+LARGE_INTEGER
+STDCALL
+CcGetFlushedValidData (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ IN BOOLEAN BcbListHeld
+ )
+{
+ UNIMPLEMENTED;
+
+ LARGE_INTEGER i;
+ i.QuadPart = 0;
+ return i;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcRepinBcb (
+ IN PVOID Bcb
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcRemapBcb (
+ IN PVOID Bcb
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcScheduleReadAhead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcSetAdditionalCacheAttributes (
+ IN PFILE_OBJECT FileObject,
+ IN BOOLEAN DisableReadAhead,
+ IN BOOLEAN DisableWriteBehind
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcSetBcbOwnerPointer (
+ IN PVOID Bcb,
+ IN PVOID Owner
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcSetDirtyPageThreshold (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG DirtyPageThreshold
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcSetReadAheadGranularity (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG Granularity
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcUnpinRepinnedBcb (
+ IN PVOID Bcb,
+ IN BOOLEAN WriteThrough,
+ IN PIO_STATUS_BLOCK IoStatus
+ )
+{
+ UNIMPLEMENTED;
+}
-/* $Id: copy.c,v 1.26 2004/06/20 02:10:07 vizzini Exp $
+/* $Id: copy.c,v 1.27 2004/06/21 04:11:44 ion Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
return(STATUS_SUCCESS);
}
-/* STUBS */
/*
* @unimplemented
return FALSE;
}
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcDeferWrite (
- IN PFILE_OBJECT FileObject,
- IN PCC_POST_DEFERRED_WRITE PostRoutine,
- IN PVOID Context1,
- IN PVOID Context2,
- IN ULONG BytesToWrite,
- IN BOOLEAN Retrying
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcFastCopyRead (
- IN PFILE_OBJECT FileObject,
- IN ULONG FileOffset,
- IN ULONG Length,
- IN ULONG PageCount,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcFastCopyWrite (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN PVOID Buffer
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-/*
- * @unimplemented
- */
-LARGE_INTEGER
-STDCALL
-CcGetDirtyPages (
- IN PVOID LogHandle,
- IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
- IN PVOID Context1,
- IN PVOID Context2
- )
-{
- UNIMPLEMENTED;
-
- LARGE_INTEGER i;
- i.QuadPart = 0;
- return i;
-}
-/*
- * @unimplemented
- */
-PFILE_OBJECT
-STDCALL
-CcGetFileObjectFromBcb (
- IN PVOID Bcb
- )
-{
- UNIMPLEMENTED;
- return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcInitializeCacheMap (
- IN PFILE_OBJECT FileObject,
- IN PCC_FILE_SIZES FileSizes,
- IN BOOLEAN PinAccess,
- IN PCACHE_MANAGER_CALLBACKS CallBacks,
- IN PVOID LazyWriterContext
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcIsThereDirtyData (
- IN PVPB Vpb
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-LARGE_INTEGER
-STDCALL
-CcGetLsnForFileObject (
- IN PFILE_OBJECT FileObject,
- OUT PLARGE_INTEGER OldestLsn OPTIONAL
- )
-{
- UNIMPLEMENTED;
-
- LARGE_INTEGER i;
- i.QuadPart = 0;
- return i;
-}
-
-/*
- * @unimplemented
- */
-LARGE_INTEGER
-STDCALL
-CcGetFlushedValidData (
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN BOOLEAN BcbListHeld
- )
-{
- UNIMPLEMENTED;
-
- LARGE_INTEGER i;
- i.QuadPart = 0;
- return i;
-}
-
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcMdlRead (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- OUT PMDL * MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcMdlWriteComplete (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PMDL MdlChain
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcMdlWriteAbort (
- IN PFILE_OBJECT FileObject,
- IN PMDL MdlChain
- )
-{
- UNIMPLEMENTED;
-}
-
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcPinMappedData (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- OUT PVOID * Bcb
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcPinRead (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- OUT PVOID * Bcb,
- OUT PVOID * Buffer
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcPrepareMdlWrite (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- OUT PMDL * MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcPreparePinWrite (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Zero,
- IN BOOLEAN Wait,
- OUT PVOID * Bcb,
- OUT PVOID * Buffer
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcPurgeCacheSection (
- IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
- IN PLARGE_INTEGER FileOffset OPTIONAL,
- IN ULONG Length,
- IN BOOLEAN UninitializeCacheMaps
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcRepinBcb (
- IN PVOID Bcb
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcRemapBcb (
- IN PVOID Bcb
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcScheduleReadAhead (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcSetAdditionalCacheAttributes (
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN DisableReadAhead,
- IN BOOLEAN DisableWriteBehind
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcSetBcbOwnerPointer (
- IN PVOID Bcb,
- IN PVOID Owner
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcSetDirtyPageThreshold (
- IN PFILE_OBJECT FileObject,
- IN ULONG DirtyPageThreshold
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcSetLogHandleForFile (
- IN PFILE_OBJECT FileObject,
- IN PVOID LogHandle,
- IN PFLUSH_TO_LSN FlushToLsnRoutine
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcSetReadAheadGranularity (
- IN PFILE_OBJECT FileObject,
- IN ULONG Granularity
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-BOOLEAN
-STDCALL
-CcUninitializeCacheMap (
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER TruncateSize OPTIONAL,
- IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
- )
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcUnpinDataForThread (
- IN PVOID Bcb,
- IN ERESOURCE_THREAD ResourceThreadId
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-CcUnpinRepinnedBcb (
- IN PVOID Bcb,
- IN BOOLEAN WriteThrough,
- IN PIO_STATUS_BLOCK IoStatus
- )
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-NTSTATUS
-STDCALL
-CcWaitForCurrentLazyWriterActivity (
- VOID
- )
-{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
-}
-
-/* STUBS END!!! */
/*
* @implemented
return(TRUE);
}
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcDeferWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PCC_POST_DEFERRED_WRITE PostRoutine,
+ IN PVOID Context1,
+ IN PVOID Context2,
+ IN ULONG BytesToWrite,
+ IN BOOLEAN Retrying
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcFastCopyRead (
+ IN PFILE_OBJECT FileObject,
+ IN ULONG FileOffset,
+ IN ULONG Length,
+ IN ULONG PageCount,
+ OUT PVOID Buffer,
+ OUT PIO_STATUS_BLOCK IoStatus
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcFastCopyWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN PVOID Buffer
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+CcWaitForCurrentLazyWriterActivity (
+ VOID
+ )
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
/*
* @implemented
*/
}
return(TRUE);
}
-
--- /dev/null
+/* COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: ntoskrnl/cc/fs.c
+ * PURPOSE: Implements cache managers functions useful for File Systems
+ * PROGRAMMER: Alex Ionescu
+ * UPDATE HISTORY:
+ * Created 20/06/04
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ddk/ntddk.h>
+#include <ddk/ntifs.h>
+#include <internal/mm.h>
+#include <internal/cc.h>
+#include <internal/pool.h>
+#include <internal/io.h>
+#include <ntos/minmax.h>
+
+#define NDEBUG
+#include <internal/debug.h>
+
+/* GLOBALS *****************************************************************/
+
+extern FAST_MUTEX ViewLock;
+extern ULONG DirtyPageCount;
+
+NTSTATUS CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg);
+
+/* FUNCTIONS *****************************************************************/
+
+/*
+ * @unimplemented
+ */
+LARGE_INTEGER
+STDCALL
+CcGetDirtyPages (
+ IN PVOID LogHandle,
+ IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
+ IN PVOID Context1,
+ IN PVOID Context2
+ )
+{
+ UNIMPLEMENTED;
+
+ LARGE_INTEGER i;
+ i.QuadPart = 0;
+ return i;
+}
+
+/*
+ * @unimplemented
+ */
+PFILE_OBJECT
+STDCALL
+CcGetFileObjectFromBcb (
+ IN PVOID Bcb
+ )
+{
+ UNIMPLEMENTED;
+ return 0;
+}
+
+/*
+ * @unimplemented
+ */
+LARGE_INTEGER
+STDCALL
+CcGetLsnForFileObject (
+ IN PFILE_OBJECT FileObject,
+ OUT PLARGE_INTEGER OldestLsn OPTIONAL
+ )
+{
+ UNIMPLEMENTED;
+
+ LARGE_INTEGER i;
+ i.QuadPart = 0;
+ return i;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcInitializeCacheMap (
+ IN PFILE_OBJECT FileObject,
+ IN PCC_FILE_SIZES FileSizes,
+ IN BOOLEAN PinAccess,
+ IN PCACHE_MANAGER_CALLBACKS CallBacks,
+ IN PVOID LazyWriterContext
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcIsThereDirtyData (
+ IN PVPB Vpb
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcPurgeCacheSection (
+ IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ IN PLARGE_INTEGER FileOffset OPTIONAL,
+ IN ULONG Length,
+ IN BOOLEAN UninitializeCacheMaps
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+
+/*
+ * @implemented
+ */
+VOID STDCALL
+CcSetFileSizes (IN PFILE_OBJECT FileObject,
+ IN PCC_FILE_SIZES FileSizes)
+{
+ KIRQL oldirql;
+ PBCB Bcb;
+ PLIST_ENTRY current_entry;
+ PCACHE_SEGMENT current;
+ LIST_ENTRY FreeListHead;
+ NTSTATUS Status;
+
+ DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n",
+ FileObject, FileSizes);
+ DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n",
+ (ULONG)FileSizes->AllocationSize.QuadPart,
+ (ULONG)FileSizes->FileSize.QuadPart,
+ (ULONG)FileSizes->ValidDataLength.QuadPart);
+
+ Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
+ assert(Bcb);
+
+ if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart)
+ {
+ InitializeListHead(&FreeListHead);
+ ExAcquireFastMutex(&ViewLock);
+ KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
+
+ current_entry = Bcb->BcbSegmentListHead.Flink;
+ while (current_entry != &Bcb->BcbSegmentListHead)
+ {
+ current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry);
+ current_entry = current_entry->Flink;
+ if (current->FileOffset > FileSizes->AllocationSize.QuadPart)
+ {
+ if (current->ReferenceCount == 0 || (current->ReferenceCount == 1 && current->Dirty))
+ {
+ RemoveEntryList(¤t->BcbSegmentListEntry);
+ RemoveEntryList(¤t->CacheSegmentListEntry);
+ RemoveEntryList(¤t->CacheSegmentLRUListEntry);
+ if (current->Dirty)
+ {
+ RemoveEntryList(¤t->DirtySegmentListEntry);
+ DirtyPageCount -= Bcb->CacheSegmentSize / PAGE_SIZE;
+ }
+ InsertHeadList(&FreeListHead, ¤t->BcbSegmentListEntry);
+ }
+ else
+ {
+ DPRINT1("Anyone has referenced a cache segment behind the new size.\n");
+ KEBUGCHECK(0);
+ }
+ }
+ }
+
+ Bcb->AllocationSize = FileSizes->AllocationSize;
+ Bcb->FileSize = FileSizes->FileSize;
+ KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
+ ExReleaseFastMutex(&ViewLock);
+
+ current_entry = FreeListHead.Flink;
+ while(current_entry != &FreeListHead)
+ {
+ current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry);
+ current_entry = current_entry->Flink;
+ Status = CcRosInternalFreeCacheSegment(current);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("CcRosInternalFreeCacheSegment failed, status = %x\n");
+ KEBUGCHECK(0);
+ }
+ }
+ }
+ else
+ {
+ KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
+ Bcb->AllocationSize = FileSizes->AllocationSize;
+ Bcb->FileSize = FileSizes->FileSize;
+ KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
+ }
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcSetLogHandleForFile (
+ IN PFILE_OBJECT FileObject,
+ IN PVOID LogHandle,
+ IN PFLUSH_TO_LSN FlushToLsnRoutine
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcUninitializeCacheMap (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER TruncateSize OPTIONAL,
+ IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
--- /dev/null
+/* COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: ntoskrnl/cc/fs.c
+ * PURPOSE: Implements MDL Cache Manager Functions
+ * PROGRAMMER: Alex Ionescu
+ * UPDATE HISTORY:
+ * Created 20/06/04
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ddk/ntddk.h>
+#include <ddk/ntifs.h>
+#include <internal/mm.h>
+#include <internal/cc.h>
+#include <internal/pool.h>
+#include <internal/io.h>
+#include <ntos/minmax.h>
+
+#define NDEBUG
+#include <internal/debug.h>
+
+/* FUNCTIONS *****************************************************************/
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcMdlRead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ OUT PMDL * MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/**********************************************************************
+ * NAME INTERNAL
+ * CcMdlReadCompleteDev@8
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ * MdlChain
+ * DeviceObject
+ *
+ * RETURN VALUE
+ * None.
+ *
+ * NOTE
+ * Used by CcMdlReadComplete@8 and FsRtl
+ *
+ */
+VOID STDCALL
+CcMdlReadCompleteDev (IN PMDL MdlChain,
+ IN PDEVICE_OBJECT DeviceObject)
+{
+ UNIMPLEMENTED;
+}
+
+
+/**********************************************************************
+ * NAME EXPORTED
+ * CcMdlReadComplete@8
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ * None.
+ *
+ * NOTE
+ * From Bo Branten's ntifs.h v13.
+ *
+ * @unimplemented
+ */
+VOID STDCALL
+CcMdlReadComplete (IN PFILE_OBJECT FileObject,
+ IN PMDL MdlChain)
+{
+ PDEVICE_OBJECT DeviceObject = NULL;
+
+ DeviceObject = IoGetRelatedDeviceObject (FileObject);
+ /* FIXME: try fast I/O first */
+ CcMdlReadCompleteDev (MdlChain,
+ DeviceObject);
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcMdlWriteComplete (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN PMDL MdlChain
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcMdlWriteAbort (
+ IN PFILE_OBJECT FileObject,
+ IN PMDL MdlChain
+ )
+{
+ UNIMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcPrepareMdlWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ OUT PMDL * MdlChain,
+ OUT PIO_STATUS_BLOCK IoStatus
+ )
+{
+ UNIMPLEMENTED;
+}
#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
#define ROUND_DOWN(N, S) (((N) % (S)) ? ROUND_UP(N, S) - S : N)
-extern FAST_MUTEX ViewLock;
-extern ULONG DirtyPageCount;
-
-NTSTATUS CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg);
-
-/* FUNCTIONS *****************************************************************/
-
-/**********************************************************************
- * NAME INTERNAL
- * CcMdlReadCompleteDev@8
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- * MdlChain
- * DeviceObject
- *
- * RETURN VALUE
- * None.
- *
- * NOTE
- * Used by CcMdlReadComplete@8 and FsRtl
- *
- */
-VOID STDCALL
-CcMdlReadCompleteDev (IN PMDL MdlChain,
- IN PDEVICE_OBJECT DeviceObject)
-{
- UNIMPLEMENTED;
-}
-
-
-/**********************************************************************
- * NAME EXPORTED
- * CcMdlReadComplete@8
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- *
- * RETURN VALUE
- * None.
- *
- * NOTE
- * From Bo Branten's ntifs.h v13.
- *
- * @unimplemented
- */
-VOID STDCALL
-CcMdlReadComplete (IN PFILE_OBJECT FileObject,
- IN PMDL MdlChain)
-{
- PDEVICE_OBJECT DeviceObject = NULL;
-
- DeviceObject = IoGetRelatedDeviceObject (FileObject);
- /* FIXME: try fast I/O first */
- CcMdlReadCompleteDev (MdlChain,
- DeviceObject);
-}
-
-/*
- * @implemented
- */
-VOID STDCALL
-CcSetFileSizes (IN PFILE_OBJECT FileObject,
- IN PCC_FILE_SIZES FileSizes)
-{
- KIRQL oldirql;
- PBCB Bcb;
- PLIST_ENTRY current_entry;
- PCACHE_SEGMENT current;
- LIST_ENTRY FreeListHead;
- NTSTATUS Status;
-
- DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n",
- FileObject, FileSizes);
- DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n",
- (ULONG)FileSizes->AllocationSize.QuadPart,
- (ULONG)FileSizes->FileSize.QuadPart,
- (ULONG)FileSizes->ValidDataLength.QuadPart);
-
- Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
- assert(Bcb);
-
- if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart)
- {
- InitializeListHead(&FreeListHead);
- ExAcquireFastMutex(&ViewLock);
- KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
-
- current_entry = Bcb->BcbSegmentListHead.Flink;
- while (current_entry != &Bcb->BcbSegmentListHead)
- {
- current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry);
- current_entry = current_entry->Flink;
- if (current->FileOffset > FileSizes->AllocationSize.QuadPart)
- {
- if (current->ReferenceCount == 0 || (current->ReferenceCount == 1 && current->Dirty))
- {
- RemoveEntryList(¤t->BcbSegmentListEntry);
- RemoveEntryList(¤t->CacheSegmentListEntry);
- RemoveEntryList(¤t->CacheSegmentLRUListEntry);
- if (current->Dirty)
- {
- RemoveEntryList(¤t->DirtySegmentListEntry);
- DirtyPageCount -= Bcb->CacheSegmentSize / PAGE_SIZE;
- }
- InsertHeadList(&FreeListHead, ¤t->BcbSegmentListEntry);
- }
- else
- {
- DPRINT1("Anyone has referenced a cache segment behind the new size.\n");
- KEBUGCHECK(0);
- }
- }
- }
-
- Bcb->AllocationSize = FileSizes->AllocationSize;
- Bcb->FileSize = FileSizes->FileSize;
- KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
- ExReleaseFastMutex(&ViewLock);
-
- current_entry = FreeListHead.Flink;
- while(current_entry != &FreeListHead)
- {
- current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry);
- current_entry = current_entry->Flink;
- Status = CcRosInternalFreeCacheSegment(current);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("CcRosInternalFreeCacheSegment failed, status = %x\n");
- KEBUGCHECK(0);
- }
- }
- }
- else
- {
- KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
- Bcb->AllocationSize = FileSizes->AllocationSize;
- Bcb->FileSize = FileSizes->FileSize;
- KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
- }
-}
-
-/* $Id: pin.c,v 1.14 2003/12/30 18:52:03 fireball Exp $
+/* $Id: pin.c,v 1.15 2004/06/21 04:11:44 ion Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
}
/*
- * @implemented
+ * @unimplemented
*/
-VOID STDCALL
-CcUnpinData (IN PVOID Bcb)
+BOOLEAN
+STDCALL
+CcPinMappedData (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ OUT PVOID * Bcb
+ )
{
- PINTERNAL_BCB iBcb = Bcb;
- CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE,
- iBcb->Dirty, FALSE);
- ExFreeToNPagedLookasideList(&iBcbLookasideList, iBcb);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcPinRead (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Wait,
+ OUT PVOID * Bcb,
+ OUT PVOID * Buffer
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOLEAN
+STDCALL
+CcPreparePinWrite (
+ IN PFILE_OBJECT FileObject,
+ IN PLARGE_INTEGER FileOffset,
+ IN ULONG Length,
+ IN BOOLEAN Zero,
+ IN BOOLEAN Wait,
+ OUT PVOID * Bcb,
+ OUT PVOID * Buffer
+ )
+{
+ UNIMPLEMENTED;
+ return FALSE;
}
/*
iBcb->Dirty = TRUE;
}
+
+/*
+ * @implemented
+ */
+VOID STDCALL
+CcUnpinData (IN PVOID Bcb)
+{
+ PINTERNAL_BCB iBcb = Bcb;
+ CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE,
+ iBcb->Dirty, FALSE);
+ ExFreeToNPagedLookasideList(&iBcbLookasideList, iBcb);
+}
+
+/*
+ * @unimplemented
+ */
+VOID
+STDCALL
+CcUnpinDataForThread (
+ IN PVOID Bcb,
+ IN ERESOURCE_THREAD ResourceThreadId
+ )
+{
+ UNIMPLEMENTED;
+}