VOID NTAPI FFSDeQueueCloseRequest( IN PVOID Context) { PFFS_IRP_CONTEXT IrpContext; PAGED_CODE(); IrpContext = (PFFS_IRP_CONTEXT) Context; ASSERT(IrpContext); ASSERT((IrpContext->Identifier.Type == FFSICX) && (IrpContext->Identifier.Size == sizeof(FFS_IRP_CONTEXT))); _SEH2_TRY { _SEH2_TRY { FsRtlEnterFileSystem(); FFSClose(IrpContext); } _SEH2_EXCEPT (FFSExceptionFilter(IrpContext, _SEH2_GetExceptionInformation())) { FFSExceptionHandler(IrpContext); } _SEH2_END; } _SEH2_FINALLY { FsRtlExitFileSystem(); } _SEH2_END; }
NTSTATUS FFSDispatchRequest( IN PFFS_IRP_CONTEXT IrpContext) { ASSERT(IrpContext); ASSERT((IrpContext->Identifier.Type == FFSICX) && (IrpContext->Identifier.Size == sizeof(FFS_IRP_CONTEXT))); switch (IrpContext->MajorFunction) { case IRP_MJ_CREATE: return FFSCreate(IrpContext); case IRP_MJ_CLOSE: return FFSClose(IrpContext); case IRP_MJ_READ: return FFSRead(IrpContext); case IRP_MJ_WRITE: return FFSWrite(IrpContext); case IRP_MJ_FLUSH_BUFFERS: return FFSFlush(IrpContext); case IRP_MJ_QUERY_INFORMATION: return FFSQueryInformation(IrpContext); case IRP_MJ_SET_INFORMATION: return FFSSetInformation(IrpContext); case IRP_MJ_QUERY_VOLUME_INFORMATION: return FFSQueryVolumeInformation(IrpContext); case IRP_MJ_SET_VOLUME_INFORMATION: return FFSSetVolumeInformation(IrpContext); case IRP_MJ_DIRECTORY_CONTROL: return FFSDirectoryControl(IrpContext); case IRP_MJ_FILE_SYSTEM_CONTROL: return FFSFileSystemControl(IrpContext); case IRP_MJ_DEVICE_CONTROL: return FFSDeviceControl(IrpContext); case IRP_MJ_LOCK_CONTROL: return FFSLockControl(IrpContext); case IRP_MJ_CLEANUP: return FFSCleanup(IrpContext); case IRP_MJ_SHUTDOWN: return FFSShutDown(IrpContext); #if (_WIN32_WINNT >= 0x0500) case IRP_MJ_PNP: return FFSPnp(IrpContext); #endif //(_WIN32_WINNT >= 0x0500) default: FFSPrint((DBG_ERROR, "FFSDispatchRequest: Unexpected major function: %xh\n", IrpContext->MajorFunction)); FFSCompleteIrpContext(IrpContext, STATUS_DRIVER_INTERNAL_ERROR); return STATUS_DRIVER_INTERNAL_ERROR; } }