// Now assign the AuthGroup ACE
//
- AFSValidateProcessEntry( ProcessId);
+ AFSValidateProcessEntry( ProcessId,
+ TRUE);
}
else
{
//
GUID *
-AFSValidateProcessEntry( IN HANDLE ProcessId)
+AFSValidateProcessEntry( IN HANDLE ProcessId,
+ IN BOOLEAN bProcessTreeLocked)
{
GUID *pAuthGroup = NULL;
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSValidateProcessEntry Acquiring Control ProcessTree.TreeLock lock %08lX SHARED %08lX\n",
- pDeviceExt->Specific.Control.ProcessTree.TreeLock,
- PsGetCurrentThread());
-
uniSIDString.Length = 0;
uniSIDString.MaximumLength = 0;
uniSIDString.Buffer = NULL;
- AFSAcquireShared( pDeviceExt->Specific.Control.ProcessTree.TreeLock,
- TRUE);
+ if ( !bProcessTreeLocked)
+ {
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSValidateProcessEntry Acquiring Control ProcessTree.TreeLock lock %08lX SHARED %08lX\n",
+ pDeviceExt->Specific.Control.ProcessTree.TreeLock,
+ PsGetCurrentThread());
+
+ AFSAcquireShared( pDeviceExt->Specific.Control.ProcessTree.TreeLock,
+ TRUE);
+ }
AFSDbgLogMsg( AFS_SUBSYSTEM_AUTHGROUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
pProcessCB == NULL)
{
- AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
+ if ( !bProcessTreeLocked)
+ {
- AFSAcquireExcl( pDeviceExt->Specific.Control.ProcessTree.TreeLock,
- TRUE);
+ AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
+
+ AFSAcquireExcl( pDeviceExt->Specific.Control.ProcessTree.TreeLock,
+ TRUE);
+ }
ntStatus = AFSLocateHashEntry( pDeviceExt->Specific.Control.ProcessTree.TreeHead,
ullProcessID,
__FUNCTION__,
ullProcessID);
- AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
-
try_return( ntStatus = STATUS_UNSUCCESSFUL);
}
- AFSConvertToShared( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
+ if ( !bProcessTreeLocked)
+ {
+
+ AFSConvertToShared( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
+ }
}
//
AFSAcquireExcl( &pProcessCB->Lock,
TRUE);
- AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
-
#if defined(_WIN64)
//
{
RtlFreeUnicodeString( &uniSIDString);
}
+
+ if ( !bProcessTreeLocked)
+ {
+
+ AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock);
+ }
}
return pAuthGroup;