From ff2a5fed4da67907cc86162553d3689db3a22c06 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 17 Apr 2013 18:21:40 -0400 Subject: [PATCH] Windows: IOCTL_AFS_GET_DEBUG_TRACE Pemrit the active Debug Flags and Trace Configuration to be queried by administrators. Change-Id: I0c798bd2eb8f2445c81a0b45c112bbaf72d15522 Reviewed-on: http://gerrit.openafs.org/9798 Reviewed-by: Peter Scott Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/common/AFSUserIoctl.h | 2 ++ src/WINNT/afsrdr/kernel/fs/AFSCommSupport.cpp | 27 +++++++++++++++++++ src/WINNT/afsrdr/kernel/fs/AFSLogSupport.cpp | 25 +++++++++++++++++ .../afsrdr/kernel/fs/Include/AFSCommon.h | 3 +++ 4 files changed, 57 insertions(+) diff --git a/src/WINNT/afsrdr/common/AFSUserIoctl.h b/src/WINNT/afsrdr/common/AFSUserIoctl.h index 8cf87c65e..938c32f79 100644 --- a/src/WINNT/afsrdr/common/AFSUserIoctl.h +++ b/src/WINNT/afsrdr/common/AFSUserIoctl.h @@ -95,4 +95,6 @@ #define IOCTL_AFS_GET_REPARSE_POLICY CTL_CODE( FILE_DEVICE_DISK_FILE_SYSTEM, 0x101D, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_AFS_GET_DEBUG_TRACE CTL_CODE( FILE_DEVICE_DISK_FILE_SYSTEM, 0x101E, METHOD_BUFFERED, FILE_ANY_ACCESS) + #endif /* _AFS_USER_IOCTL_H */ diff --git a/src/WINNT/afsrdr/kernel/fs/AFSCommSupport.cpp b/src/WINNT/afsrdr/kernel/fs/AFSCommSupport.cpp index 614004b93..b60ab7e60 100644 --- a/src/WINNT/afsrdr/kernel/fs/AFSCommSupport.cpp +++ b/src/WINNT/afsrdr/kernel/fs/AFSCommSupport.cpp @@ -435,9 +435,11 @@ AFSCheckIoctlPermissions( IN ULONG ControlCode) return STATUS_SUCCESS; case IOCTL_AFS_CONFIGURE_DEBUG_TRACE: + case IOCTL_AFS_GET_DEBUG_TRACE: case IOCTL_AFS_GET_TRACE_BUFFER: case IOCTL_AFS_FORCE_CRASH: + // // Any admin can call these // @@ -701,6 +703,31 @@ AFSProcessControlRequest( IN PIRP Irp) break; } + case IOCTL_AFS_GET_DEBUG_TRACE: + { + + AFSTraceConfigCB *pTraceInfo = (AFSTraceConfigCB *)Irp->AssociatedIrp.SystemBuffer; + + if( pTraceInfo == NULL || + pIrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof( AFSTraceConfigCB)) + { + + ntStatus = STATUS_INVALID_PARAMETER; + + break; + } + + ntStatus = AFSGetTraceConfig( pTraceInfo); + + if ( NT_SUCCESS( ntStatus)) + { + + Irp->IoStatus.Information = sizeof( AFSTraceConfigCB); + } + + break; + } + case IOCTL_AFS_GET_TRACE_BUFFER: { diff --git a/src/WINNT/afsrdr/kernel/fs/AFSLogSupport.cpp b/src/WINNT/afsrdr/kernel/fs/AFSLogSupport.cpp index eb52f1867..779c090da 100644 --- a/src/WINNT/afsrdr/kernel/fs/AFSLogSupport.cpp +++ b/src/WINNT/afsrdr/kernel/fs/AFSLogSupport.cpp @@ -420,6 +420,31 @@ try_exit: return ntStatus; } +NTSTATUS +AFSGetTraceConfig( OUT AFSTraceConfigCB *TraceInfo) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + + __Enter + { + + AFSAcquireExcl( &AFSDbgLogLock, + TRUE); + + TraceInfo->TraceLevel = AFSTraceLevel; + + TraceInfo->TraceBufferLength = AFSDbgBufferLength; + + TraceInfo->Subsystem = AFSTraceComponent; + + TraceInfo->DebugFlags = AFSDebugFlags; + + AFSReleaseResource( &AFSDbgLogLock); + } + + return ntStatus; +} + NTSTATUS AFSGetTraceBuffer( IN ULONG TraceBufferLength, OUT void *TraceBuffer, diff --git a/src/WINNT/afsrdr/kernel/fs/Include/AFSCommon.h b/src/WINNT/afsrdr/kernel/fs/Include/AFSCommon.h index c51a5f844..55ab75652 100644 --- a/src/WINNT/afsrdr/kernel/fs/Include/AFSCommon.h +++ b/src/WINNT/afsrdr/kernel/fs/Include/AFSCommon.h @@ -786,6 +786,9 @@ AFSTearDownDbgLog( void); NTSTATUS AFSConfigureTrace( IN AFSTraceConfigCB *TraceInfo); +NTSTATUS +AFSGetTraceConfig( OUT AFSTraceConfigCB *TraceInfo); + NTSTATUS AFSGetTraceBuffer( IN ULONG TraceBufferLength, OUT void *TraceBuffer, -- 2.39.5