+typedef struct {\r
+ //\r
+ // If Event is NULL, then blocking I/O is performed.\r
+ // If Event is not NULL and non-blocking I/O is supported, then non-blocking I/O is performed,\r
+ // and Event will be signaled when the read request is completed.\r
+ // The caller must be prepared to handle the case where the callback associated with Event\r
+ // occurs before the original asynchronous I/O request call returns.\r
+ //\r
+ EFI_EVENT Event;\r
+\r
+ //\r
+ // Defines whether or not the signaled event encountered an error.\r
+ //\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // For OpenEx(): Not Used, ignored.\r
+ // For ReadEx(): On input, the size of the Buffer. On output, the amount of data returned in Buffer.\r
+ // In both cases, the size is measured in bytes.\r
+ // For WriteEx(): On input, the size of the Buffer. On output, the amount of data actually written.\r
+ // In both cases, the size is measured in bytes.\r
+ // For FlushEx(): Not used, ignored.\r
+ //\r
+ UINTN BufferSize;\r
+\r
+ //\r
+ // For OpenEx(): Not Used, ignored.\r
+ // For ReadEx(): The buffer into which the data is read.\r
+ // For WriteEx(): The buffer of data to write.\r
+ // For FlushEx(): Not Used, ignored.\r
+ //\r
+ VOID *Buffer;\r
+} EFI_FILE_IO_TOKEN;\r
+\r
+/**\r
+ Opens a new file relative to the source directory's location.\r
+\r
+ @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file\r
+ handle to the source location.\r
+ @param NewHandle A pointer to the location to return the opened handle for the new\r
+ file.\r
+ @param FileName The Null-terminated string of the name of the file to be opened.\r
+ The file name may contain the following path modifiers: "\", ".",\r
+ and "..".\r
+ @param OpenMode The mode to open the file. The only valid combinations that the\r
+ file may be opened with are: Read, Read/Write, or Create/Read/Write.\r
+ @param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the \r
+ attribute bits for the newly created file.\r
+ @param Token A pointer to the token associated with the transaction.\r
+\r
+ @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully.\r
+ If Event is not NULL (asynchronous I/O): The request was successfully\r
+ queued for processing.\r
+ @retval EFI_NOT_FOUND The specified file could not be found on the device.\r
+ @retval EFI_NO_MEDIA The device has no medium.\r
+ @retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no\r
+ longer supported.\r
+ @retval EFI_DEVICE_ERROR The device reported an error.\r
+ @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+ @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write\r
+ when the media is write-protected.\r
+ @retval EFI_ACCESS_DENIED The service denied access to the file.\r
+ @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.\r
+ @retval EFI_VOLUME_FULL The volume is full.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_OPEN_EX)(\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ OUT EFI_FILE_PROTOCOL **NewHandle,\r
+ IN CHAR16 *FileName,\r
+ IN UINT64 OpenMode,\r
+ IN UINT64 Attributes,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token\r
+ );\r
+\r
+\r
+/**\r
+ Reads data from a file.\r
+\r
+ @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to read data from.\r
+ @param Token A pointer to the token associated with the transaction.\r
+\r
+ @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully.\r
+ If Event is not NULL (asynchronous I/O): The request was successfully\r
+ queued for processing.\r
+ @retval EFI_NO_MEDIA The device has no medium.\r
+ @retval EFI_DEVICE_ERROR The device reported an error.\r
+ @retval EFI_DEVICE_ERROR An attempt was made to read from a deleted file.\r
+ @retval EFI_DEVICE_ERROR On entry, the current file position is beyond the end of the file.\r
+ @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+ @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_READ_EX) (\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token\r
+);\r
+\r
+\r
+/**\r
+ Writes data to a file.\r
+\r
+ @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file handle to write data to.\r
+ @param Token A pointer to the token associated with the transaction.\r
+\r
+ @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully.\r
+ If Event is not NULL (asynchronous I/O): The request was successfully\r
+ queued for processing.\r
+ @retval EFI_UNSUPPORTED Writes to open directory files are not supported.\r
+ @retval EFI_NO_MEDIA The device has no medium.\r
+ @retval EFI_DEVICE_ERROR The device reported an error.\r
+ @retval EFI_DEVICE_ERROR An attempt was made to write to a deleted file.\r
+ @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+ @retval EFI_WRITE_PROTECTED The file or medium is write-protected.\r
+ @retval EFI_ACCESS_DENIED The file was opened read only.\r
+ @retval EFI_VOLUME_FULL The volume is full.\r
+ @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_WRITE_EX) (\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token \r
+);\r
+\r
+/**\r
+ Flushes all modified data associated with a file to a device.\r
+\r
+ @param This A pointer to the EFI_FILE_PROTOCOL instance that is the file \r
+ handle to flush.\r
+ @param Token A pointer to the token associated with the transaction.\r
+\r
+ @retval EFI_SUCCESS If Event is NULL (blocking I/O): The data was read successfully.\r
+ If Event is not NULL (asynchronous I/O): The request was successfully\r
+ queued for processing.\r
+ @retval EFI_NO_MEDIA The device has no medium.\r
+ @retval EFI_DEVICE_ERROR The device reported an error.\r
+ @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
+ @retval EFI_WRITE_PROTECTED The file or medium is write-protected.\r
+ @retval EFI_ACCESS_DENIED The file was opened read-only.\r
+ @retval EFI_VOLUME_FULL The volume is full.\r
+ @retval EFI_OUT_OF_RESOURCES Unable to queue the request due to lack of resources.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_FILE_FLUSH_EX) (\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token\r
+ );\r
+\r
+#define EFI_FILE_PROTOCOL_REVISION 0x00010000\r
+#define EFI_FILE_PROTOCOL_REVISION2 0x00020000\r