Uefi hexedit 源码分析
来源:互联网 发布:中软国际java培训骗局 编辑:程序博客网 时间:2024/06/04 19:56
我们最熟悉的软件应该就是记事本了,UEFI SHELL 下面也提供了一个类似的,叫edit 和 hexedit
用于对文件,磁盘,或者内存 里面的内容进行编辑。
接下来,我们就对它一些关键的函数和数据结构进行分析。
/** Dispatch input to different handler @param[in] Key The input key. One of: ASCII KEY Backspace/Delete Return Direction key: up/down/left/right/pgup/pgdn Home/End INS @retval EFI_SUCCESS The dispatch was done successfully. @retval EFI_LOAD_ERROR The dispatch was not successful. @retval EFI_OUT_OF_RESOURCES A memory allocation failed.**//** * 将不同的输入分发给相应的处理单元,比如你按下的上下左右键,或者翻页,相应的处理函数当然不同。 * @param[in] key 输入键,只可能是其中之一 * ASCII * 删除键 * 回车键 * 返回键 * 方向键: 上/下/左/右/向上翻页/向下翻页/ **/EFI_STATUSEFIAPIFileBufferHandleInput ( IN CONST EFI_INPUT_KEY *Key ){ EFI_STATUS Status; Status = EFI_SUCCESS; // local 变量初始化 switch (Key->ScanCode) { // 对输入的键进行分发 // // ordinary key input // // // 第一种怀况就是常规输入,然后分两种CASE, 如是打开的文件是只读的,直接告诉用户“只读文件不能被修改” // case SCAN_NULL: if (!FileBuffer.ReadOnly) { Status = FileBufferDoCharInput (Key->UnicodeChar); } else { Status = StatusBarSetStatusString (L"Read Only File Can Not Be Modified"); } break; // // up arrow // case SCAN_UP: Status = FileBufferScrollUp (); break; // // down arrow // case SCAN_DOWN: Status = FileBufferScrollDown (); break; // // right arrow // case SCAN_RIGHT: Status = FileBufferScrollRight (); break; // // left arrow // case SCAN_LEFT: Status = FileBufferScrollLeft (); break; // // page up // case SCAN_PAGE_UP: Status = FileBufferPageUp (); break; // // page down // case SCAN_PAGE_DOWN: Status = FileBufferPageDown (); break; // // delete // case SCAN_DELETE: if (!FileBuffer.ReadOnly) { Status = FileBufferDoDelete (); } else { Status = StatusBarSetStatusString (L"Read Only File Can Not Be Modified"); } break; // // home // case SCAN_HOME: FileBufferMovePosition (FileBuffer.FilePosition.Row, 1); Status = EFI_SUCCESS; break; // // end // case SCAN_END: Status = FileBufferEnd (); break; // // insert // case SCAN_INSERT: FileBuffer.ModeInsert = (BOOLEAN)!FileBuffer.ModeInsert; Status = EFI_SUCCESS; break; default: Status = StatusBarSetStatusString (L"Unknown Command"); break; } return Status;}
编辑器一个重要的功能,就是光标随着键盘的输入,不断的响应。
那其实,EDK II 里面已经提供了现成的函数,拿过来调用就是了。
/** Set the cursor position according to FileBuffer.DisplayPosition. @retval EFI_SUCCESS The operation was successful.**//** * 根据 FileBuffer.DisplayPosition 来调整光标的位置 * @ retval EFI_SUCCESS 操作成功。 * */EFI_STATUSEFIAPIFileBufferRestorePosition ( VOID ){ // // set cursor position // // 现成的函数去设置光标的位置 return (gST->ConOut->SetCursorPosition ( gST->ConOut, FileBuffer.DisplayPosition.Column - 1, FileBuffer.DisplayPosition.Row - 1 ));}
阅读全文
0 0
- Uefi hexedit 源码分析
- HexEdit 3.0爆破+部份分析
- HexEdit 3.0
- hexedit使用方法
- C# HexEdit
- UEFI PCI Bus Driver分析
- UEFI
- a hexedit (scoure code)
- HexEdit 十六进制文件编辑器
- UEFI PCI Host Bridge Driver分析
- uefi-ntfs文件系统支持的原理分析
- HexEdit Linux下命令集
- WTL : add HexEdit to CPaneContainerImpl
- 传统bios和UEFI bios启动流程分析
- UEFI启动视频详解:启动分析+N项操作实例
- UEFI启动视频详解:启动分析+N项操作实例
- hexedit在linux下的命令用法
- 源码分析
- Windows命令行查看文件的MD5
- [Java]“语法糖”系列(三)之集合流操作(Stream)[笔记]
- springmvc和struts2的区别
- linux shell使用tar 备份时间命名的文件
- Unity 线性空间对ugui的影响
- Uefi hexedit 源码分析
- MySql 数据库“索引”初体验
- 配置php-fpm
- C++之最长递增子序列的实现(20)---《那些奇怪的算法》
- 模拟登录 快捷键
- codeforces 455B A Lot of Games
- MySql 索引优化
- 《Linux权限管理》
- web的进来