* Implemented CcMapDataCommon Rest of the API will be implemented Soon.
89 lines
1.6 KiB
C++
89 lines
1.6 KiB
C++
/*
|
|
* PROJECT: Alcyone System Kernel
|
|
* LICENSE: BSD Clause 3
|
|
* PURPOSE: Cache Controller:: Lazy Writer
|
|
* NT KERNEL: 5.11.9360
|
|
* COPYRIGHT: 2023-2029 Dibymartanda Samanta <>
|
|
*/
|
|
|
|
#include <ntoskrnl.h>
|
|
#define NTDEBUG
|
|
#include <debug.h>
|
|
#include "ccinternal.hpp"
|
|
|
|
|
|
extern "C"
|
|
|
|
|
|
/*Internal Function*/
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
CcPinFileData(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ BOOLEAN IsNoWrite,
|
|
_In_ BOOLEAN Flags,
|
|
_In_ ULONG PinFlags,
|
|
_Out_ PCC_BCB* Bcb,
|
|
_Out_ PVOID* Buffer,
|
|
_Out_ LARGE_INTEGER* BeyondLastByte)
|
|
{
|
|
// Unimplemented
|
|
}
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
CcMapDataCommon(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ ULONG Flags,
|
|
_Out_ PVOID *Bcb,
|
|
_Out_ PVOID *Buffer
|
|
)
|
|
{
|
|
if (Flags & FILE_PIN_SEQUENTIAL_READ)
|
|
InterlockedIncrement(&CcSequentialReadCount);
|
|
else
|
|
InterlockedIncrement(&CcRandomReadCount);
|
|
|
|
KeGetCurrentThread()->WaitIrql = PASSIVE_LEVEL;
|
|
|
|
if (Flags & FILE_PIN_SEQUENTIAL_READ)
|
|
{
|
|
*Buffer = CcGetVirtualAddress(SharedMap, *FileOffset, (PVACB *)&Bcb, &ReceivedLength);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
LARGE_INTEGER BeyondLastByte;
|
|
if (CcPinFileData(FileObject, FileOffset, Length, TRUE, 0, Flags, Bcb, Buffer, &BeyondLastByte))
|
|
{
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
InterlockedIncrement(&CCFailedPinReadCount);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
VOID
|
|
NTAPI
|
|
CcUnpinFileDataEx(
|
|
_In_ PCC_BCB Bcb,
|
|
_In_ BOOLEAN WriteStatus,
|
|
_In_ ULONG Type)
|
|
{
|
|
// Unimplementd
|
|
}
|
|
|
|
|
|
|
|
|