// /** @file
// Modules that produces the logic Block I/O protocol for every partition via the physical Block I/O.
//
// This module produces the logical Block I/O device that represents
// the bytes from Start to End of the Parent Block I/O device.
// The partition of physical BlockIo device supported is one of legacy MBR, GPT,
// and "El Torito" partitions.
//
// Caution: This module requires additional review when modified.
// This driver will have external input - disk partition.
// This external input must be validated carefully to avoid security issue like
// buffer overflow, integer overflow.
//
// Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution.  The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "Produces the logic Block I/O protocol for every partition via the physical Block I/O."

#string STR_MODULE_DESCRIPTION          #language en-US "This module produces the logical Block I/O device that represents the bytes from Start to End of the Parent Block I/O device. The partition of physical BlockIO device supported is one of legacy MBR, GPT, and \"El Torito\" partitions.<BR><BR>"

