VOID Ext2DeQueueCloseRequest (IN PVOID Context) { PEXT2_IRP_CONTEXT IrpContext; IrpContext = (PEXT2_IRP_CONTEXT) Context; ASSERT(IrpContext); ASSERT((IrpContext->Identifier.Type == EXT2ICX) && (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT))); __try { __try { FsRtlEnterFileSystem(); Ext2Close(IrpContext); } __except (Ext2ExceptionFilter(IrpContext, GetExceptionInformation())) { Ext2ExceptionHandler(IrpContext); } } __finally { FsRtlExitFileSystem(); } }
NTSTATUS Ext2DispatchRequest (IN PEXT2_IRP_CONTEXT IrpContext) { ASSERT(IrpContext); ASSERT((IrpContext->Identifier.Type == EXT2ICX) && (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT))); switch (IrpContext->MajorFunction) { case IRP_MJ_CREATE: return Ext2Create(IrpContext); case IRP_MJ_CLOSE: return Ext2Close(IrpContext); case IRP_MJ_READ: return Ext2Read(IrpContext); case IRP_MJ_WRITE: return Ext2Write(IrpContext); case IRP_MJ_FLUSH_BUFFERS: return Ext2Flush(IrpContext); case IRP_MJ_QUERY_INFORMATION: return Ext2QueryFileInformation(IrpContext); case IRP_MJ_SET_INFORMATION: return Ext2SetFileInformation(IrpContext); case IRP_MJ_QUERY_VOLUME_INFORMATION: return Ext2QueryVolumeInformation(IrpContext); case IRP_MJ_SET_VOLUME_INFORMATION: return Ext2SetVolumeInformation(IrpContext); case IRP_MJ_DIRECTORY_CONTROL: return Ext2DirectoryControl(IrpContext); case IRP_MJ_FILE_SYSTEM_CONTROL: return Ext2FileSystemControl(IrpContext); case IRP_MJ_DEVICE_CONTROL: return Ext2DeviceControl(IrpContext); case IRP_MJ_LOCK_CONTROL: return Ext2LockControl(IrpContext); case IRP_MJ_CLEANUP: return Ext2Cleanup(IrpContext); case IRP_MJ_SHUTDOWN: return Ext2ShutDown(IrpContext); #if (_WIN32_WINNT >= 0x0500) case IRP_MJ_PNP: return Ext2Pnp(IrpContext); #endif //(_WIN32_WINNT >= 0x0500) default: DEBUG(DL_ERR, ( "Ext2DispatchRequest: Unexpected major function: %xh\n", IrpContext->MajorFunction)); Ext2CompleteIrpContext(IrpContext, STATUS_DRIVER_INTERNAL_ERROR); return STATUS_DRIVER_INTERNAL_ERROR; } }