__Enter
{
- if( pAuthGroup == NULL)
+ if( pAuthGroup == NULL ||
+ RtlCompareMemory( pAuthGroup,
+ &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID)) == sizeof( GUID))
{
RtlZeroMemory( &stAuthGroup,
{
//
- // If this isn't the same process which caused the failure then try to request them again
+ // If this isn't the same authgroup which caused the failure
+ // then try to request them again
//
- if( Fcb->Specific.File.ExtentRequestProcessId == ullProcessId)
+ if( RtlCompareMemory( &pNPFcb->Specific.File.ExtentsRequestAuthGroup,
+ &Ccb->AuthGroup,
+ sizeof( GUID)) == sizeof( GUID))
{
- try_return( ntStatus = pNPFcb->Specific.File.ExtentsRequestStatus);
- }
- pNPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+ ntStatus = pNPFcb->Specific.File.ExtentsRequestStatus;
+
+ pNPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+
+ RtlZeroMemory( &pNPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID));
+
+ try_return( ntStatus);
+ }
}
//
pObjectInfo->Fcb->NPFcb->Specific.File.ExtentsRequestStatus = pFailureCB->FailureStatus;
+ RtlCopyMemory( &pObjectInfo->Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ &pFailureCB->AuthGroup,
+ sizeof( GUID));
+
KeSetEvent( &pObjectInfo->Fcb->NPFcb->Specific.File.ExtentsRequestComplete,
0,
FALSE);
}
NTSTATUS
-AFSWaitForExtentMapping( AFSFcb *Fcb )
+AFSWaitForExtentMapping( AFSFcb *Fcb,
+ AFSCcb *Ccb)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
LARGE_INTEGER liTimeOut;
{
//
- // If this isn't the same process which caused the failure then try to request them again
+ // If this isn't the same authgroup which caused the failure
+ // then try to request them again
//
- if( Fcb->Specific.File.ExtentRequestProcessId == ullProcessId)
+ if( RtlCompareMemory( &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ &Ccb->AuthGroup,
+ sizeof( GUID)) == sizeof( GUID))
{
- try_return( ntStatus = Fcb->NPFcb->Specific.File.ExtentsRequestStatus);
- }
- Fcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+ ntStatus = Fcb->NPFcb->Specific.File.ExtentsRequestStatus;
+
+ Fcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+
+ RtlZeroMemory( &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID));
+
+ try_return( ntStatus);
+ }
}
- liTimeOut.QuadPart = -(50000000);
+ liTimeOut.QuadPart = -(1 * AFS_ONE_SECOND);
ntStatus = KeWaitForSingleObject( &Fcb->NPFcb->Specific.File.ExtentsRequestComplete,
Executive,
{
//
- // If this isn't the same process which caused the failure
- // and this isn't the System process, then try to request them again
+ // If this isn't the same authgroup which caused the failure
+ // or the System Process,
+ // then try to request the extents again
//
- if( Fcb->Specific.File.ExtentRequestProcessId == ullProcessId ||
- ullProcessId == 0x4)
+ if( RtlCompareMemory( &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ &Ccb->AuthGroup,
+ sizeof( GUID)) == sizeof( GUID) ||
+ ullProcessId == (ULONGLONG)AFSSysProcess)
{
- try_return( ntStatus = Fcb->NPFcb->Specific.File.ExtentsRequestStatus);
- }
- Fcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+ ntStatus = Fcb->NPFcb->Specific.File.ExtentsRequestStatus;
+
+ Fcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_SUCCESS;
+
+ RtlZeroMemory( &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID));
+
+ try_return( ntStatus);
+ }
}
if( ntStatus == STATUS_TIMEOUT)
__Enter
{
- if( pAuthGroup == NULL)
+ if( pAuthGroup == NULL ||
+ RtlCompareMemory( pAuthGroup,
+ &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID)) == sizeof( GUID))
{
RtlZeroMemory( &stAuthGroup,
__Enter
{
- if( pAuthGroup == NULL)
+ if( pAuthGroup == NULL ||
+ RtlCompareMemory( pAuthGroup,
+ &Fcb->NPFcb->Specific.File.ExtentsRequestAuthGroup,
+ sizeof( GUID)) == sizeof( GUID))
{
RtlZeroMemory( &stAuthGroup,