?? filesystem.h
字號:
/*******************************************************
Copyright (c) 2005.12 Lenovo Corporation
All rights reserved.
Module Name:
FileSystem.h
Abstract:
文件系統(tǒng)的操作系列函數(shù)
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 //驅(qū)動器
#define PARENT_DIRECTORY 4444 //上一級目錄
//內(nèi)容列表單元
#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的文本內(nèi)容
UINT32 ItemParam; //ITEM的存放參數(shù)
INTN ItemData; //存放數(shù)據(jù)
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,是,F(xiàn)ASLE,不是
LIST_ENTRY LinkFile; // All Control in wnd
} FILEITEM;
//列出文件系統(tǒng)
void ListFileSystem(struct _FileMgrControl *this);
//清空文件系統(tǒng)列表
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);//到達最外層,看到驅(qū)動器
//刷新文件管理器,重新映射
typedef void
(EFIAPI *FILEMGRCONTROL_REMAP) (struct _FileMgrControl *this);
//刷新當前目錄的內(nèi)容
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);
*/
//根據(jù)所給路徑,直接打開文件夾并顯示
//前提給出的文件名是包含驅(qū)動器的完整路徑名
//格式如下:
// .\netcfg\yuhu.efi //當前驅(qū)動器下的路徑
// fs2:\music\lmouse.mp3 //絕對路徑
typedef void
(EFIAPI *FILEMGRCONTROL_DISPLAYDIR)(struct _FileMgrControl *this, CHAR16 *FullRootFath);
typedef struct _FileMgrControl{
LIST_ENTRY FileSystemList; //在MAP后,F(xiàn)S分區(qū)的個數(shù)列表
LIST_ENTRY DirFileList; //在列出具體目錄后,自身文件的列表
LIST_ENTRY DirFilePathList; //文件管理器當前路徑列表
EFI_FILE_HANDLE CurRootFs; //當前的根ROOTFS
INT32 FilePathLevel;//文件路徑深度,為0時只可以看到驅(qū)動器
FILEMGRCONTROL_REMAP ReMap;
FILEMGRCONTROL_REFRESH Refresh;
FILEMGRCONTROL_DISPLAYDIR DisplayDir;//根據(jù)所給路徑,直接打開文件夾并顯示
ContentList m_ContentList;//內(nèi)容列表,存放可以顯示的內(nèi)容
} FileMgrControl;
//創(chuàng)建FileMgr
EFI_STATUS CreateFileMgr(FileMgrControl *this);
//查找條款,返回位置
INT32 FindDirectory(struct _ContentList *this,CHAR16 *DirectoryName);
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -