#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 */
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
//
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:
{
}
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,
OUT ULONG_PTR *CopiedLength)
AFSConfigureTrace( IN AFSTraceConfigCB *TraceInfo);
NTSTATUS
+AFSGetTraceConfig( OUT AFSTraceConfigCB *TraceInfo);
+
+NTSTATUS
AFSGetTraceBuffer( IN ULONG TraceBufferLength,
OUT void *TraceBuffer,
OUT ULONG_PTR *CopiedLength);