📄 filesystem.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 + -