IO_STATUS_BLOCK stIoSB;
AFSObjectInfoCB *pObjectInfo = NULL;
AFSFileCleanupCB stFileCleanup;
+ AFSFileCleanupResultCB *pResultCB = NULL;
+ ULONG ulResultLen = 0;
ULONG ulNotificationFlags = 0;
__try
stFileCleanup.Identifier = (ULONGLONG)pFileObject;
//
+ // Allocate our return buffer
+ //
+
+ pResultCB = (AFSFileCleanupResultCB *)AFSExAllocatePoolWithTag( PagedPool,
+ PAGE_SIZE,
+ AFS_GENERIC_MEMORY_32_TAG);
+
+ if( pResultCB == NULL)
+ {
+
+ try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
+ }
+
+ RtlZeroMemory( pResultCB,
+ PAGE_SIZE);
+
+ ulResultLen = PAGE_SIZE;
+
+
+ //
// Perform the cleanup functionality depending on the type of node it is
//
&pObjectInfo->FileId,
&stFileCleanup,
sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ pResultCB,
+ &ulResultLen);
if( !NT_SUCCESS( ntStatus) &&
ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
// Push the request to the service
//
- AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
- ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
- &pCcb->AuthGroup,
- &pCcb->DirectoryCB->NameInformation.FileName,
- &pObjectInfo->FileId,
- &stFileCleanup,
- sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ ntStatus = AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
+ ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
+ &pCcb->AuthGroup,
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ &pObjectInfo->FileId,
+ &stFileCleanup,
+ sizeof( AFSFileCleanupCB),
+ pResultCB,
+ &ulResultLen);
+
+ ntStatus = STATUS_SUCCESS;
}
//
&pObjectInfo->FileId,
&stFileCleanup,
sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ pResultCB,
+ &ulResultLen);
if( !NT_SUCCESS( ntStatus) &&
ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
stFileCleanup.FileAccess = pCcb->FileAccess;
- AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
- ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
- &pCcb->AuthGroup,
- &pCcb->DirectoryCB->NameInformation.FileName,
- &pObjectInfo->FileId,
- &stFileCleanup,
- sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ ntStatus = AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
+ ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
+ &pCcb->AuthGroup,
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ &pObjectInfo->FileId,
+ &stFileCleanup,
+ sizeof( AFSFileCleanupCB),
+ pResultCB,
+ &ulResultLen);
+
+ ntStatus = STATUS_SUCCESS;
}
//
&pObjectInfo->FileId,
&stFileCleanup,
sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ pResultCB,
+ &ulResultLen);
if( !NT_SUCCESS( ntStatus) &&
ntStatus != STATUS_OBJECT_NAME_NOT_FOUND)
stFileCleanup.FileAccess = pCcb->FileAccess;
- AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
- ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
- &pCcb->AuthGroup,
- &pCcb->DirectoryCB->NameInformation.FileName,
- &pObjectInfo->FileId,
- &stFileCleanup,
- sizeof( AFSFileCleanupCB),
- NULL,
- NULL);
+ ntStatus = AFSProcessRequest( AFS_REQUEST_TYPE_CLEANUP_PROCESSING,
+ ulNotificationFlags | AFS_REQUEST_FLAG_SYNCHRONOUS,
+ &pCcb->AuthGroup,
+ &pCcb->DirectoryCB->NameInformation.FileName,
+ &pObjectInfo->FileId,
+ &stFileCleanup,
+ sizeof( AFSFileCleanupCB),
+ pResultCB,
+ &ulResultLen);
+
+ ntStatus = STATUS_SUCCESS;
}
//
AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanup (Share) Decrement handle count on Fcb %08lX Cnt %d\n",
+ "AFSCleanup (MP/SL) Decrement handle count on Fcb %08lX Cnt %d\n",
pFcb,
pFcb->OpenHandleCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanup (MP/SL) Decrement handle count on Fcb %08lX Cnt %d\n",
+ "AFSCleanup (Share) Decrement handle count on Fcb %08lX Cnt %d\n",
pFcb,
pFcb->OpenHandleCount);
try_exit:
+ if( pResultCB != NULL)
+ {
+
+ AFSExFreePool( pResultCB);
+ }
+
if( pFileObject != NULL)
{