break;
}
- case AFS_WORK_ASYNCH_READ:
- {
-
- ASSERT( pWorkItem->Specific.AsynchIo.CallingProcess != NULL);
-
- (VOID) AFSCommonRead( pWorkItem->Specific.AsynchIo.Device,
- pWorkItem->Specific.AsynchIo.Irp,
- pWorkItem->Specific.AsynchIo.CallingProcess);
-
- break;
- }
-
- case AFS_WORK_ASYNCH_WRITE:
- {
-
- ASSERT( pWorkItem->Specific.AsynchIo.CallingProcess != NULL);
-
- (VOID) AFSCommonWrite( pWorkItem->Specific.AsynchIo.Device,
- pWorkItem->Specific.AsynchIo.Irp,
- pWorkItem->Specific.AsynchIo.CallingProcess);
- break;
- }
-
case AFS_WORK_ENUMERATE_GLOBAL_ROOT:
{
return ntStatus;
}
-NTSTATUS
-AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN HANDLE CallerProcess)
-{
-
- NTSTATUS ntStatus = STATUS_SUCCESS;
- AFSWorkItem *pWorkItem = NULL;
-
- __try
- {
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncRead Queuing request for Irp %08lX\n",
- Irp);
-
- pWorkItem = (AFSWorkItem *) AFSLibExAllocatePoolWithTag( NonPagedPool,
- sizeof(AFSWorkItem),
- AFS_WORK_ITEM_TAG);
- if (NULL == pWorkItem)
- {
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
- AFS_TRACE_LEVEL_ERROR,
- "AFSQueueAsyncRead Failed to allocate work item\n");
-
- try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES );
- }
-
- RtlZeroMemory( pWorkItem,
- sizeof(AFSWorkItem));
-
- pWorkItem->Size = sizeof( AFSWorkItem);
-
- pWorkItem->RequestType = AFS_WORK_ASYNCH_READ;
-
- pWorkItem->Specific.AsynchIo.Device = DeviceObject;
-
- pWorkItem->Specific.AsynchIo.Irp = Irp;
-
- pWorkItem->Specific.AsynchIo.CallingProcess = CallerProcess;
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncRead Workitem %08lX for Irp %08lX\n",
- pWorkItem,
- Irp);
-
- ntStatus = AFSQueueWorkerRequest( pWorkItem);
-
-try_exit:
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncRead Request for Irp %08lX complete Status %08lX\n",
- Irp,
- ntStatus);
-
- if( !NT_SUCCESS( ntStatus))
- {
-
- if( pWorkItem != NULL)
- {
-
- ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
- }
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_ERROR,
- "AFSQueueAsyncRead Failed to queue request Status %08lX\n", ntStatus);
- }
- }
- __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
- {
-
- AFSDbgLogMsg( 0,
- 0,
- "EXCEPTION - AFSQueueAsyncRead\n");
-
- AFSDumpTraceFilesFnc();
- }
-
- return ntStatus;
-}
-
-NTSTATUS
-AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN HANDLE CallerProcess)
-{
-
- NTSTATUS ntStatus = STATUS_SUCCESS;
- AFSWorkItem *pWorkItem = NULL;
-
- __try
- {
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncWrite Queuing request for Irp %08lX\n",
- Irp);
-
- pWorkItem = (AFSWorkItem *) AFSLibExAllocatePoolWithTag( NonPagedPool,
- sizeof(AFSWorkItem),
- AFS_WORK_ITEM_TAG);
- if (NULL == pWorkItem)
- {
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
- AFS_TRACE_LEVEL_ERROR,
- "AFSQueueAsyncWrite Failed to allocate work item\n");
-
- try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES );
- }
-
- RtlZeroMemory( pWorkItem,
- sizeof(AFSWorkItem));
-
- pWorkItem->Size = sizeof( AFSWorkItem);
-
- pWorkItem->RequestType = AFS_WORK_ASYNCH_WRITE;
-
- pWorkItem->Specific.AsynchIo.Device = DeviceObject;
-
- pWorkItem->Specific.AsynchIo.Irp = Irp;
-
- pWorkItem->Specific.AsynchIo.CallingProcess = CallerProcess;
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncWrite Workitem %08lX for Irp %08lX\n",
- pWorkItem,
- Irp);
-
- ntStatus = AFSQueueWorkerRequest( pWorkItem);
-
-try_exit:
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_WORKER_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSQueueAsyncWrite Request for Irp %08lX complete Status %08lX\n",
- Irp,
- ntStatus);
-
- if( !NT_SUCCESS( ntStatus))
- {
-
- if( pWorkItem != NULL)
- {
-
- ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
- }
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_ERROR,
- "AFSQueueAsyncWrite Failed to queue request Status %08lX\n", ntStatus);
- }
- }
- __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
- {
-
- AFSDbgLogMsg( 0,
- 0,
- "EXCEPTION - AFSQueueAsyncWrite\n");
-
- AFSDumpTraceFilesFnc();
- }
-
- return ntStatus;
-}
-
NTSTATUS
AFSQueueGlobalRootEnumeration()
{