alcyone/NTOSKRNL/CC/ccpinsupport.cpp
Dibyamartanda Samanta 05cd85be9b [NTOSKRNL:CC] Pin Hadler Initial Commit
* Implemented  CcMapDataCommon
Rest of the API will be implemented Soon.
2024-06-21 17:49:04 +02:00

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
}