[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
|
// 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