AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitFcb Acquiring Fcb lock %08lX EXCL %08lX\n",
+ "AFSInitFcb Acquiring Fcb lock %p EXCL %08lX\n",
&pNPFcb->Resource,
PsGetCurrentThread());
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
- "AFSInitFcb Raced Fcb %08lX pFcb %08lX Name %wZ\n",
+ "AFSInitFcb Raced Fcb %p pFcb %p Name %wZ\n",
pObjectInfo->Fcb,
pFcb,
&DirEntry->NameInformation.FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitFcb Acquiring Fcb lock %08lX EXCL %08lX\n",
+ "AFSInitFcb Acquiring Fcb lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->Resource,
PsGetCurrentThread());
AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitFcb Initialized Fcb %08lX Name %wZ\n",
+ "AFSInitFcb Initialized Fcb %p Name %wZ\n",
&pObjectInfo->Fcb,
&DirEntry->NameInformation.FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitVolume Increment count on volume %08lX Cnt %d\n",
+ "AFSInitVolume Increment count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
// into the volume tree ...
//
- pVolumeCB = (AFSVolumeCB *)AFSExAllocatePoolWithTag( NonPagedPool,
+ pVolumeCB = (AFSVolumeCB *)AFSExAllocatePoolWithTag( PagedPool,
sizeof( AFSVolumeCB),
AFS_VCB_ALLOCATION_TAG);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitVolume Initializing count (2) on volume %08lX\n",
+ "AFSInitVolume Initializing count (2) on volume %p\n",
pVolumeCB);
pVolumeCB->VolumeReferenceCount = 2;
AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitRootFcb Acquiring Fcb lock %08lX EXCL %08lX\n",
+ "AFSInitRootFcb Acquiring Fcb lock %p EXCL %08lX\n",
&pNPFcb->Resource,
PsGetCurrentThread());
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSRemoveFcb Removing Fcb %08lX\n",
+ "AFSRemoveFcb Removing Fcb %p\n",
pFcb);
if( pFcb->Header.NodeTypeCode == AFS_FILE_FCB)
}
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
//
//
// Return:
//
-// A status is returned for the function
+// None
//
-NTSTATUS
+void
AFSRemoveCcb( IN AFSFcb *Fcb,
IN AFSCcb *Ccb)
{
- NTSTATUS ntStatus = STATUS_SUCCESS;
+ 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);
//
AFSExFreePoolWithTag( Ccb->NPCcb, AFS_CCB_NP_ALLOCATION_TAG);
AFSExFreePoolWithTag( Ccb, AFS_CCB_ALLOCATION_TAG);
-
- return ntStatus;
}
NTSTATUS