// into the volume tree ...
//
- pVolumeCB = (AFSVolumeCB *)AFSExAllocatePoolWithTag( NonPagedPool,
+ pVolumeCB = (AFSVolumeCB *)AFSExAllocatePoolWithTag( PagedPool,
sizeof( AFSVolumeCB),
AFS_VCB_ALLOCATION_TAG);
}
NTSTATUS
-AFSInitCcb( IN OUT AFSCcb **Ccb)
+AFSInitCcb( IN OUT AFSCcb **Ccb,
+ IN AFSDirectoryCB *DirectoryCB,
+ IN ACCESS_MASK GrantedAccess,
+ IN ULONG FileAccess)
{
NTSTATUS Status = STATUS_SUCCESS;
AFSCcb *pCcb = NULL;
+ LONG lCount;
__Enter
{
ExInitializeResourceLite( &pCcb->NPCcb->CcbLock);
+ pCcb->DirectoryCB = DirectoryCB;
+
+ lCount = InterlockedIncrement( &pCcb->DirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitCcb Increment count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ pCcb->DirectoryCB,
+ pCcb,
+ lCount);
+
+ pCcb->GrantedAccess = GrantedAccess;
+
+ pCcb->FileAccess = FileAccess;
+
//
// Return the Ccb
//
IN AFSCcb *Ccb)
{
+ LONG lCount;
+
AFSAcquireExcl( &Ccb->NPCcb->CcbLock,
TRUE);
AFSExFreePoolWithTag( Ccb->NotifyMask.Buffer, AFS_GENERIC_MEMORY_7_TAG);
}
+ if ( Ccb->DirectoryCB != NULL)
+ {
+
+ lCount = InterlockedDecrement( &Ccb->DirectoryCB->DirOpenReferenceCount);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSRemoveCcb Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
+ &Ccb->DirectoryCB->NameInformation.FileName,
+ Ccb->DirectoryCB,
+ Ccb,
+ lCount);
+
+ ASSERT( lCount >= 0);
+ }
+
AFSReleaseResource( &Ccb->NPCcb->CcbLock);
//