Windows: DirOpenReferenceCount reorganizing completed
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSCreate.cpp
index efe1a8c..d42220d 100644 (file)
@@ -73,7 +73,7 @@ AFSCreate( IN PDEVICE_OBJECT LibDeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCreate (%08lX) Processing control device open request\n",
+                          "AFSCreate (%p) Processing control device open request\n",
                           Irp);
 
             ntStatus = AFSControlDeviceCreate( Irp);
@@ -86,7 +86,7 @@ AFSCreate( IN PDEVICE_OBJECT LibDeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCreate (%08lX) Invalid request to open before library is initialized\n",
+                          "AFSCreate (%p) Invalid request to open before library is initialized\n",
                           Irp);
 
             try_return( ntStatus = STATUS_DEVICE_NOT_READY);
@@ -144,6 +144,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
     AFSNameArrayHdr    *pNameArray = NULL;
     AFSVolumeCB        *pVolumeCB = NULL;
     AFSDirectoryCB     *pParentDirectoryCB = NULL, *pDirectoryCB = NULL;
+    BOOLEAN             bReleaseParentDir = FALSE, bReleaseDir = FALSE;
     ULONG               ulParseFlags = 0;
     GUID                stAuthGroup = {0};
     ULONG               ulNameProcessingFlags = 0;
@@ -198,7 +199,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_WARNING,
-                          "AFSCommonCreate (%08lX) Open request after shutdown\n",
+                          "AFSCommonCreate (%p) Open request after shutdown\n",
                           Irp);
 
             try_return( ntStatus = STATUS_TOO_LATE);
@@ -242,7 +243,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           uniFileName.Length > 0 ? AFS_TRACE_LEVEL_ERROR : AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonCreate (%08lX) Failed to parse name \"%wZ\" Status %08lX\n",
+                          "AFSCommonCreate (%p) Failed to parse name \"%wZ\" Status %08lX\n",
                           Irp,
                           &uniFileName,
                           ntStatus);
@@ -266,6 +267,12 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
             try_return( ntStatus);
         }
 
+        if ( pParentDirectoryCB != NULL)
+        {
+
+            bReleaseParentDir = TRUE;
+        }
+
         //
         // If the returned volume cb is NULL then we are dealing with the \\Server\GlobalRoot
         // name
@@ -317,6 +324,11 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                              TRUE) == 0)
                 {
 
+                    //
+                    // AFSOpenIOCtlFcb does not free a DirOpenReferenceCount for
+                    // AFSGlobalRoot->DirectoryCB.
+                    //
+
                     ntStatus = AFSOpenIOCtlFcb( Irp,
                                                 &stAuthGroup,
                                                 AFSGlobalRoot->DirectoryCB,
@@ -332,23 +344,26 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                       ntStatus);
                     }
                 }
-                else if( pParentDirectoryCB != NULL &&
-                         pParentDirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SPECIAL_SHARE_NAME)
+                else if( pParentDirectoryCB != NULL)
                 {
 
-                    ntStatus = AFSOpenSpecialShareFcb( Irp,
-                                                       &stAuthGroup,
-                                                       pParentDirectoryCB,
-                                                       &pFcb,
-                                                       &pCcb);
-
-                    if( !NT_SUCCESS( ntStatus))
+                    if( pParentDirectoryCB->ObjectInformation->FileType == AFS_FILE_TYPE_SPECIAL_SHARE_NAME)
                     {
 
-                        AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
-                                      AFS_TRACE_LEVEL_ERROR,
-                                      "AFSCommonCreate Failed to open special share Fcb Status %08lX\n",
-                                      ntStatus);
+                        ntStatus = AFSOpenSpecialShareFcb( Irp,
+                                                           &stAuthGroup,
+                                                           pParentDirectoryCB,
+                                                           &pFcb,
+                                                           &pCcb);
+
+                        if( !NT_SUCCESS( ntStatus))
+                        {
+
+                            AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                                          AFS_TRACE_LEVEL_ERROR,
+                                          "AFSCommonCreate Failed to open special share Fcb Status %08lX\n",
+                                          ntStatus);
+                        }
                     }
                 }
 
@@ -366,18 +381,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                               AFS_TRACE_LEVEL_ERROR,
                               "AFSCommonCreate Failed to open root Status %08lX\n",
                               ntStatus);
-
-                lCount = InterlockedDecrement( &AFSGlobalRoot->DirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement1 count on &wZ DE %p Ccb %p Cnt %d\n",
-                              &AFSGlobalRoot->DirectoryCB->NameInformation.FileName,
-                              AFSGlobalRoot->DirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
             }
 
             try_return( ntStatus);
@@ -408,7 +411,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate (%08lX) Invalid name %wZ Status %08lX\n",
+                              "AFSCommonCreate (%p) Invalid name %wZ Status %08lX\n",
                               Irp,
                               &uniFileName,
                               ntStatus);
@@ -452,13 +455,13 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                 }
 
                 //
-                // The routine above released the root while walking the
+                // AFSLocateNameEntry released the Parent while walking the
                 // branch
                 //
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate (%08lX) Failed to locate name entry for %wZ Status %08lX\n",
+                              "AFSCommonCreate (%p) Failed to locate name entry for %wZ Status %08lX\n",
                               Irp,
                               &uniFileName,
                               ntStatus);
@@ -469,6 +472,8 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 bReleaseVolume = FALSE;
 
+                bReleaseParentDir = FALSE;
+
                 try_return( ntStatus);
             }
 
@@ -493,6 +498,8 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 bReleaseVolume = FALSE;
 
+                bReleaseParentDir = FALSE;
+
                 try_return( ntStatus);
             }
 
@@ -519,6 +526,10 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                 pParentDirectoryCB != NULL)
             {
 
+                //
+                // pParentDirectoryCB DirOpenReferenceCount is still held
+                //
+
                 UNICODE_STRING uniFinalComponent;
 
                 uniFinalComponent.Length = 0;
@@ -537,7 +548,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                   AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonCreate (%08lX) Failing access to symlink %wZ Status %08lX\n",
+                                  "AFSCommonCreate (%p) Failing access to symlink %wZ Status %08lX\n",
                                   Irp,
                                   &uniFileName,
                                   ntStatus);
@@ -545,6 +556,23 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                     try_return( ntStatus);
                 }
             }
+            else
+            {
+
+                //
+                // AFSLocateNameEntry succeeded.  The parent directory reference
+                // has been released and if there is a directory returned, it is
+                // referenced.
+                //
+
+                bReleaseParentDir = FALSE;
+
+                if ( pDirectoryCB)
+                {
+
+                    bReleaseDir = TRUE;
+                }
+            }
         }
 
         //
@@ -557,6 +585,18 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
         {
 
             pDirectoryCB = pVolumeCB->DirectoryCB;
+
+            lCount = InterlockedIncrement( &pDirectoryCB->DirOpenReferenceCount);
+
+            AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSCommonCreate Increment0 count on %wZ DE %p Ccb %p Cnt %d\n",
+                          &pDirectoryCB->NameInformation.FileName,
+                          pDirectoryCB,
+                          pCcb,
+                          lCount);
+
+            bReleaseDir = TRUE;
         }
 
         if( bOpenTargetDirectory)
@@ -569,19 +609,25 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
             if( pDirectoryCB != NULL)
             {
 
-                //
-                // Perform in this order to prevent thrashing
-                //
+                if ( !bReleaseParentDir)
+                {
 
-                lCount = InterlockedIncrement( &pParentDirectoryCB->DirOpenReferenceCount);
+                    //
+                    // Perform in this order to prevent thrashing
+                    //
 
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Increment1 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pParentDirectoryCB->NameInformation.FileName,
-                              pParentDirectoryCB,
-                              NULL,
-                              lCount);
+                    lCount = InterlockedIncrement( &pParentDirectoryCB->DirOpenReferenceCount);
+
+                    AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+                                  AFS_TRACE_LEVEL_VERBOSE,
+                                  "AFSCommonCreate Increment1 count on %wZ DE %p Ccb %p Cnt %d\n",
+                                  &pParentDirectoryCB->NameInformation.FileName,
+                                  pParentDirectoryCB,
+                                  pCcb,
+                                  lCount);
+
+                    bReleaseParentDir = TRUE;
+                }
 
                 //
                 // Do NOT decrement the reference count on the pDirectoryCB yet.
@@ -610,23 +656,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                                &uniComponentName,
                                                &pFcb,
                                                &pCcb);
-            if( pDirectoryCB != NULL)
-            {
-                //
-                // It is now safe to drop the Reference Count
-                //
-                lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pDirectoryCB->NameInformation.FileName,
-                              pDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
-            }
 
             if( !NT_SUCCESS( ntStatus))
             {
@@ -636,22 +665,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                               "AFSCommonCreate Failed to open target directory %wZ Status %08lX\n",
                               &pParentDirectoryCB->NameInformation.FileName,
                               ntStatus);
-
-                //
-                // Decrement the reference on the parent
-                //
-
-                lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement3 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pParentDirectoryCB->NameInformation.FileName,
-                              pParentDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
             }
 
             try_return( ntStatus);
@@ -665,7 +678,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
             {
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate (%08lX) Reparse open request but attribute not set for %wZ DirCB %p Type %08lX\n",
+                              "AFSCommonCreate (%p) Reparse open request but attribute not set for %wZ DirCB %p Type %08lX\n",
                               Irp,
                               &uniFileName,
                               pDirectoryCB,
@@ -675,7 +688,7 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
             {
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate (%08lX) Opening as reparse point %wZ Type %08lX\n",
+                              "AFSCommonCreate (%p) Opening as reparse point %wZ Type %08lX\n",
                               Irp,
                               &uniFileName,
                               pDirectoryCB->ObjectInformation->FileType);
@@ -711,18 +724,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                   "AFSCommonCreate Object name collision on create of %wZ Status %08lX\n",
                                   &pDirectoryCB->NameInformation.FileName,
                                   ntStatus);
-
-                    lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                    AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                                  AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonCreate Decrement4 count on %wZ DE %p Ccb %p Cnt %d\n",
-                                  &pDirectoryCB->NameInformation.FileName,
-                                  pDirectoryCB,
-                                  NULL,
-                                  lCount);
-
-                    ASSERT( lCount >= 0);
                 }
                 else
                 {
@@ -731,18 +732,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                   AFS_TRACE_LEVEL_VERBOSE,
                                   "AFSCommonCreate Object name collision on create Status %08lX\n",
                                   ntStatus);
-
-                    lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
-
-                    AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                                  AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonCreate Decrement5 count on %wZ DE %p Ccb %p Cnt %d\n",
-                                  &pParentDirectoryCB->NameInformation.FileName,
-                                  pParentDirectoryCB,
-                                  NULL,
-                                  lCount);
-
-                    ASSERT( lCount >= 0);
                 }
 
                 try_return( ntStatus = STATUS_OBJECT_NAME_COLLISION);
@@ -773,22 +762,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                               ntStatus);
             }
 
-            //
-            // Dereference the parent entry
-            //
-
-            lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
-
-            AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                          AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCreate Decrement6 count on %wZ DE %p Ccb %p Cnt %d\n",
-                          &pParentDirectoryCB->NameInformation.FileName,
-                          pParentDirectoryCB,
-                          NULL,
-                          lCount);
-
-            ASSERT( lCount >= 0);
-
             try_return( ntStatus);
         }
 
@@ -808,6 +781,11 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                                          TRUE) == 0)
             {
 
+                //
+                // AFSOpenIOCtlFcb does not free a DirOpenReferenceCount for
+                // pParentDirectoryCB.
+                //
+
                 ntStatus = AFSOpenIOCtlFcb( Irp,
                                             &stAuthGroup,
                                             pParentDirectoryCB,
@@ -829,52 +807,13 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate (%08lX) File %wZ name not found\n",
+                              "AFSCommonCreate (%p) File %wZ name not found\n",
                               Irp,
                               &uniFileName);
 
                 ntStatus = STATUS_OBJECT_NAME_NOT_FOUND;
             }
 
-            if( !NT_SUCCESS( ntStatus))
-            {
-
-                //
-                // Dereference the parent entry
-                //
-
-                if( pDirectoryCB != NULL)
-                {
-
-                    lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                    AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                                  AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonCreate Decrement7a count on %wZ DE %p Ccb %p Cnt %d\n",
-                                  &pDirectoryCB->NameInformation.FileName,
-                                  pDirectoryCB,
-                                  NULL,
-                                  lCount);
-
-                    ASSERT( lCount >= 0);
-                }
-                else
-                {
-
-                    lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
-
-                    AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                                  AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonCreate Decrement7b count on %wZ DE %p Ccb %p Cnt %d\n",
-                                  &pParentDirectoryCB->NameInformation.FileName,
-                                  pParentDirectoryCB,
-                                  NULL,
-                                  lCount);
-
-                    ASSERT( lCount >= 0);
-                }
-            }
-
             try_return( ntStatus);
         }
 
@@ -894,21 +833,9 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonCreate (%08lX) Attempt to open root as delete on close\n",
+                              "AFSCommonCreate (%p) Attempt to open root as delete on close\n",
                               Irp);
 
-                lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement8 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pDirectoryCB->NameInformation.FileName,
-                              pDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
-
                 try_return( ntStatus = STATUS_CANNOT_DELETE);
             }
 
@@ -921,21 +848,9 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonCreate (%08lX) Attempt to open root as target directory\n",
+                              "AFSCommonCreate (%p) Attempt to open root as target directory\n",
                               Irp);
 
-                lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement9 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pDirectoryCB->NameInformation.FileName,
-                              pDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
-
                 try_return( ntStatus = STATUS_INVALID_PARAMETER);
             }
 
@@ -958,18 +873,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                               pVolumeCB->ObjectInformation.FileId.Cell,
                               pVolumeCB->ObjectInformation.FileId.Volume,
                               ntStatus);
-
-                lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement10 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pDirectoryCB->NameInformation.FileName,
-                              pDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
             }
 
             try_return( ntStatus);
@@ -1016,18 +919,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                               "AFSCommonCreate Failed overwrite/supersede on %wZ Status %08lX\n",
                               &pDirectoryCB->NameInformation.FileName,
                               ntStatus);
-
-                lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                              AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSCommonCreate Decrement11 count on %wZ DE %p Ccb %p Cnt %d\n",
-                              &pDirectoryCB->NameInformation.FileName,
-                              pDirectoryCB,
-                              NULL,
-                              lCount);
-
-                ASSERT( lCount >= 0);
             }
 
             try_return( ntStatus);
@@ -1053,18 +944,6 @@ AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
                           "AFSCommonCreate Failed open on %wZ Status %08lX\n",
                           &pDirectoryCB->NameInformation.FileName,
                           ntStatus);
-
-            lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
-
-            AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                          AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonCreate Decrement12 count on %wZ DE %p Ccb %p Cnt %d\n",
-                          &pDirectoryCB->NameInformation.FileName,
-                          pDirectoryCB,
-                          NULL,
-                          lCount);
-
-            ASSERT( lCount >= 0);
         }
 
 try_exit:
@@ -1150,7 +1029,7 @@ try_exit:
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE_2,
-                          "AFSCommonCreate (%08lX) FileObject %08lX FsContext %08lX FsContext2 %08lX\n",
+                          "AFSCommonCreate (%p) FileObject %p FsContext %08lX FsContext2 %08lX\n",
                           Irp,
                           pFileObject,
                           pFcb,
@@ -1225,7 +1104,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonCreate (%08lX) Returning with NULL Fcb FileObject %08lX FsContext %08lX FsContext2 %08lX\n",
+                              "AFSCommonCreate (%p) Returning with NULL Fcb FileObject %p FsContext %08lX FsContext2 %08lX\n",
                               Irp,
                               pFileObject,
                               pFcb,
@@ -1240,7 +1119,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonCreate (%08lX) STATUS_REPARSE FileObject %08lX FsContext %08lX FsContext2 %08lX\n",
+                              "AFSCommonCreate (%p) STATUS_REPARSE FileObject %p FsContext %08lX FsContext2 %08lX\n",
                               Irp,
                               pFileObject,
                               pFcb,
@@ -1288,6 +1167,46 @@ try_exit:
                           lCount);
         }
 
+        if ( bReleaseDir)
+        {
+
+            //
+            // Release the reference from AFSLocateNameEntry
+            //
+
+            lCount = InterlockedDecrement( &pDirectoryCB->DirOpenReferenceCount);
+
+            AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSCommonCreate Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
+                          &pDirectoryCB->NameInformation.FileName,
+                          pDirectoryCB,
+                          pCcb,
+                          lCount);
+
+            ASSERT( lCount >= 0);
+        }
+
+        if ( bReleaseParentDir)
+        {
+
+            //
+            // Release the reference from AFSLocateNameEntry
+            //
+
+            lCount = InterlockedDecrement( &pParentDirectoryCB->DirOpenReferenceCount);
+
+            AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSCommonCreate Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
+                          &pParentDirectoryCB->NameInformation.FileName,
+                          pParentDirectoryCB,
+                          pCcb,
+                          lCount);
+
+            ASSERT( lCount >= 0);
+        }
+
         //
         // Setup the Irp for completion, the Information has been set previously
         //
@@ -1314,26 +1233,23 @@ AFSOpenAFSRoot( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               AFSGlobalRoot->DirectoryCB,
+                               0,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenAFSRoot (%08lX) Failed to allocate Ccb\n",
+                          "AFSOpenAFSRoot (%p) Failed to allocate Ccb\n",
                           Irp);
 
             try_return( ntStatus);
         }
 
         //
-        // Setup the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = AFSGlobalRoot->DirectoryCB;
-
-        //
         // Increment the open count on this Fcb
         //
 
@@ -1341,7 +1257,7 @@ AFSOpenAFSRoot( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenAFSRoot Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenAFSRoot Increment count on Fcb %p Cnt %d\n",
                       AFSGlobalRoot->RootFcb,
                       lCount);
 
@@ -1349,7 +1265,7 @@ AFSOpenAFSRoot( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenAFSRoot Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenAFSRoot Increment handle count on Fcb %p Cnt %d\n",
                       AFSGlobalRoot->RootFcb,
                       lCount);
 
@@ -1406,7 +1322,7 @@ AFSOpenRoot( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenRoot (%08lX) Attempt to open root as file Status %08lX\n",
+                          "AFSOpenRoot (%p) Attempt to open root as file Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -1427,7 +1343,7 @@ AFSOpenRoot( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenRoot (%08lX) Failed to validate root entry Status %08lX\n",
+                          "AFSOpenRoot (%p) Failed to validate root entry Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -1476,7 +1392,7 @@ AFSOpenRoot( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenRoot (%08lX) Failed open in service volume %08lX-%08lX AuthGroup %wZ Status %08lX\n",
+                          "AFSOpenRoot (%p) Failed open in service volume %08lX-%08lX AuthGroup %wZ Status %08lX\n",
                           Irp,
                           VolumeCB->ObjectInformation.FileId.Cell,
                           VolumeCB->ObjectInformation.FileId.Volume,
@@ -1515,7 +1431,7 @@ AFSOpenRoot( IN PIRP Irp,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSOpenRoot (%08lX) Failed to enumerate directory Status %08lX\n",
+                                  "AFSOpenRoot (%p) Failed to enumerate directory Status %08lX\n",
                                   Irp,
                                   ntStatus);
 
@@ -1572,7 +1488,7 @@ AFSOpenRoot( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSOpenRoot (%08lX) Access check failure Status %08lX\n",
+                              "AFSOpenRoot (%p) Access check failure Status %08lX\n",
                               Irp,
                               ntStatus);
 
@@ -1584,14 +1500,17 @@ AFSOpenRoot( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               VolumeCB->DirectoryCB,
+                               *pDesiredAccess,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenRoot (%08lX) Failed to allocate Ccb Status %08lX\n",
+                          "AFSOpenRoot (%p) Failed to allocate Ccb Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -1601,14 +1520,6 @@ AFSOpenRoot( IN PIRP Irp,
         bAllocatedCcb = TRUE;
 
         //
-        // Setup the ccb
-        //
-
-        (*Ccb)->DirectoryCB = VolumeCB->DirectoryCB;
-
-        (*Ccb)->GrantedAccess = *pDesiredAccess;
-
-        //
         // OK, update the share access on the fileobject
         //
 
@@ -1639,7 +1550,7 @@ AFSOpenRoot( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenRoot Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenRoot Increment count on Fcb %p Cnt %d\n",
                       VolumeCB->RootFcb,
                       lCount);
 
@@ -1647,7 +1558,7 @@ AFSOpenRoot( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenRoot Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenRoot Increment handle count on Fcb %p Cnt %d\n",
                       VolumeCB->RootFcb,
                       lCount);
 
@@ -1749,7 +1660,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessCreate (%08lX) Creating file %wZ Attributes %08lX\n",
+                      "AFSProcessCreate (%p) Creating file %wZ Attributes %08lX\n",
                       Irp,
                       FullFileName,
                       ulAttributes);
@@ -1784,7 +1695,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessCreate (%08lX) Failed to create directory entry %wZ Status %08lX\n",
+                          "AFSProcessCreate (%p) Failed to create directory entry %wZ Status %08lX\n",
                           Irp,
                           FullFileName,
                           ntStatus);
@@ -1802,7 +1713,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSProcessCreate (%08lX) Evaluating object %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+                          "AFSProcessCreate (%p) Evaluating object %wZ FID %08lX-%08lX-%08lX-%08lX\n",
                           Irp,
                           &pDirEntry->NameInformation.FileName,
                           pObjectInfo->FileId.Cell,
@@ -1824,7 +1735,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                       AFS_TRACE_LEVEL_ERROR,
-                                      "AFSProcessCreate (%08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+                                      "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
                                       Irp,
                                       &pDirEntry->NameInformation.FileName,
                                       pObjectInfo->FileId.Cell,
@@ -1842,7 +1753,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                       AFS_TRACE_LEVEL_ERROR,
-                                      "AFSProcessCreate (%08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != NULL Status %08lX\n",
+                                      "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != NULL Status %08lX\n",
                                       Irp,
                                       &pDirEntry->NameInformation.FileName,
                                       pObjectInfo->FileId.Cell,
@@ -1860,7 +1771,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                       AFS_TRACE_LEVEL_ERROR,
-                                      "AFSProcessCreate (%08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+                                      "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX != %08lX-%08lX-%08lX-%08lX Status %08lX\n",
                                       Irp,
                                       &pDirEntry->NameInformation.FileName,
                                       pObjectInfo->FileId.Cell,
@@ -1883,7 +1794,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSProcessCreate (%08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+                                  "AFSProcessCreate (%p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
                                   Irp,
                                   &pDirEntry->NameInformation.FileName,
                                   pObjectInfo->FileId.Cell,
@@ -1916,7 +1827,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessCreate (%08lX) Failed to initialize fcb %wZ Status %08lX\n",
+                          "AFSProcessCreate (%p) Failed to initialize fcb %wZ Status %08lX\n",
                           Irp,
                           FullFileName,
                           ntStatus);
@@ -1934,7 +1845,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessCreate Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessCreate Increment count on Fcb %p Cnt %d\n",
                       *Fcb,
                       lCount);
 
@@ -1944,14 +1855,17 @@ AFSProcessCreate( IN PIRP               Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               pDirEntry,
+                               *pDesiredAccess,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessCreate (%08lX) Failed to initialize ccb %wZ Status %08lX\n",
+                          "AFSProcessCreate (%p) Failed to initialize ccb %wZ Status %08lX\n",
                           Irp,
                           FullFileName,
                           ntStatus);
@@ -1962,14 +1876,6 @@ AFSProcessCreate( IN PIRP               Irp,
         bAllocatedCcb = TRUE;
 
         //
-        // Initialize the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = pDirEntry;
-
-        (*Ccb)->GrantedAccess = *pDesiredAccess;
-
-        //
         // If this is a file, update the headers filesizes.
         //
 
@@ -2054,7 +1960,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessCreate Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessCreate Increment handle count on Fcb %p Cnt %d\n",
                       (*Fcb),
                       lCount);
 
@@ -2066,7 +1972,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessCreate Increment child open handle count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessCreate Increment child open handle count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -2074,7 +1980,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessCreate Increment child open ref count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessCreate Increment child open ref count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -2087,7 +1993,7 @@ AFSProcessCreate( IN PIRP               Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSProcessCreate (%08lX) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
+                          "AFSProcessCreate (%p) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
                           Irp,
                           pDirEntry,
                           FullFileName);
@@ -2126,7 +2032,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessCreate Decrement count on Fcb %08lX Cnt %d\n",
+                              "AFSProcessCreate Decrement count on Fcb %p Cnt %d\n",
                               *Fcb,
                               lCount);
             }
@@ -2142,7 +2048,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessCreate Create failed, removing DE %p from aprent object %p Status %08lX\n",
+                              "AFSProcessCreate Create failed, removing DE %p from parent object %p Status %08lX\n",
                               pDirEntry,
                               pParentObjectInfo,
                               ntStatus);
@@ -2245,7 +2151,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenTargetDirectory (%08lX) Processing file %wZ\n",
+                      "AFSOpenTargetDirectory (%p) Processing file %wZ\n",
                       Irp,
                       TargetName);
 
@@ -2273,7 +2179,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenTargetDirectory (%08lX) Failed to initialize fcb %wZ Status %08lX\n",
+                          "AFSOpenTargetDirectory (%p) Failed to initialize fcb %wZ Status %08lX\n",
                           Irp,
                           &ParentDirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2291,7 +2197,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenTargetDirectory Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenTargetDirectory Increment count on Fcb %p Cnt %d\n",
                       pParentObject->Fcb,
                       lCount);
 
@@ -2315,7 +2221,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSOpenTargetDirectory (%08lX) Access check failure %wZ Status %08lX\n",
+                              "AFSOpenTargetDirectory (%p) Access check failure %wZ Status %08lX\n",
                               Irp,
                               &ParentDirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -2328,14 +2234,17 @@ AFSOpenTargetDirectory( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               ParentDirectoryCB,
+                               *pDesiredAccess,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenTargetDirectory (%08lX) Failed to initialize ccb %wZ Status %08lX\n",
+                          "AFSOpenTargetDirectory (%p) Failed to initialize ccb %wZ Status %08lX\n",
                           Irp,
                           &ParentDirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2345,14 +2254,6 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
         bAllocatedCcb = TRUE;
 
-        //
-        // Initialize the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = ParentDirectoryCB;
-
-        (*Ccb)->GrantedAccess = *pDesiredAccess;
-
         if( TargetDirectoryCB != NULL &&
             FsRtlAreNamesEqual( &TargetDirectoryCB->NameInformation.FileName,
                                 TargetName,
@@ -2409,7 +2310,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenTargetDirectory Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenTargetDirectory Increment handle count on Fcb %p Cnt %d\n",
                       pParentObject->Fcb,
                       lCount);
 
@@ -2424,7 +2325,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSOpenTargetDirectory Increment child open handle count on Parent object %08lX Cnt %d\n",
+                          "AFSOpenTargetDirectory Increment child open handle count on Parent object %p Cnt %d\n",
                           pParentObject->ParentObjectInformation,
                           lCount);
 
@@ -2432,7 +2333,7 @@ AFSOpenTargetDirectory( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSOpenTargetDirectory Increment child open ref count on Parent object %08lX Cnt %d\n",
+                          "AFSOpenTargetDirectory Increment child open ref count on Parent object %p Cnt %d\n",
                           pParentObject->ParentObjectInformation,
                           lCount);
         }
@@ -2452,7 +2353,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSOpenTargetDirectory Decrement count on Fcb %08lX Cnt %d\n",
+                              "AFSOpenTargetDirectory Decrement count on Fcb %p Cnt %d\n",
                               pParentObject->Fcb,
                               lCount);
             }
@@ -2532,7 +2433,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Entry pending delete %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Entry pending delete %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2560,7 +2461,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Failed to validate entry %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Failed to validate entry %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2586,7 +2487,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOpen (%08lX) Cannot delete entry %wZ marked for delete on close Status %08lX\n",
+                              "AFSProcessOpen (%p) Cannot delete entry %wZ marked for delete on close Status %08lX\n",
                               Irp,
                               &DirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -2606,7 +2507,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Failed to init fcb on %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Failed to init fcb on %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2630,7 +2531,7 @@ AFSProcessOpen( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOpen Increment2 count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessOpen Increment2 count on Fcb %p Cnt %d\n",
                       pObjectInfo->Fcb,
                       lCount);
 
@@ -2652,7 +2553,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOpen (%08lX) Failed to check share access on %wZ Status %08lX\n",
+                              "AFSProcessOpen (%p) Failed to check share access on %wZ Status %08lX\n",
                               Irp,
                               &DirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -2680,7 +2581,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessOpen Acquiring Fcb SectionObject lock %08lX EXCL %08lX\n",
+                              "AFSProcessOpen Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
                               &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
                               PsGetCurrentThread());
 
@@ -2692,7 +2593,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessOpen Releasing Fcb SectionObject lock %08lX EXCL %08lX\n",
+                              "AFSProcessOpen Releasing Fcb SectionObject lock %p EXCL %08lX\n",
                               &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
                               PsGetCurrentThread());
 
@@ -2706,7 +2607,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSProcessOpen (%08lX) Failed to flush image section %wZ Status %08lX\n",
+                                  "AFSProcessOpen (%p) Failed to flush image section %wZ Status %08lX\n",
                                   Irp,
                                   &DirectoryCB->NameInformation.FileName,
                                   ntStatus);
@@ -2722,7 +2623,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOpen (%08lX) Attempt to open file as directory %wZ Status %08lX\n",
+                              "AFSProcessOpen (%p) Attempt to open file as directory %wZ Status %08lX\n",
                               Irp,
                               &DirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -2743,7 +2644,7 @@ AFSProcessOpen( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOpen (%08lX) Attempt to open directory as file %wZ Status %08lX\n",
+                              "AFSProcessOpen (%p) Attempt to open directory as file %wZ Status %08lX\n",
                               Irp,
                               &DirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -2797,7 +2698,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Failed open in service %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Failed open in service %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2824,7 +2725,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Failed to check access from service Desired %08lX Granted %08lX Entry %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Failed to check access from service Desired %08lX Granted %08lX Entry %wZ Status %08lX\n",
                           Irp,
                           *pDesiredAccess,
                           stOpenResultCB.GrantedAccess,
@@ -2838,14 +2739,17 @@ AFSProcessOpen( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               DirectoryCB,
+                               *pDesiredAccess,
+                               ulFileAccess);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOpen (%08lX) Failed to initialize ccb %wZ Status %08lX\n",
+                          "AFSProcessOpen (%p) Failed to initialize ccb %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -2855,12 +2759,6 @@ AFSProcessOpen( IN PIRP Irp,
 
         bAllocatedCcb = TRUE;
 
-        (*Ccb)->DirectoryCB = DirectoryCB;
-
-        (*Ccb)->FileAccess = ulFileAccess;
-
-        (*Ccb)->GrantedAccess = *pDesiredAccess;
-
         //
         // Perform the access check on the target if this is a mount point or symlink
         //
@@ -2888,7 +2786,7 @@ AFSProcessOpen( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOpen Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessOpen Increment handle count on Fcb %p Cnt %d\n",
                       pObjectInfo->Fcb,
                       lCount);
 
@@ -2900,7 +2798,7 @@ AFSProcessOpen( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOpen Increment child open handle count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessOpen Increment child open handle count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -2908,7 +2806,7 @@ AFSProcessOpen( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOpen Increment child open ref count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessOpen Increment child open ref count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -2921,7 +2819,7 @@ AFSProcessOpen( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSProcessOpen (%08lX) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
+                          "AFSProcessOpen (%p) Setting PENDING_DELETE flag in DirEntry %p Name %wZ\n",
                           Irp,
                           DirectoryCB,
                           &DirectoryCB->NameInformation.FileName);
@@ -2958,7 +2856,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessOpen Decrement2 count on Fcb %08lX Cnt %d\n",
+                              "AFSProcessOpen Decrement2 count on Fcb %p Cnt %d\n",
                               pObjectInfo->Fcb,
                               lCount);
             }
@@ -3081,7 +2979,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOverwriteSupersede (%08lX) Failed to validate entry %wZ Status %08lX\n",
+                          "AFSProcessOverwriteSupersede (%p) Failed to validate entry %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -3102,7 +3000,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOverwriteSupersede (%08lX) Failed to initialize fcb %wZ Status %08lX\n",
+                          "AFSProcessOverwriteSupersede (%p) Failed to initialize fcb %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -3120,7 +3018,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupersede Increment2 count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessOverwriteSupersede Increment2 count on Fcb %p Cnt %d\n",
                       pObjectInfo->Fcb,
                       lCount);
 
@@ -3144,7 +3042,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOverwriteSupersede (%08lX) Access check failure %wZ Status %08lX\n",
+                              "AFSProcessOverwriteSupersede (%p) Access check failure %wZ Status %08lX\n",
                               Irp,
                               &DirectoryCB->NameInformation.FileName,
                               ntStatus);
@@ -3155,7 +3053,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupercede Acquiring Fcb SectionObject lock %08lX EXCL %08lX\n",
+                      "AFSProcessOverwriteSupercede Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
                       &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
                       PsGetCurrentThread());
 
@@ -3172,7 +3070,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupercede Releasing Fcb SectionObject lock %08lX EXCL %08lX\n",
+                      "AFSProcessOverwriteSupercede Releasing Fcb SectionObject lock %p EXCL %08lX\n",
                       &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
                       PsGetCurrentThread());
 
@@ -3185,7 +3083,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOverwriteSupersede (%08lX) File user mapped %wZ Status %08lX\n",
+                          "AFSProcessOverwriteSupersede (%p) File user mapped %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -3197,14 +3095,17 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               DirectoryCB,
+                               *pDesiredAccess,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOverwriteSupersede (%08lX) Failed to initialize ccb %wZ Status %08lX\n",
+                          "AFSProcessOverwriteSupersede (%p) Failed to initialize ccb %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -3215,14 +3116,6 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
         bAllocatedCcb = TRUE;
 
         //
-        // Initialize the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = DirectoryCB;
-
-        (*Ccb)->GrantedAccess = *pDesiredAccess;
-
-        //
         // Set the file length to zero
         //
 
@@ -3282,7 +3175,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSProcessOverwriteSupersede (%08lX) Failed to update file information %wZ Status %08lX\n",
+                          "AFSProcessOverwriteSupersede (%p) Failed to update file information %wZ Status %08lX\n",
                           Irp,
                           &DirectoryCB->NameInformation.FileName,
                           ntStatus);
@@ -3346,7 +3239,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupersede Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSProcessOverwriteSupersede Increment handle count on Fcb %p Cnt %d\n",
                       pObjectInfo->Fcb,
                       lCount);
 
@@ -3358,7 +3251,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupersede Increment child open handle count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessOverwriteSupersede Increment child open handle count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -3366,7 +3259,7 @@ AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSProcessOverwriteSupersede Increment child open ref count on Parent object %08lX Cnt %d\n",
+                      "AFSProcessOverwriteSupersede Increment child open ref count on Parent object %p Cnt %d\n",
                       pObjectInfo->ParentObjectInformation,
                       lCount);
 
@@ -3412,7 +3305,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSProcessOverwriteSupersede Decrement2 count on Fcb %08lX Cnt %d\n",
+                              "AFSProcessOverwriteSupersede Decrement2 count on Fcb %p Cnt %d\n",
                               pObjectInfo->Fcb,
                               lCount);
             }
@@ -3472,6 +3365,11 @@ AFSControlDeviceCreate( IN PIRP Irp)
     return ntStatus;
 }
 
+//
+// AFSOpenIOCtlFcb does not release a DirOpenReferenceCount on
+// the ParentDirCB.
+//
+
 NTSTATUS
 AFSOpenIOCtlFcb( IN PIRP Irp,
                  IN GUID *AuthGroup,
@@ -3525,7 +3423,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenIOCtlFcb (%08lX) Failed to initialize fcb Status %08lX\n",
+                          "AFSOpenIOCtlFcb (%p) Failed to initialize fcb Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -3542,7 +3440,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenIOCtlFcb Increment count on Fcb %p Cnt %d\n",
                       (*Fcb),
                       lCount);
 
@@ -3552,14 +3450,17 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               pParentObjectInfo->Specific.Directory.PIOCtlDirectoryCB,
+                               0,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenIOCtlFcb (%08lX) Failed to initialize ccb Status %08lX\n",
+                          "AFSOpenIOCtlFcb (%p) Failed to initialize ccb Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -3569,12 +3470,6 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
         bAllocatedCcb = TRUE;
 
         //
-        // Setup the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = pParentObjectInfo->Specific.Directory.PIOCtlDirectoryCB;
-
-        //
         // Set the PIOCtl index
         //
 
@@ -3615,7 +3510,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenIOCtlFcb (%08lX) Failed service open Status %08lX\n",
+                          "AFSOpenIOCtlFcb (%p) Failed service open Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -3623,20 +3518,6 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
         }
 
         //
-        // Reference the directory entry
-        //
-
-        lCount = InterlockedIncrement( &((*Ccb)->DirectoryCB->DirOpenReferenceCount));
-
-        AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                      AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Increment count on %wZ DE %p Ccb %p Cnt %d\n",
-                      &(*Ccb)->DirectoryCB->NameInformation.FileName,
-                      (*Ccb)->DirectoryCB,
-                      (*Ccb),
-                      lCount);
-
-        //
         // Increment the handle on the node
         //
 
@@ -3644,7 +3525,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenIOCtlFcb Increment handle count on Fcb %p Cnt %d\n",
                       (*Fcb),
                       lCount);
 
@@ -3656,7 +3537,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Increment child open handle count on Parent object %08lX Cnt %d\n",
+                      "AFSOpenIOCtlFcb Increment child open handle count on Parent object %p Cnt %d\n",
                       pParentObjectInfo,
                       lCount);
 
@@ -3664,7 +3545,7 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Increment child open ref count on Parent object %08lX Cnt %d\n",
+                      "AFSOpenIOCtlFcb Increment child open ref count on Parent object %p Cnt %d\n",
                       pParentObjectInfo,
                       lCount);
 
@@ -3677,23 +3558,6 @@ AFSOpenIOCtlFcb( IN PIRP Irp,
 try_exit:
 
         //
-        //Dereference the passed in parent since the returned dir entry
-        // is already referenced
-        //
-
-        lCount = InterlockedDecrement( &ParentDirCB->DirOpenReferenceCount);
-
-        AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
-                      AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenIOCtlFcb Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
-                      &ParentDirCB->NameInformation.FileName,
-                      ParentDirCB,
-                      NULL,
-                      lCount);
-
-        ASSERT( lCount >= 0);
-
-        //
         // If we created the Fcb we need to release the resources
         //
 
@@ -3710,7 +3574,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSOpenIOCtlFcb Decrement count on Fcb %08lX Cnt %d\n",
+                              "AFSOpenIOCtlFcb Decrement count on Fcb %p Cnt %d\n",
                               (*Fcb),
                               lCount);
             }
@@ -3764,7 +3628,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE_2,
-                      "AFSOpenSpecialShareFcb (%08lX) Processing Share %wZ open\n",
+                      "AFSOpenSpecialShareFcb (%p) Processing Share %wZ open\n",
                       Irp,
                       &DirectoryCB->NameInformation.FileName);
 
@@ -3786,7 +3650,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSOpenSpecialShareFcb (%08lX) Failed to initialize fcb Status %08lX\n",
+                              "AFSOpenSpecialShareFcb (%p) Failed to initialize fcb Status %08lX\n",
                               Irp,
                               ntStatus);
 
@@ -3818,7 +3682,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenSpecialShareFcb Increment count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenSpecialShareFcb Increment count on Fcb %p Cnt %d\n",
                       (*Fcb),
                       lCount);
 
@@ -3828,14 +3692,17 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
         // Initialize the Ccb for the file.
         //
 
-        ntStatus = AFSInitCcb( Ccb);
+        ntStatus = AFSInitCcb( Ccb,
+                               DirectoryCB,
+                               0,
+                               0);
 
         if( !NT_SUCCESS( ntStatus))
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenSpecialShareFcb (%08lX) Failed to initialize ccb Status %08lX\n",
+                          "AFSOpenSpecialShareFcb (%p) Failed to initialize ccb Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -3845,12 +3712,6 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
         bAllocatedCcb = TRUE;
 
         //
-        // Setup the Ccb
-        //
-
-        (*Ccb)->DirectoryCB = DirectoryCB;
-
-        //
         // Call the service to open the share
         //
 
@@ -3882,7 +3743,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_PIPE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSOpenSpecialShareFcb (%08lX) Failed service open Status %08lX\n",
+                          "AFSOpenSpecialShareFcb (%p) Failed service open Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -3893,7 +3754,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenSpecialShareFcb Increment handle count on Fcb %08lX Cnt %d\n",
+                      "AFSOpenSpecialShareFcb Increment handle count on Fcb %p Cnt %d\n",
                       (*Fcb),
                       lCount);
 
@@ -3905,7 +3766,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenSpecialShareFcb Increment child open handle count on Parent object %08lX Cnt %d\n",
+                      "AFSOpenSpecialShareFcb Increment child open handle count on Parent object %p Cnt %d\n",
                       pParentObjectInfo,
                       lCount);
 
@@ -3913,7 +3774,7 @@ AFSOpenSpecialShareFcb( IN PIRP Irp,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSOpenSpecialShareFcb Increment child open ref count on Parent object %08lX Cnt %d\n",
+                      "AFSOpenSpecialShareFcb Increment child open ref count on Parent object %p Cnt %d\n",
                       pParentObjectInfo,
                       lCount);
 
@@ -3938,7 +3799,7 @@ try_exit:
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
                               AFS_TRACE_LEVEL_VERBOSE,
-                              "AFSOpenSpecialShareFcb Decrement count on Fcb %08lX Cnt %d\n",
+                              "AFSOpenSpecialShareFcb Decrement count on Fcb %p Cnt %d\n",
                               (*Fcb),
                               lCount);
             }