[NTOSKRNL]
authorPierre Schweitzer <pierre@reactos.org>
Sun, 20 Mar 2016 18:33:54 +0000 (18:33 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 20 Mar 2016 18:33:54 +0000 (18:33 +0000)
Implement in a really simple way CcSetBcbOwnerPointer() and CcUnpinDataForThread(). They don't do everything the Windows Cc does, but at least, they do the basic job.

CORE-10996

svn path=/trunk/; revision=71030

reactos/ntoskrnl/cc/cacheman.c
reactos/ntoskrnl/cc/pin.c
reactos/ntoskrnl/include/internal/cc.h

index 3eefc92..111170d 100644 (file)
@@ -117,10 +117,14 @@ CcSetBcbOwnerPointer (
        IN      PVOID   Owner
        )
 {
+    PINTERNAL_BCB iBcb = Bcb;
+
     CCTRACE(CC_API_DEBUG, "Bcb=%p Owner=%p\n",
         Bcb, Owner);
 
-       UNIMPLEMENTED;
+    if (iBcb->OwnerPointer)
+        DPRINT1("OwnerPointer was already set?! Old: %p, New: %p\n", iBcb->OwnerPointer, Owner);
+    iBcb->OwnerPointer = Owner;
 }
 
 /*
index af0e357..bb1370f 100644 (file)
@@ -242,9 +242,17 @@ CcUnpinDataForThread (
     IN PVOID Bcb,
     IN ERESOURCE_THREAD ResourceThreadId)
 {
+    PINTERNAL_BCB iBcb = Bcb;
+
     CCTRACE(CC_API_DEBUG, "Bcb=%p ResourceThreadId=%lu\n", Bcb, ResourceThreadId);
 
-    UNIMPLEMENTED;
+    if (iBcb->OwnerPointer != (PVOID)ResourceThreadId)
+    {
+        DPRINT1("Invalid owner! Caller: %p, Owner: %p\n", (PVOID)ResourceThreadId, iBcb->OwnerPointer);
+        return;
+    }
+
+    return CcUnpinData(Bcb);
 }
 
 /*
index 3c7f8d7..5d95e6a 100644 (file)
@@ -194,6 +194,7 @@ typedef struct _INTERNAL_BCB
     PROS_VACB Vacb;
     BOOLEAN Dirty;
     CSHORT RefCount; /* (At offset 0x34 on WinNT4) */
+    PVOID OwnerPointer;
 } INTERNAL_BCB, *PINTERNAL_BCB;
 
 VOID