﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-snowman1101</title><link>http://www.cppblog.com/snowman1101/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:09:04 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:09:04 GMT</pubDate><ttl>60</ttl><item><title>给Ubuntu Server 16.04 安装 DeskTop 图形界面</title><link>http://www.cppblog.com/snowman1101/archive/2016/09/27/214305.html</link><dc:creator>snowman1101</dc:creator><author>snowman1101</author><pubDate>Tue, 27 Sep 2016 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/snowman1101/archive/2016/09/27/214305.html</guid><wfw:comment>http://www.cppblog.com/snowman1101/comments/214305.html</wfw:comment><comments>http://www.cppblog.com/snowman1101/archive/2016/09/27/214305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowman1101/comments/commentRss/214305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowman1101/services/trackbacks/214305.html</trackback:ping><description><![CDATA[使用 Ubuntu Server &nbsp;难免会遇到需要gui的时候，<br />这里介绍一种最简单的方法<br /><br /><div>$sudo tasksel<br /><br />这一句就可以了。<br />然后会有桌面列表可以选择，空格键选择，然后回车。<br />等待完成。</div><img src ="http://www.cppblog.com/snowman1101/aggbug/214305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowman1101/" target="_blank">snowman1101</a> 2016-09-27 17:04 <a href="http://www.cppblog.com/snowman1101/archive/2016/09/27/214305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Surface 的UEFI固件 里USB EFI_BLOCK_IO 的LastBlock BUG</title><link>http://www.cppblog.com/snowman1101/archive/2016/06/14/213705.html</link><dc:creator>snowman1101</dc:creator><author>snowman1101</author><pubDate>Tue, 14 Jun 2016 01:28:00 GMT</pubDate><guid>http://www.cppblog.com/snowman1101/archive/2016/06/14/213705.html</guid><wfw:comment>http://www.cppblog.com/snowman1101/comments/213705.html</wfw:comment><comments>http://www.cppblog.com/snowman1101/archive/2016/06/14/213705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowman1101/comments/commentRss/213705.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowman1101/services/trackbacks/213705.html</trackback:ping><description><![CDATA[今天拿到了 Microsoft Surface 3 ，<br />测试一个EFI程序的时候总是出问题，<br />后来查了一下，发现在使用EFI_BLOCK_IO 取得外接USB闪存大小的时候<br />也就是 BlkIo-&gt;Media-&gt;LastBlock 取得的大小会比实际的多出来一个<br />估计是写固件的人理解出了问题。<br />这里是定义<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br />&nbsp;&nbsp;Block&nbsp;IO&nbsp;read&nbsp;only&nbsp;mode&nbsp;data&nbsp;and&nbsp;updated&nbsp;only&nbsp;via&nbsp;members&nbsp;of&nbsp;BlockIO<br />*</span><span style="color: #008000; ">*/</span><br />typedef&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;{<br />&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;The&nbsp;curent&nbsp;media&nbsp;Id.&nbsp;If&nbsp;the&nbsp;media&nbsp;changes,&nbsp;this&nbsp;value&nbsp;is&nbsp;changed.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;UINT32&nbsp;&nbsp;MediaId;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;TRUE&nbsp;if&nbsp;the&nbsp;media&nbsp;is&nbsp;removable;&nbsp;otherwise,&nbsp;FALSE.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;BOOLEAN&nbsp;RemovableMedia;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;TRUE&nbsp;if&nbsp;there&nbsp;is&nbsp;a&nbsp;media&nbsp;currently&nbsp;present&nbsp;in&nbsp;the&nbsp;device;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;othersise,&nbsp;FALSE.&nbsp;THis&nbsp;field&nbsp;shows&nbsp;the&nbsp;media&nbsp;present&nbsp;status<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;as&nbsp;of&nbsp;the&nbsp;most&nbsp;recent&nbsp;ReadBlocks()&nbsp;or&nbsp;WriteBlocks()&nbsp;call.&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;BOOLEAN&nbsp;MediaPresent;<br />&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;TRUE&nbsp;if&nbsp;LBA&nbsp;0&nbsp;is&nbsp;the&nbsp;first&nbsp;block&nbsp;of&nbsp;a&nbsp;partition;&nbsp;otherwise<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;FALSE.&nbsp;For&nbsp;media&nbsp;with&nbsp;only&nbsp;one&nbsp;partition&nbsp;this&nbsp;would&nbsp;be&nbsp;TRUE.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;BOOLEAN&nbsp;LogicalPartition;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;TRUE&nbsp;if&nbsp;the&nbsp;media&nbsp;is&nbsp;marked&nbsp;read-only&nbsp;otherwise,&nbsp;FALSE.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;This&nbsp;field&nbsp;shows&nbsp;the&nbsp;read-only&nbsp;status&nbsp;as&nbsp;of&nbsp;the&nbsp;most&nbsp;recent&nbsp;WriteBlocks&nbsp;()&nbsp;call.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;BOOLEAN&nbsp;ReadOnly;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;TRUE&nbsp;if&nbsp;the&nbsp;WriteBlock&nbsp;()&nbsp;function&nbsp;caches&nbsp;write&nbsp;data.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;BOOLEAN&nbsp;WriteCaching;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;The&nbsp;intrinsic&nbsp;block&nbsp;size&nbsp;of&nbsp;the&nbsp;device.&nbsp;If&nbsp;the&nbsp;media&nbsp;changes,&nbsp;then<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;this&nbsp;field&nbsp;is&nbsp;updated.&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;UINT32&nbsp;&nbsp;BlockSize;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;Supplies&nbsp;the&nbsp;alignment&nbsp;requirement&nbsp;for&nbsp;any&nbsp;buffer&nbsp;to&nbsp;read&nbsp;or&nbsp;write&nbsp;block(s).<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;UINT32&nbsp;&nbsp;IoAlign;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;The&nbsp;last&nbsp;logical&nbsp;block&nbsp;address&nbsp;on&nbsp;the&nbsp;device.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;If&nbsp;the&nbsp;media&nbsp;changes,&nbsp;then&nbsp;this&nbsp;field&nbsp;is&nbsp;updated.&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;EFI_LBA&nbsp;LastBlock;&nbsp;<br />&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;Only&nbsp;present&nbsp;if&nbsp;EFI_BLOCK_IO_PROTOCOL.Revision&nbsp;is&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;EFI_BLOCK_IO_PROTOCOL_REVISION2.&nbsp;Returns&nbsp;the&nbsp;first&nbsp;LBA&nbsp;is&nbsp;aligned&nbsp;to&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;a&nbsp;physical&nbsp;block&nbsp;boundary.&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;EFI_LBA&nbsp;LowestAlignedLba;<br />&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;Only&nbsp;present&nbsp;if&nbsp;EFI_BLOCK_IO_PROTOCOL.Revision&nbsp;is&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;EFI_BLOCK_IO_PROTOCOL_REVISION2.&nbsp;Returns&nbsp;the&nbsp;number&nbsp;of&nbsp;logical&nbsp;blocks&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;per&nbsp;physical&nbsp;block.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;UINT32&nbsp;LogicalBlocksPerPhysicalBlock;<br />&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;Only&nbsp;present&nbsp;if&nbsp;EFI_BLOCK_IO_PROTOCOL.Revision&nbsp;is&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;EFI_BLOCK_IO_PROTOCOL_REVISION3.&nbsp;Returns&nbsp;the&nbsp;optimal&nbsp;transfer&nbsp;length<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;granularity&nbsp;as&nbsp;a&nbsp;number&nbsp;of&nbsp;logical&nbsp;blocks.<br />&nbsp;&nbsp;</span><span style="color: #808080; ">///<br /></span>&nbsp;&nbsp;UINT32&nbsp;OptimalTransferLengthGranularity;<br />}&nbsp;EFI_BLOCK_IO_MEDIA;</div>其中那个<span style="font-size: 13px; background-color: #eeeeee;">LastBlock是这样说明的</span><br /><span style="font-size: 13px; color: #008000;">&nbsp;&nbsp;</span><span style="font-size: 13px; color: #808080;">///</span><span style="font-size: 13px; color: #008000;">&nbsp;The&nbsp;last&nbsp;logical&nbsp;block&nbsp;address&nbsp;on&nbsp;the&nbsp;device.</span><span style="font-size: 13px; color: #808080;"><br /></span><span style="font-size: 13px; background-color: #eeeeee;">所以应该是总的</span><span style="color: #008000; font-size: 13px;">block&nbsp;</span><span style="font-size: 13px; background-color: #eeeeee;">数-1.<br /></span>不知道微软的工程师为什么会有这样的错误<br /><img src ="http://www.cppblog.com/snowman1101/aggbug/213705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowman1101/" target="_blank">snowman1101</a> 2016-06-14 09:28 <a href="http://www.cppblog.com/snowman1101/archive/2016/06/14/213705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【构建UEFI 64位虚拟测试环境 】</title><link>http://www.cppblog.com/snowman1101/archive/2013/03/28/198893.html</link><dc:creator>snowman1101</dc:creator><author>snowman1101</author><pubDate>Thu, 28 Mar 2013 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/snowman1101/archive/2013/03/28/198893.html</guid><wfw:comment>http://www.cppblog.com/snowman1101/comments/198893.html</wfw:comment><comments>http://www.cppblog.com/snowman1101/archive/2013/03/28/198893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowman1101/comments/commentRss/198893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowman1101/services/trackbacks/198893.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">前言&nbsp;<br />&nbsp;编译好 EFI程序后，每次都用U盘到另外一台电脑上测试实在很麻烦，一天下来U盘要插拔很多次<br />无意中发现</span>Oracle VM VirtualBox 的系统选项中有个 支持 EFi 。<br />又在网上找了一下发现&nbsp;VMware Player&nbsp;也可以支持 EFI<br /><span style="font-size: 10pt;">下面总结一下方法<br /></span><span style="font-size: 10pt;"><br /></span><span style="font-size: 10pt;">1. 首先到VMWARE官网下载免费的 VMware Player </span><a href="http://www.vmware.com/products/player/" target="_blank"><span style="font-size: 10pt;">下载</span><br /></a><span style="font-size: 10pt;">2.正常安装VM Player后 创建一个新的虚拟主机，并且类型选择 64位的OS<br />3.到创建的虚拟机目录 找到 .</span><span style="color: #333333; font-family: Tahoma, Verdana; font-size: 10pt; line-height: normal; background-color: #ffffff;">vmx文件 用记事本打开 然后添加一行&nbsp;</span><br style="color: #333333; font-family: Tahoma, Verdana; font-size: 12px; line-height: normal; background-color: #ffffff;" /><span style="color: #333333; font-family: Tahoma, Verdana; font-size: 12px; line-height: normal; background-color: #ffffff;"><strong>firmware = "efi"&nbsp;</strong><br />这样你的VM虚拟机就支持UEFI启动了。<br /><br /><br /></span><span style="color: #333333; font-family: Tahoma, Verdana; font-size: 12px; line-height: normal; background-color: #ffffff;">如果想要测试我们自己编译的 .EFI 程序的话<br /></span>到虚拟主机的编辑选项中，新添加一个硬盘，然后类型选择实际物理磁盘<br />根据个人的需要再选择整个磁盘或者某一个分区<br />之后把编译好的EFI文件复制到指定的磁盘或者分区中就可以了。<br />要注意的是，开启虚拟机的时候必须保证指定的磁盘/分区是关闭的。同样复制文件的时候也要关闭虚拟机。<br /><br /><br /><span style="color: #333333; font-family: Tahoma, Verdana; font-size: 12px; line-height: normal; background-color: #ffffff;"><br /></span><br /><br /><a href="http://www.vmware.com/products/player/"><br /></a><img src ="http://www.cppblog.com/snowman1101/aggbug/198893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowman1101/" target="_blank">snowman1101</a> 2013-03-28 11:12 <a href="http://www.cppblog.com/snowman1101/archive/2013/03/28/198893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>