From bd09d06c3f5bb81023b438e43c4b9b49d663bb34 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 3 Jan 2012 23:58:04 -0500 Subject: [PATCH] Windows: Return Dir Data Version from AFSCleanup This patchset returns the directory data version from AFSCleanup(). It does not do anything with it. Change-Id: I86ac37f9e237bfec3ea612b896bec4ed7d43d068 Reviewed-on: http://gerrit.openafs.org/6505 Tested-by: BuildBot Reviewed-by: Peter Scott Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsrdr/common/AFSRedirCommonDefines.h | 1 + src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp | 100 ++++++++++++++++-------- 2 files changed, 68 insertions(+), 33 deletions(-) diff --git a/src/WINNT/afsrdr/common/AFSRedirCommonDefines.h b/src/WINNT/afsrdr/common/AFSRedirCommonDefines.h index 969c1a4..b3a8177 100644 --- a/src/WINNT/afsrdr/common/AFSRedirCommonDefines.h +++ b/src/WINNT/afsrdr/common/AFSRedirCommonDefines.h @@ -71,6 +71,7 @@ #define AFS_GENERIC_MEMORY_29_TAG 'TGFA' #define AFS_GENERIC_MEMORY_30_TAG 'UGFA' #define AFS_GENERIC_MEMORY_31_TAG 'VGFA' +#define AFS_GENERIC_MEMORY_32_TAG 'WGFA' #define AFS_FCB_ALLOCATION_TAG 'AFFA' #define AFS_FCB_NP_ALLOCATION_TAG 'NFFA' #define AFS_VCB_ALLOCATION_TAG 'CVFA' diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp index 70ceb02..fa8e473 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp @@ -66,6 +66,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, IO_STATUS_BLOCK stIoSB; AFSObjectInfoCB *pObjectInfo = NULL; AFSFileCleanupCB stFileCleanup; + AFSFileCleanupResultCB *pResultCB = NULL; + ULONG ulResultLen = 0; ULONG ulNotificationFlags = 0; __try @@ -111,6 +113,26 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, 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 // @@ -411,8 +433,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, &pObjectInfo->FileId, &stFileCleanup, sizeof( AFSFileCleanupCB), - NULL, - NULL); + pResultCB, + &ulResultLen); if( !NT_SUCCESS( ntStatus) && ntStatus != STATUS_OBJECT_NAME_NOT_FOUND) @@ -535,15 +557,17 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, // 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; } // @@ -711,8 +735,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, &pObjectInfo->FileId, &stFileCleanup, sizeof( AFSFileCleanupCB), - NULL, - NULL); + pResultCB, + &ulResultLen); if( !NT_SUCCESS( ntStatus) && ntStatus != STATUS_OBJECT_NAME_NOT_FOUND) @@ -809,15 +833,17 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, 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; } // @@ -978,8 +1004,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, &pObjectInfo->FileId, &stFileCleanup, sizeof( AFSFileCleanupCB), - NULL, - NULL); + pResultCB, + &ulResultLen); if( !NT_SUCCESS( ntStatus) && ntStatus != STATUS_OBJECT_NAME_NOT_FOUND) @@ -1076,15 +1102,17 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, 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; } // @@ -1202,6 +1230,12 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, try_exit: + if( pResultCB != NULL) + { + + AFSExFreePool( pResultCB); + } + if( pFileObject != NULL) { -- 1.9.4