OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
VirtualFile.c File Reference
#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/BaseOverflowLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/OcFileLib.h>
#include <Library/OcVirtualFsLib.h>
#include <Guid/FileInfo.h>
#include "VirtualFsInternal.h"

Go to the source code of this file.

Functions

STATIC EFI_STATUS EFIAPI VirtualFileOpen (IN EFI_FILE_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes)
 
STATIC EFI_STATUS EFIAPI VirtualFileClose (IN EFI_FILE_PROTOCOL *This)
 
STATIC EFI_STATUS EFIAPI VirtualFileDelete (IN EFI_FILE_PROTOCOL *This)
 
STATIC EFI_STATUS EFIAPI VirtualFileRead (IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
STATIC EFI_STATUS EFIAPI VirtualFileWrite (IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, IN VOID *Buffer)
 
STATIC EFI_STATUS EFIAPI VirtualFileSetPosition (IN EFI_FILE_PROTOCOL *This, IN UINT64 Position)
 
STATIC EFI_STATUS EFIAPI VirtualFileGetPosition (IN EFI_FILE_PROTOCOL *This, OUT UINT64 *Position)
 
STATIC EFI_STATUS EFIAPI VirtualFileGetInfo (IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
 
STATIC EFI_STATUS EFIAPI VirtualFileSetInfo (IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
 
STATIC EFI_STATUS EFIAPI VirtualFileFlush (IN EFI_FILE_PROTOCOL *This)
 
STATIC EFI_STATUS EFIAPI VirtualFileOpenEx (IN EFI_FILE_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes, IN OUT EFI_FILE_IO_TOKEN *Token)
 
STATIC EFI_STATUS EFIAPI VirtualFileReadEx (IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
 
STATIC EFI_STATUS EFIAPI VirtualFileWriteEx (IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
 
STATIC EFI_STATUS EFIAPI VirtualFileFlushEx (IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
 
EFI_STATUS CreateVirtualFile (IN CHAR16 *FileName, IN VOID *FileBuffer, IN UINT64 FileSize, IN CONST EFI_TIME *ModificationTime OPTIONAL, OUT EFI_FILE_PROTOCOL **File)
 
EFI_STATUS CreateVirtualFileFileNameCopy (IN CONST CHAR16 *FileName, IN VOID *FileBuffer, IN UINT64 FileSize, IN CONST EFI_TIME *ModificationTime OPTIONAL, OUT EFI_FILE_PROTOCOL **File)
 
STATIC VOID InternalInitVirtualVolumeData (IN OUT VIRTUAL_FILE_DATA *Data, IN EFI_FILE_OPEN OpenCallback)
 
EFI_STATUS CreateRealFile (IN EFI_FILE_PROTOCOL *OriginalFile OPTIONAL, IN EFI_FILE_OPEN OpenCallback OPTIONAL, IN BOOLEAN CloseOnFailure, OUT EFI_FILE_PROTOCOL **File)
 

Variables

STATIC CONST EFI_FILE_PROTOCOL mVirtualFileProtocolTemplate
 

Detailed Description

Copyright (C) 2019, vit9696. All rights reserved.

All rights reserved.

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.

Definition in file VirtualFile.c.

Function Documentation

◆ CreateRealFile()

EFI_STATUS CreateRealFile ( IN EFI_FILE_PROTOCOL *OriginalFile OPTIONAL,
IN EFI_FILE_OPEN OpenCallback OPTIONAL,
IN BOOLEAN CloseOnFailure,
OUT EFI_FILE_PROTOCOL ** File )

Creates virtual file system instance around any file. CreateRealFile or CreateVirtualFile must be called from any registered OpenCallback.

Parameters
[in]OriginalFilePointer to the original file.
[in]OpenCallbackFile open callback.
[in]CloseOnFailureClose the original file on failure.
[out]FileResulting file protocol.
Returns
EFI_SUCCESS if instance was successfully created.
EFI_SIMPLE_FILE_SYSTEM Open-compatible error return code.

Definition at line 694 of file VirtualFile.c.

◆ CreateVirtualFile()

EFI_STATUS CreateVirtualFile ( IN CHAR16 * FileName,
IN VOID * FileBuffer,
IN UINT64 FileSize,
IN CONST EFI_TIME *ModificationTime OPTIONAL,
OUT EFI_FILE_PROTOCOL ** File )

Creates read-only EFI_FILE_PROTOCOL instance over a buffer allocated from pool. On success FileName and FileData ownership is transferred to the resulting EFI_FILE_PROTOCOL, which frees them with FreePool upon closing EFI_FILE_PROTOCOL. All other fields are copied.

Resulting EFI_FILE_PROTOCOL has 2nd revision, but may be downgraded to 1st by updating the corresponding field.

Parameters
[in]FileNamePointer to the file's name.
[in]FileBufferPointer to the file's data.
[in]FileSizeFile size of FileData.
[in]ModificationTimeFile modification date, optional.
[out]FileResulting file protocol.
Returns
EFI_SUCCESS if instance was successfully created.

Definition at line 610 of file VirtualFile.c.

◆ CreateVirtualFileFileNameCopy()

EFI_STATUS CreateVirtualFileFileNameCopy ( IN CONST CHAR16 * FileName,
IN VOID * FileBuffer,
IN UINT64 FileSize,
IN CONST EFI_TIME *ModificationTime OPTIONAL,
OUT EFI_FILE_PROTOCOL ** File )

Creates read-only EFI_FILE_PROTOCOL instance over a buffer allocated from pool. On success FileData ownership is transferred to the resulting EFI_FILE_PROTOCOL, which frees them with FreePool upon closing EFI_FILE_PROTOCOL. All other fields are copied.

Resulting EFI_FILE_PROTOCOL has 2nd revision, but may be downgraded to 1st by updating the corresponding field.

Parameters
[in]FileNamePointer to the file's name.
[in]FileBufferPointer to the file's data.
[in]FileSizeFile size of FileData.
[in]ModificationTimeFile modification date, optional.
[out]FileResulting file protocol.
Returns
EFI_SUCCESS if instance was successfully created.

Definition at line 650 of file VirtualFile.c.

◆ InternalInitVirtualVolumeData()

STATIC VOID InternalInitVirtualVolumeData ( IN OUT VIRTUAL_FILE_DATA * Data,
IN EFI_FILE_OPEN OpenCallback )

Definition at line 682 of file VirtualFile.c.

◆ VirtualFileClose()

STATIC EFI_STATUS EFIAPI VirtualFileClose ( IN EFI_FILE_PROTOCOL * This)

Definition at line 86 of file VirtualFile.c.

◆ VirtualFileDelete()

STATIC EFI_STATUS EFIAPI VirtualFileDelete ( IN EFI_FILE_PROTOCOL * This)

Definition at line 118 of file VirtualFile.c.

◆ VirtualFileFlush()

STATIC EFI_STATUS EFIAPI VirtualFileFlush ( IN EFI_FILE_PROTOCOL * This)

Definition at line 433 of file VirtualFile.c.

◆ VirtualFileFlushEx()

STATIC EFI_STATUS EFIAPI VirtualFileFlushEx ( IN EFI_FILE_PROTOCOL * This,
IN OUT EFI_FILE_IO_TOKEN * Token )

Definition at line 562 of file VirtualFile.c.

◆ VirtualFileGetInfo()

STATIC EFI_STATUS EFIAPI VirtualFileGetInfo ( IN EFI_FILE_PROTOCOL * This,
IN EFI_GUID * InformationType,
IN OUT UINTN * BufferSize,
OUT VOID * Buffer )

Definition at line 305 of file VirtualFile.c.

◆ VirtualFileGetPosition()

STATIC EFI_STATUS EFIAPI VirtualFileGetPosition ( IN EFI_FILE_PROTOCOL * This,
OUT UINT64 * Position )

Definition at line 276 of file VirtualFile.c.

◆ VirtualFileOpen()

STATIC EFI_STATUS EFIAPI VirtualFileOpen ( IN EFI_FILE_PROTOCOL * This,
OUT EFI_FILE_PROTOCOL ** NewHandle,
IN CHAR16 * FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes )

Definition at line 34 of file VirtualFile.c.

◆ VirtualFileOpenEx()

STATIC EFI_STATUS EFIAPI VirtualFileOpenEx ( IN EFI_FILE_PROTOCOL * This,
OUT EFI_FILE_PROTOCOL ** NewHandle,
IN CHAR16 * FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes,
IN OUT EFI_FILE_IO_TOKEN * Token )

Definition at line 460 of file VirtualFile.c.

◆ VirtualFileRead()

STATIC EFI_STATUS EFIAPI VirtualFileRead ( IN EFI_FILE_PROTOCOL * This,
IN OUT UINTN * BufferSize,
OUT VOID * Buffer )

Definition at line 152 of file VirtualFile.c.

◆ VirtualFileReadEx()

STATIC EFI_STATUS EFIAPI VirtualFileReadEx ( IN EFI_FILE_PROTOCOL * This,
IN OUT EFI_FILE_IO_TOKEN * Token )

Definition at line 499 of file VirtualFile.c.

◆ VirtualFileSetInfo()

STATIC EFI_STATUS EFIAPI VirtualFileSetInfo ( IN EFI_FILE_PROTOCOL * This,
IN EFI_GUID * InformationType,
IN UINTN BufferSize,
IN VOID * Buffer )

Definition at line 400 of file VirtualFile.c.

◆ VirtualFileSetPosition()

STATIC EFI_STATUS EFIAPI VirtualFileSetPosition ( IN EFI_FILE_PROTOCOL * This,
IN UINT64 Position )

Definition at line 241 of file VirtualFile.c.

◆ VirtualFileWrite()

STATIC EFI_STATUS EFIAPI VirtualFileWrite ( IN EFI_FILE_PROTOCOL * This,
IN OUT UINTN * BufferSize,
IN VOID * Buffer )

Definition at line 210 of file VirtualFile.c.

◆ VirtualFileWriteEx()

STATIC EFI_STATUS EFIAPI VirtualFileWriteEx ( IN EFI_FILE_PROTOCOL * This,
IN OUT EFI_FILE_IO_TOKEN * Token )

Definition at line 535 of file VirtualFile.c.

Variable Documentation

◆ mVirtualFileProtocolTemplate

STATIC CONST EFI_FILE_PROTOCOL mVirtualFileProtocolTemplate
Initial value:
= {
.Revision = EFI_FILE_PROTOCOL_REVISION2,
.Open = VirtualFileOpen,
.Close = VirtualFileClose,
.Delete = VirtualFileDelete,
.Read = VirtualFileRead,
.Write = VirtualFileWrite,
.GetPosition = VirtualFileGetPosition,
.SetPosition = VirtualFileSetPosition,
.GetInfo = VirtualFileGetInfo,
.SetInfo = VirtualFileSetInfo,
.Flush = VirtualFileFlush,
.OpenEx = VirtualFileOpenEx,
.ReadEx = VirtualFileReadEx,
.WriteEx = VirtualFileWriteEx,
.FlushEx = VirtualFileFlushEx
}
STATIC EFI_STATUS EFIAPI VirtualFileClose(IN EFI_FILE_PROTOCOL *This)
Definition VirtualFile.c:86
STATIC EFI_STATUS EFIAPI VirtualFileFlush(IN EFI_FILE_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI VirtualFileWrite(IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, IN VOID *Buffer)
STATIC EFI_STATUS EFIAPI VirtualFileWriteEx(IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
STATIC EFI_STATUS EFIAPI VirtualFileSetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
STATIC EFI_STATUS EFIAPI VirtualFileOpen(IN EFI_FILE_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes)
Definition VirtualFile.c:34
STATIC EFI_STATUS EFIAPI VirtualFileGetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
STATIC EFI_STATUS EFIAPI VirtualFileGetPosition(IN EFI_FILE_PROTOCOL *This, OUT UINT64 *Position)
STATIC EFI_STATUS EFIAPI VirtualFileOpenEx(IN EFI_FILE_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes, IN OUT EFI_FILE_IO_TOKEN *Token)
STATIC EFI_STATUS EFIAPI VirtualFileSetPosition(IN EFI_FILE_PROTOCOL *This, IN UINT64 Position)
STATIC EFI_STATUS EFIAPI VirtualFileDelete(IN EFI_FILE_PROTOCOL *This)
STATIC EFI_STATUS EFIAPI VirtualFileRead(IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
STATIC EFI_STATUS EFIAPI VirtualFileReadEx(IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
STATIC EFI_STATUS EFIAPI VirtualFileFlushEx(IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)

Definition at line 591 of file VirtualFile.c.