[NTOSKRNL:CC] Pin Support Protocols
Added Function Parameters for: CcPinFileData CcMapData CcMapDataCommon CcPinMappedData CcPinRead CcPreparePinWrite CcSetBcbOwnerPointer Functions Implemented: CcUnpinData CcUnpinDataForThread
This commit is contained in:
parent
05cd85be9b
commit
7157abd1f9
@ -83,6 +83,166 @@ CcUnpinFileDataEx(
|
||||
// Unimplementd
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
VECTORCALL
|
||||
CcPinFileData(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN IsReadOnly,
|
||||
IN BOOLEAN IsWriteOnly,
|
||||
IN ULONG Flags,
|
||||
OUT PCC_BCB *Bcb,
|
||||
OUT PVOID *BaseAddress,
|
||||
OUT PLARGE_INTEGER BeyondLastByte)
|
||||
{
|
||||
// Unimplemented
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
CcMapData(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN ULONG Flags,
|
||||
OUT PVOID *Bcb,
|
||||
OUT PVOID *Buffer)
|
||||
{
|
||||
//Unimplemented
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
FASTCALL
|
||||
CcMapDataCommon(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN ULONG Flags,
|
||||
OUT PVOID *Bcb,
|
||||
OUT PVOID *Buffer)
|
||||
{
|
||||
//Unimplemented
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
CcPinMappedData(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN ULONG Flags,
|
||||
IN OUT PCC_BCB Bcb)
|
||||
{
|
||||
//Unimplemented
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
CcPinRead(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN ULONG Flags,
|
||||
OUT PVOID *Bcb,
|
||||
OUT PVOID *Buffer)
|
||||
{
|
||||
//Unimplemented
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
CcPreparePinWrite(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PLARGE_INTEGER FileOffset,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Zero,
|
||||
IN ULONG Flags,
|
||||
OUT PVOID *Bcb,
|
||||
OUT PVOID *Buffer)
|
||||
{
|
||||
//Unimplemented
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
CcSetBcbOwnerPointer(
|
||||
IN PMBCB Bcb,
|
||||
IN PVOID OwnerPointer)
|
||||
{
|
||||
//Unimimplemented
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
CcUnpinData(
|
||||
_In_ PVOID BcbPtr)
|
||||
{
|
||||
PCC_BCB Bcb = reinterpret_cast<PCC_BCB>(BcbPtr);
|
||||
BOOLEAN WRITE_FLAG = NULL;
|
||||
|
||||
if (reinterpret_cast<ULONG_PTR>(Bcb) & 1)
|
||||
{
|
||||
WRITE_FLAG = TRUE;
|
||||
Bcb = reinterpret_cast<PCC_BCB>(reinterpret_cast<ULONG_PTR>(Bcb) & ~(1));
|
||||
|
||||
CcUnpinFileDataEx(Bcb, WRITE_FLAG, UNPIN_BCB);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (Bcb->NodeTypeCode != 762)
|
||||
{
|
||||
WRITE_FLAG = FALSE;
|
||||
CcUnpinFileDataEx(Bcb, WRITE_FLAG, UNPIN_BCB);
|
||||
return;
|
||||
}
|
||||
for (auto it = ListEntryIterator::begin(&Bcb->BcbLinks); it != ListEntryIterator::end(&Bcb->BcbLinks); ++it)
|
||||
{
|
||||
auto* BCB_CURRENT = CONTAINING_RECORD(it->Blink, CC_BCB, BcbLinks);
|
||||
|
||||
CcUnpinData(BCB_CURRENT);
|
||||
|
||||
}
|
||||
ExFreePoolWithTag(Bcb);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
CcUnpinDataForThread(IN PVOID BcbPtr,
|
||||
IN ERESOURCE_THREAD ResourceThreadId)
|
||||
{
|
||||
PCC_BCB Bcb = BcbPtr;
|
||||
BOOLEAN WRITE_FLAG = NULL;
|
||||
|
||||
if (reinterpret_cast<ULONG_PTR>(Bcb) & 1)
|
||||
{
|
||||
WRITE_FLAG = TRUE;
|
||||
Bcb = reinterpret_cast<PCC_BCB>(reinterpret_cast<ULONG_PTR>(Bcb) & ~(1));
|
||||
|
||||
CcUnpinFileDataEx(Bcb, WRITE_FLAG, );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (Bcb->NodeTypeCode != 762)
|
||||
{
|
||||
WRITE_FLAG = FALSE;
|
||||
ExReleaseResourceForThreadLite(&Bcb->Resource, ResourceThreadId);
|
||||
CcUnpinFileDataEx(Bcb, WRITE_FLAG, UNPIN_BCB);
|
||||
return;
|
||||
}
|
||||
for (auto it = ListEntryIterator::begin(&Bcb->BcbLinks); it != ListEntryIterator::end(&Bcb->BcbLinks); ++it)
|
||||
{
|
||||
auto* BCB_CURRENT = CONTAINING_RECORD(it->Blink, CC_BCB, BcbLinks);
|
||||
|
||||
CcUnpinData(BCB_CURRENT);
|
||||
|
||||
}
|
||||
ExFreePoolWithTag(Bcb);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user