⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesystem.h

📁 EFI(Extensible Firmware Interface)是下一代BIOS
💻 H
字号:
/*******************************************************
Copyright (c) 2005.12 Lenovo Corporation
All rights reserved.

Module Name:
    FileSystem.h    

Abstract:
	文件系统的操作系列函数

Author: WangZhe
Revision History

********************************************************/
#ifndef _FILESYSTEM_H_
#define _FILESYSTEM_H_
#include <efi.h>
#include <efilib.h>

//文件的各种类型
#define FILE_DIRECTORY		1111	//文件夹
#define FILE_NORMAL			2222	//普通文件
#define DISKDRIVER			3333	//驱动器
#define PARENT_DIRECTORY	4444	//上一级目录

//内容列表单元
#define EFI_CONTENTLISTITEM_SIGNATURE            EFI_SIGNATURE_32('c','t','i','t')
#define MAX_CONTENTLISTITEM_LENGTH	256
typedef struct _ContentListITEM{
    INTN    Signature;                  //ITEM的标签
	CHAR16 ItemText[MAX_CONTENTLISTITEM_LENGTH];     //item的文本内容
	UINT32  ItemParam;					//ITEM的存放参数
	INTN	ItemData;					//存放数据
	LIST_ENTRY Link;
}ContentListITEM;

typedef
void
(EFIAPI *EFI_CONTENTLIST_ADDITEM) (
struct _ContentList *this, 
CHAR16 *itemcaption,
UINT32 param,
INT32 data);

typedef
INTN
(EFIAPI *EFI_CONTENTLIST_GETCOUNT) (
struct _ContentList *this);


typedef
UINT32
(EFIAPI *EFI_CONTENTLIST_GETITEMPARAM) (
struct _ContentList *this, 
INTN index);


typedef
void
(EFIAPI *EFI_CONTENTLIST_CLEAR) (
struct _ContentList *this);

//完整查找,二者都符合才行
typedef
INT32
(EFIAPI *EFI_CONTENTLIST_FIND) (
struct _ContentList *this,CHAR16 *pattern,INTN DATA);

typedef
UINT32 *
(EFIAPI *EFI_CONTENTLIST_GETITEM_SIGNATURE) (
struct _ContentList *this,INT32 nIndex);

typedef struct _ContentList{
	INTN ItemCount;
	LIST_ENTRY LinkItems;
	
	EFI_CONTENTLIST_ADDITEM AddItem;
	EFI_CONTENTLIST_GETCOUNT GetCount;
	EFI_CONTENTLIST_GETITEMPARAM GetItemParam;
	EFI_CONTENTLIST_CLEAR Clear;
	EFI_CONTENTLIST_FIND Find;//查找,找不到返回-1
	EFI_CONTENTLIST_GETITEM_SIGNATURE	GetItemSignature;//返回所选Item的SIGNATURE
}ContentList;

void CreateContentList(ContentList *this);

//============================================================
#define DEVICE_PATH_MAPPING_ID  \
  { 0x47c7b225, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
#define MAX_FILEPATH_LENGTH 256
#define EFI_FSITEM_SIGNATURE            EFI_SIGNATURE_32('f','s','i','t')
typedef struct _FSITEM{
    INTN                    Signature;
    CHAR16					FSName[MAX_FILEPATH_LENGTH];			//fs name
    CHAR16					FSLabel[MAX_FILEPATH_LENGTH];			//fs caption
	EFI_FILE_HANDLE         RootFs;
    LIST_ENTRY              LinkFS;            // All Control in wnd
} FSITEM;

#define EFI_FILEITEM_SIGNATURE            EFI_SIGNATURE_32('f','i','l','e')
typedef struct _FILEITEM{
    INTN                    Signature;
    CHAR16					FileName[MAX_FILEPATH_LENGTH];			//file name
    BOOLEAN 				bDirectory;			//是否是目录,TRUE,是,FASLE,不是
    LIST_ENTRY              LinkFile;            // All Control in wnd
} FILEITEM;

	
//列出文件系统
void ListFileSystem(struct _FileMgrControl *this);
//清空文件系统列表
void ClearFSList(struct _FileMgrControl *this);
//情况目录文件列表
void ClearFileList(struct _FileMgrControl *this);
void ClearFilePathList(struct _FileMgrControl *this);

void OpenSubDir(struct _FileMgrControl *this,CHAR16 *SubDirName);
void DisplayFileSystem(struct _FileMgrControl *this);
void DisplayFileRootDir(struct _FileMgrControl *this, INTN nSel);
void DisplayFileDir(struct _FileMgrControl *this, INTN nSel);
void DisplayParentDir(struct _FileMgrControl *this);


EFI_STATUS GetMapName(EFI_HANDLE Handle, 
	OUT CHAR16* MapName, 
	OUT CHAR16* LabelName, 
	IN INTN MapNameLen);
void ListDirFile(struct _FileMgrControl *this, EFI_FILE_HANDLE RootFs, IN CHAR16  *DirName);
void ComposeCurDir(struct _FileMgrControl *this,OUT CHAR16 *CurDir, IN INTN CurDirLen);
void GoParentDir(struct _FileMgrControl *this);
void GoComputerRoot(struct _FileMgrControl *this);//到达最外层,看到驱动器

//刷新文件管理器,重新映射
typedef void
(EFIAPI *FILEMGRCONTROL_REMAP) (struct _FileMgrControl *this);

//刷新当前目录的内容
typedef void
(EFIAPI *FILEMGRCONTROL_REFRESH) (struct _FileMgrControl *this);
/*
//获取当前的文件路径
typedef EFI_STATUS
(EFIAPI *FILEMGRCONTROL_GETFULLPATH) (struct _FileMgrControl *this,
	OUT CHAR16 *FileVolumnName,
	OUT CHAR16 *FullPathName,
	OUT CHAR16 *FileName,   //返回文件名
	BOOLEAN *bDirectory,      //是否是目录
	IN INT32 Length);
*/
//根据所给路径,直接打开文件夹并显示
//前提给出的文件名是包含驱动器的完整路径名
//格式如下:
//    .\netcfg\yuhu.efi		//当前驱动器下的路径
// fs2:\music\lmouse.mp3	//绝对路径
typedef void
(EFIAPI *FILEMGRCONTROL_DISPLAYDIR)(struct _FileMgrControl *this, CHAR16 *FullRootFath);

typedef struct _FileMgrControl{
	LIST_ENTRY FileSystemList;		//在MAP后,FS分区的个数列表
	LIST_ENTRY DirFileList;			//在列出具体目录后,自身文件的列表	
	LIST_ENTRY DirFilePathList;		//文件管理器当前路径列表	
	EFI_FILE_HANDLE CurRootFs;		//当前的根ROOTFS
	INT32 FilePathLevel;//文件路径深度,为0时只可以看到驱动器

	FILEMGRCONTROL_REMAP ReMap;
	FILEMGRCONTROL_REFRESH Refresh;
	FILEMGRCONTROL_DISPLAYDIR DisplayDir;//根据所给路径,直接打开文件夹并显示

	ContentList	m_ContentList;//内容列表,存放可以显示的内容
} FileMgrControl;

//创建FileMgr
EFI_STATUS CreateFileMgr(FileMgrControl *this);

//查找条款,返回位置
INT32 FindDirectory(struct _ContentList *this,CHAR16 *DirectoryName);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -