mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 18:54:25 +00:00
[NTOS:CC] Properly return the public BCBs
This commit is contained in:
parent
33cde28312
commit
02167f2fb3
|
@ -308,7 +308,7 @@ CcSetBcbOwnerPointer (
|
||||||
IN PVOID Owner
|
IN PVOID Owner
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p Owner=%p\n",
|
CCTRACE(CC_API_DEBUG, "Bcb=%p Owner=%p\n",
|
||||||
Bcb, Owner);
|
Bcb, Owner);
|
||||||
|
|
|
@ -45,7 +45,7 @@ NTAPI
|
||||||
CcGetFileObjectFromBcb (
|
CcGetFileObjectFromBcb (
|
||||||
IN PVOID Bcb)
|
IN PVOID Bcb)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = (PINTERNAL_BCB)Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p\n", Bcb);
|
CCTRACE(CC_API_DEBUG, "Bcb=%p\n", Bcb);
|
||||||
|
|
||||||
|
|
|
@ -126,8 +126,8 @@ CcpGetAppropriateBcb(
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlZeroMemory(iBcb, sizeof(*iBcb));
|
RtlZeroMemory(iBcb, sizeof(*iBcb));
|
||||||
iBcb->PFCB.NodeTypeCode = 0xDE45; /* Undocumented (CAPTIVE_PUBLIC_BCB_NODETYPECODE) */
|
iBcb->PFCB.NodeTypeCode = 0x2FD; /* As per KMTests */
|
||||||
iBcb->PFCB.NodeByteSize = sizeof(PUBLIC_BCB);
|
iBcb->PFCB.NodeByteSize = 0;
|
||||||
iBcb->PFCB.MappedLength = Length;
|
iBcb->PFCB.MappedLength = Length;
|
||||||
iBcb->PFCB.MappedFileOffset = *FileOffset;
|
iBcb->PFCB.MappedFileOffset = *FileOffset;
|
||||||
iBcb->Vacb = Vacb;
|
iBcb->Vacb = Vacb;
|
||||||
|
@ -308,8 +308,9 @@ CcpPinData(
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
*Bcb = NewBcb;
|
*Bcb = &NewBcb->PFCB;
|
||||||
*Buffer = (PVOID)((ULONG_PTR)NewBcb->Vacb->BaseAddress + VacbOffset);
|
*Buffer = (PVOID)((ULONG_PTR)NewBcb->Vacb->BaseAddress + VacbOffset);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,7 +412,7 @@ CcMapData (
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
*pBcb = iBcb;
|
*pBcb = &iBcb->PFCB;
|
||||||
*pBuffer = (PVOID)((ULONG_PTR)iBcb->Vacb->BaseAddress + VacbOffset);
|
*pBuffer = (PVOID)((ULONG_PTR)iBcb->Vacb->BaseAddress + VacbOffset);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%p Length=%lu Flags=0x%lx -> TRUE Bcb=%p, Buffer %p\n",
|
CCTRACE(CC_API_DEBUG, "FileObject=%p FileOffset=%p Length=%lu Flags=0x%lx -> TRUE Bcb=%p, Buffer %p\n",
|
||||||
|
@ -451,14 +452,14 @@ CcPinMappedData (
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
iBcb = *Bcb;
|
iBcb = *Bcb ? CONTAINING_RECORD(*Bcb, INTERNAL_BCB, PFCB) : NULL;
|
||||||
|
|
||||||
++CcPinMappedDataCount;
|
++CcPinMappedDataCount;
|
||||||
|
|
||||||
Result = CcpPinData(SharedCacheMap, FileOffset, Length, Flags, Bcb, &Buffer);
|
Result = CcpPinData(SharedCacheMap, FileOffset, Length, Flags, Bcb, &Buffer);
|
||||||
if (Result)
|
if (Result)
|
||||||
{
|
{
|
||||||
CcUnpinData(iBcb);
|
CcUnpinData(&iBcb->PFCB);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
@ -542,10 +543,9 @@ CcSetDirtyPinnedData (
|
||||||
IN PVOID Bcb,
|
IN PVOID Bcb,
|
||||||
IN PLARGE_INTEGER Lsn)
|
IN PLARGE_INTEGER Lsn)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p Lsn=%p\n",
|
CCTRACE(CC_API_DEBUG, "Bcb=%p Lsn=%p\n", Bcb, Lsn);
|
||||||
Bcb, Lsn);
|
|
||||||
|
|
||||||
/* Tell Mm */
|
/* Tell Mm */
|
||||||
MmMakePagesDirty(NULL,
|
MmMakePagesDirty(NULL,
|
||||||
|
@ -580,7 +580,7 @@ CcUnpinDataForThread (
|
||||||
IN PVOID Bcb,
|
IN PVOID Bcb,
|
||||||
IN ERESOURCE_THREAD ResourceThreadId)
|
IN ERESOURCE_THREAD ResourceThreadId)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p ResourceThreadId=%lu\n", Bcb, ResourceThreadId);
|
CCTRACE(CC_API_DEBUG, "Bcb=%p ResourceThreadId=%lu\n", Bcb, ResourceThreadId);
|
||||||
|
|
||||||
|
@ -601,7 +601,7 @@ NTAPI
|
||||||
CcRepinBcb (
|
CcRepinBcb (
|
||||||
IN PVOID Bcb)
|
IN PVOID Bcb)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
|
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p\n", Bcb);
|
CCTRACE(CC_API_DEBUG, "Bcb=%p\n", Bcb);
|
||||||
|
|
||||||
|
@ -618,7 +618,7 @@ CcUnpinRepinnedBcb (
|
||||||
IN BOOLEAN WriteThrough,
|
IN BOOLEAN WriteThrough,
|
||||||
IN PIO_STATUS_BLOCK IoStatus)
|
IN PIO_STATUS_BLOCK IoStatus)
|
||||||
{
|
{
|
||||||
PINTERNAL_BCB iBcb = Bcb;
|
PINTERNAL_BCB iBcb = CONTAINING_RECORD(Bcb, INTERNAL_BCB, PFCB);
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
PROS_SHARED_CACHE_MAP SharedCacheMap;
|
PROS_SHARED_CACHE_MAP SharedCacheMap;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue