如果大家在重新安裝Chrome之後,要求你要輸入加密通關密語,這是方便保護你的雲端資料的一種方式。
大家可以在Chrome內設定,如果你沒有設定過的密碼的話,他的預設加密通關密語就是跟你的Gmail登入時的密碼是同一個!
將自己踏入BIOS領域中所學習到的知識做一些心得整理,像是Legacy BIOS、EFI BIOS、Windows Driver...etc. ※版權與智慧財產權聲明:保留所有法律權利。我在寫文章時如果有引用到其他人的地方我會盡量說明參考出處,如果有遺漏的地方請告訴我,我會馬上註明! 而轉貼我的文章時也請您註明出處!
星期二, 1月 31, 2012
星期三, 1月 25, 2012
心得分享: 學習UEFI 之你把C語言學好了嗎?!
很多人在問我說: 小華要怎樣子把UEFI 學好?! 其實寫BIOS的人答案應該只有一個,把SPEC看懂看完然後融會貫通! 這樣子的答案好像有跟沒有是一樣的!
小弟就以我的學習經驗來分享給大家吧!(雖然我也沒學好,但是教學相長啦~)
首先呢你要會C語言,不是C++喔! 因為目前UEFI還是使用C語言開發,其中最主要的原因是因為C的code size會比較小一點,會比較適合Firmware的開發!
學C語言的時候要注意甚麼是#define ? #define 高級用法有哪些?! 甚麼是typedef,這東西跟UEFI 的關係是甚麼? 為什麼UEFI 中是使用UINT32? 而不是一般的unsigned int ? 還有甚麼是function pointer? 這要如何使用與宣告?! 另外就是Link List再處理資料結構時的應用!
大致上C的應用學會,UEFI的code大概就看得懂! 當你看得懂的時候,再去看SPEC就會更瞭解人家在做甚麼了! (記住我的話 : 工欲善其事必先利其器,先把C學好,你才能做更多的事情!)
接下來你要會一些些MASM組合語言,因為在除錯(debug)時多少都要看得懂! 如果時間夠多就去修一下微處理器架構,順便了解一下CPU是如何設計出來的,他對於指令的提取/解碼又是甚麼動作? 甚麼是指令被優化? 他跟CPU的關係是甚麼/組語的Library是怎麼回事?組合語言呼叫C語言是如何呼叫的? 16 bit vs 32 bit vs 64 bit 又有何差別?segment 跟記憶體管理又是甚麼關係? ...etc 這些相關知識如果能懂的話會更好!
然後就是X86的一些架構性的知識,像是中斷是甚麼?! 中斷的種類有幾種?! 為什麼要有中斷?! 中斷跟OS還有CPU之間是怎麼配合的?! 設備的中斷跟CPU的中斷的差別是甚麼? 個別的運作原理又是甚麼? 另外像是甚麼是CPU工作模式(真實模式/保護模式/SMM...etc)/定址又是甚麼東西?!
還有像是PCI bus/SATA/SMBIOS/ACPI....相關的知識都必須要知道,更深入的就會去瞭解到CPU是如何初始化?! Chipset初始化? Memory sizing? 不過這些知識都比較被保護住,所以非相關產業應該得不到這些資訊! 所以先把架構性學好,等待有機會在更深入研究!
綜合上述所說,要學的東西還真的很多! 學BIOS不可能一蹴即成! 往往都需要時間慢慢累積! 但是現在UEFI的入門門檻已經變很低了,只要懂C 在加上遇到好的老師(我在鳳凰科技遇到一個C語言活字典Timothy)或學長,一般大概一年就能獨立接案子! 其他的就是靠自己努力!
還記得我在鳳凰科技的時候有個資深學長(Joe)曾說過一句名言: 我只有一年的BIOS經驗重複了10幾年而已! 所以就是一直重複累積更多的知識與經驗啦!
小弟就以我的學習經驗來分享給大家吧!(雖然我也沒學好,但是教學相長啦~)
首先呢你要會C語言,不是C++喔! 因為目前UEFI還是使用C語言開發,其中最主要的原因是因為C的code size會比較小一點,會比較適合Firmware的開發!
學C語言的時候要注意甚麼是#define ? #define 高級用法有哪些?! 甚麼是typedef,這東西跟UEFI 的關係是甚麼? 為什麼UEFI 中是使用UINT32? 而不是一般的unsigned int ? 還有甚麼是function pointer? 這要如何使用與宣告?! 另外就是Link List再處理資料結構時的應用!
大致上C的應用學會,UEFI的code大概就看得懂! 當你看得懂的時候,再去看SPEC就會更瞭解人家在做甚麼了! (記住我的話 : 工欲善其事必先利其器,先把C學好,你才能做更多的事情!)
接下來你要會一些些MASM組合語言,因為在除錯(debug)時多少都要看得懂! 如果時間夠多就去修一下微處理器架構,順便了解一下CPU是如何設計出來的,他對於指令的提取/解碼又是甚麼動作? 甚麼是指令被優化? 他跟CPU的關係是甚麼/組語的Library是怎麼回事?組合語言呼叫C語言是如何呼叫的? 16 bit vs 32 bit vs 64 bit 又有何差別?segment 跟記憶體管理又是甚麼關係? ...etc 這些相關知識如果能懂的話會更好!
然後就是X86的一些架構性的知識,像是中斷是甚麼?! 中斷的種類有幾種?! 為什麼要有中斷?! 中斷跟OS還有CPU之間是怎麼配合的?! 設備的中斷跟CPU的中斷的差別是甚麼? 個別的運作原理又是甚麼? 另外像是甚麼是CPU工作模式(真實模式/保護模式/SMM...etc)/定址又是甚麼東西?!
還有像是PCI bus/SATA/SMBIOS/ACPI....相關的知識都必須要知道,更深入的就會去瞭解到CPU是如何初始化?! Chipset初始化? Memory sizing? 不過這些知識都比較被保護住,所以非相關產業應該得不到這些資訊! 所以先把架構性學好,等待有機會在更深入研究!
綜合上述所說,要學的東西還真的很多! 學BIOS不可能一蹴即成! 往往都需要時間慢慢累積! 但是現在UEFI的入門門檻已經變很低了,只要懂C 在加上遇到好的老師(我在鳳凰科技遇到一個C語言活字典Timothy)或學長,一般大概一年就能獨立接案子! 其他的就是靠自己努力!
還記得我在鳳凰科技的時候有個資深學長(Joe)曾說過一句名言: 我只有一年的BIOS經驗重複了10幾年而已! 所以就是一直重複累積更多的知識與經驗啦!
星期四, 1月 19, 2012
星期三, 10月 19, 2011
UEFI #pragma intrinsic( function1 [, function2, ...] )
在UEFI C語言中使用 #pragma intrinsic( function1 [, function2, ...] )方式可以簡化你拉Library的動作,但是這個功能是與Compiler相關,因此當你不使用Microsoft Compiler時,可能就要注意原本的UEFI CODE中使用這些方法的地方可能會有問題!
使用方式是在任何xxx.c 中宣告函數原型跟 #pragma intrinsic(),之後就可以在你的CODE中使用他!//宣告函數原型int _inp (unsigned short port); int _outp (unsigned short port, int databyte ); #pragma intrinsic(_inp) #pragma intrinsic(_outp) VOID CMOSWrite(UINT8 Port,UINT8 databyte) { _outp(0×70, Port); _outp(0×71, databyte); }
參考網站 :http://msdn.microsoft.com/zh-tw/library/tzkfha43.aspx
標籤:
EFI BIOS相關知識
星期二, 9月 06, 2011
UEFI Screenshot (Capture screen)
EFI Shell 底下螢幕抓圖(抓屏)方式:
1) 切換到Graphic mode
ConsoleControl->SetMode(ConsoleControl, EfiConsoleControlScreenGraphics);
2)使用Gop->Blt將螢幕圖抓下來
GraphicsOutput->Blt(GraphicsOutput,
Image.PixelData,
EfiBltVideoToBltBuffer, <--此參數決定你要抓圖還是顯示圖
0,
0,
0,
0,
Image.Width,
Image.Height,
0);
3)切換回Text Mode
[Note] 單純在Text Mode呼叫GOP->Blt會抓不到東西.
1) 切換到Graphic mode
ConsoleControl->SetMode(ConsoleControl, EfiConsoleControlScreenGraphics);
2)使用Gop->Blt將螢幕圖抓下來
GraphicsOutput->Blt(GraphicsOutput,
Image.PixelData,
EfiBltVideoToBltBuffer, <--此參數決定你要抓圖還是顯示圖
0,
0,
0,
0,
Image.Width,
Image.Height,
0);
3)切換回Text Mode
[Note] 單純在Text Mode呼叫GOP->Blt會抓不到東西.
標籤:
EFI BIOS相關知識
星期五, 7月 15, 2011
鏈結Library/(XXX.LIB)到你的VC專案
一般我們在寫C語言程式的時候可能會使用到外部的函式庫(Library),那要如何Link Lib到你的專案中呢?!
其實,鏈結你自己的Common.lib到你的C專案中的方式有三種,但是第一步動作可能要先把
Common.lib複製到XXX.vcproj放同一個目錄中:
方式1: 直接在你的專案中的Source files那邊按右鍵選Add Exist file(選*.*),把Common.lib拉進來
方式2: 屬性->Linker->Commandline ->鍵入你的 Common.lib
方式3: 在你的.c/.cpp檔案中直接加入 #pragma comment(lib, "Common")
其實,鏈結你自己的Common.lib到你的C專案中的方式有三種,但是第一步動作可能要先把
Common.lib複製到XXX.vcproj放同一個目錄中:
方式1: 直接在你的專案中的Source files那邊按右鍵選Add Exist file(選*.*),把Common.lib拉進來
方式2: 屬性->Linker->Commandline ->鍵入你的 Common.lib
方式3: 在你的.c/.cpp檔案中直接加入 #pragma comment(lib, "Common")
標籤:
Windows 程式相關
星期二, 7月 12, 2011
C語言巨集定義技巧-#define
轉載自: http://stenlyho.blogspot.com/2007/04/c_04.html
文章中有詳細介紹#define的使用方式,還有範例可以查看。
此作者轉載的連結已經失效,所以我只能再轉載第二手資料:
原轉載:http://miaozl.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&_c02_owner=1&partqs=amonth%3d2%26ayear%3d2007
而這篇文章中說的"宏"是指大陸用語,應該就是我們說的Macro(巨集)
所以在看這篇文章的時候,還是要先了解一下兩岸用詞的不同啦!
文章中有詳細介紹#define的使用方式,還有範例可以查看。
此作者轉載的連結已經失效,所以我只能再轉載第二手資料:
原轉載:http://miaozl.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&_c02_owner=1&partqs=amonth%3d2%26ayear%3d2007
而這篇文章中說的"宏"是指大陸用語,應該就是我們說的Macro(巨集)
所以在看這篇文章的時候,還是要先了解一下兩岸用詞的不同啦!
星期二, 7月 05, 2011
USB Class
底下這個網站記錄著一些跟USB有關的Class資訊,可以方便你查詢:
像是一般我們常會去使用Descriptor 去判斷這個DEVICE的類別是甚麼:
Status = UsbIoPpi->UsbGetInterfaceDescriptor (
...
&InterfaceDesc);
...
if ((InterfaceDesc->InterfaceClass != 0x08) ...) {
return EFI_NOT_FOUND;
}
參考網站:
http://www.xat.nl/en/riscos/sw/usb/class.htm
像是一般我們常會去使用Descriptor 去判斷這個DEVICE的類別是甚麼:
Status = UsbIoPpi->UsbGetInterfaceDescriptor (
...
&InterfaceDesc);
...
if ((InterfaceDesc->InterfaceClass != 0x08) ...) {
return EFI_NOT_FOUND;
}
參考網站:
http://www.xat.nl/en/riscos/sw/usb/class.htm
標籤:
EFI BIOS相關知識
星期四, 6月 30, 2011
EFI需要注意的一些C語言小細節
底下是節錄一些我們Team自己內部分享的一些心得,讓大家知道其實C語言有許許多多的小地方是需要大家注意的!
1.指標最大的問題是Compiler不會做邊界檢查
ex: a[10];
p=&a[0];
*(p+13]; <--這種操作Compiler並不會跟你說有問題
2. Free(p) ;同一個指標只能free 一次,當free(p) 兩次就會出事情
...
3.memcopy(dst,src,size)時記得size不能比目的大
ex:
src[100],dsc[50];
memcopy(dsc,src,sizeof(src)); <--溢位
memcopy(dsc,src,sizeof(dsc)); <--沒事
...
標籤:
EFI BIOS相關知識
UEFI 開發過程中最大的問題~
大家都知道UEFI已經變成這個世代中的BIOS代名詞,但是這個環境下在開發BIOS的時候最怕遇到甚麼事情呢?
答案就是: C語言指標的邊界檢查
指標這個東西在C的環境中讓人又愛又怕。愛的地方是因為指標可以任意的轉型態、任意的操作你想存取的記憶體區塊,但是往往致命的吸引力中就會有他無可避免的壞處!
例如,你可以宣告一個陣列 a[10]; 然後拿一個指標 p指向這個陣列
但是當你的code寫成 *(p+13) 時,就會是個大麻煩!
因為Compiler 並不會告訴你說,嘿! 兄弟你的指標超出存取範圍了! 然後當CODE執行到那邊的時候就出現當機或是難以解釋的事件發生! 往往悲劇就是出現在不注意的小地方~
所以BIOS工程師在撰寫CODE的時候就必須對於指標操作很清楚,不然在UEFI BIOS環境下一定會出現許許多多靈異事件的~ (以前Legacy BIOS最被忽略的是堆疊PUSH/POP沒對齊,現在變成指標 >.<)
不過可喜可賀的是我們家的BIOS工程師對於這一點都很講究啦~
答案就是: C語言指標的邊界檢查
指標這個東西在C的環境中讓人又愛又怕。愛的地方是因為指標可以任意的轉型態、任意的操作你想存取的記憶體區塊,但是往往致命的吸引力中就會有他無可避免的壞處!
例如,你可以宣告一個陣列 a[10]; 然後拿一個指標 p指向這個陣列
但是當你的code寫成 *(p+13) 時,就會是個大麻煩!
因為Compiler 並不會告訴你說,嘿! 兄弟你的指標超出存取範圍了! 然後當CODE執行到那邊的時候就出現當機或是難以解釋的事件發生! 往往悲劇就是出現在不注意的小地方~
所以BIOS工程師在撰寫CODE的時候就必須對於指標操作很清楚,不然在UEFI BIOS環境下一定會出現許許多多靈異事件的~ (以前Legacy BIOS最被忽略的是堆疊PUSH/POP沒對齊,現在變成指標 >.<)
不過可喜可賀的是我們家的BIOS工程師對於這一點都很講究啦~
標籤:
EFI BIOS相關知識
Bluescreen 錯誤碼查詢
底下這個網站的資訊可以幫助你在發生BSOD的時候可以依照Error code來查詢微軟有沒有相關的說明,或是更新檔!
所以大家可以很方便的透過底下這個網站的資訊來解決問題,可以幫助你減少一些搜尋資料的時間:
http://www.bruchmann-web.de/zh-cn/support/windows/bluescreen/0x0000007b/kb-page/2/kb-sort/ms-description--asc/
所以大家可以很方便的透過底下這個網站的資訊來解決問題,可以幫助你減少一些搜尋資料的時間:
http://www.bruchmann-web.de/zh-cn/support/windows/bluescreen/0x0000007b/kb-page/2/kb-sort/ms-description--asc/
標籤:
Windows 程式相關
星期一, 6月 20, 2011
SmmOEMInt15SmiDispatcher
今天在Debug USB問題的時候,設定了斷點在SmmOEMInt15SmiDispatcher中,結果發現進入DOS時這個SWSMI會被一直呼叫。
他的原因是因為CSM 在Hook INT15h的時候,並沒有先在Assembly內判斷任何的Signature,沒有利用任何的Signature來判斷要不要產生SWSMI,因此就變成了只要有人呼叫INT15h 就會產生SWSMI而跳到SmmOEMInt15SmiDispatcher內,然後再EFI 那邊再判斷要不要執行Sub function,如果沒有就退出SWSMI。
為了怕自己忘記有這個BUG所以在BLOG先記錄一下。
目前進入DOS時,有看到呼叫INT15h的人是CONFIG.SYS,而且每按一次Key,就會呼叫3次(SWSMI斷點可以攔到3次?) 這也是件奇怪的事情。
開機過程中攔截到的INT15h 時的AX值如下(依順序):
AX=5355
AX=4101
AX=0000
AX=133A
AX=0326 (此時已經出現Win98 Logo)
AX=3E00 <--我們自己的USB test Utility
進入DOS後,每按下一個Key都會產生下面這個INT15h,看起來跟Config.sys有關,不過尚未查證: AX=5355h , INT15h <--Config.sys
他的原因是因為CSM 在Hook INT15h的時候,並沒有先在Assembly內判斷任何的Signature,沒有利用任何的Signature來判斷要不要產生SWSMI,因此就變成了只要有人呼叫INT15h 就會產生SWSMI而跳到SmmOEMInt15SmiDispatcher內,然後再EFI 那邊再判斷要不要執行Sub function,如果沒有就退出SWSMI。
為了怕自己忘記有這個BUG所以在BLOG先記錄一下。
目前進入DOS時,有看到呼叫INT15h的人是CONFIG.SYS,而且每按一次Key,就會呼叫3次(SWSMI斷點可以攔到3次?) 這也是件奇怪的事情。
開機過程中攔截到的INT15h 時的AX值如下(依順序):
AX=5355
AX=4101
AX=0000
AX=133A
AX=0326 (此時已經出現Win98 Logo)
AX=3E00 <--我們自己的USB test Utility
進入DOS後,每按下一個Key都會產生下面這個INT15h,看起來跟Config.sys有關,不過尚未查證: AX=5355h , INT15h <--Config.sys
星期日, 6月 19, 2011
Win7右鍵新增記事本消失
Win7莫名其妙右鍵新增記事本消失了,所以自己找解決方式。
解決的方式就是自己寫一個XXX.Reg的檔案,內容如下,然後在給他點兩下執行後,消失的新增記事本就又回來啦~
不過微軟作業系統老是出現一些莫名其妙的事情,要怎麼在市場跟人家競爭啦>.<
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.txt]
@="txtfile"
"Content Type"="text/plain"
[HKEY_CLASSES_ROOT\.txt\ShellNew]
"NullFile"=""
[HKEY_CLASSES_ROOT\txtfile]
@="Notepad"
[HKEY_CLASSES_ROOT\txtfile\shell]
[HKEY_CLASSES_ROOT\txtfile\shell\open]
[HKEY_CLASSES_ROOT\txtfile\shell\open\Command]
@="NOTEPAD.EXE %1"
解決的方式就是自己寫一個XXX.Reg的檔案,內容如下,然後在給他點兩下執行後,消失的新增記事本就又回來啦~
不過微軟作業系統老是出現一些莫名其妙的事情,要怎麼在市場跟人家競爭啦>.<
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.txt]
@="txtfile"
"Content Type"="text/plain"
[HKEY_CLASSES_ROOT\.txt\ShellNew]
"NullFile"=""
[HKEY_CLASSES_ROOT\txtfile]
@="Notepad"
[HKEY_CLASSES_ROOT\txtfile\shell]
[HKEY_CLASSES_ROOT\txtfile\shell\open]
[HKEY_CLASSES_ROOT\txtfile\shell\open\Command]
@="NOTEPAD.EXE %1"
標籤:
Windows 程式相關
星期四, 6月 16, 2011
關閉螢幕保護程式計時~
因為有些公司的網管有管制一些本機電腦的Policy...像是每隔一段時間到了,沒人使用電腦就要自動進入螢幕保護程式,以免你電腦資料被竊取。
但是,因為有時候會把工作機拿來打ONLINE GAME,尤其是掛網的時候突然給你斷線就真的OOXX了,因此想要手動關閉螢幕保護程式跟他的登入密碼,但卻發現直接修改Windows所提供的選項是無效的 ><
原來,有些網管可以透過你的電腦登入公司網域的時候,再偷偷幫你把一些設定調整回來,像是有些會透過WinExit.scr這個方式來強制系統每隔一段時間就跳出保護程式,看樣子我們家網管應該也是用這個方式不過鍵值被我刪除了^^Y
他調整的地方的鍵值是在:
所以只要輸入開始-->執行-->輸入regedit
把ScreenSaveActive那些值改成0就可以強制關閉螢幕保護程式每15分鐘跳出來的問題~
原來的值是:
ScreenSaveActive 1 (啟動螢幕保護程式)
ScreenSaverIsSecure 1 (螢幕保護程式結束後要詢問密碼)
ScreenSaveTimeOut 900 (15分鐘)

另外還有一個預設的scrnSave.scr的鍵值也被我刪除了,不過我想應該是跟這個沒有關係...
標籤:
Windows 程式相關
DIY-DEBUG.EXE
一直都覺得Debugger.exe 很好玩,不過都沒時間自己手動寫一個。
剛好趁最近有閒暇時間,就寫了一個搞笑版的Debug.exe 來測試它的原理。
我把我的主程式分成上圖中左半邊的那幾個區塊,一開始的時候先去把INT1/3中斷向量串走,讓他能夠被我控制,接著就去觸發一個INT 3h,我在自己的NewInt3hHandler內去把TF Flag設定起來,那麼離開INT 3h的時候,CPU自己每執行一行指令就會觸發一次INT 1h。
接著,我在自己的NewInt1hHanlder內去處理我的Command,從可以讓我控制我要的動作,而整個執行的畫面就會像是上圖中的右半邊一樣。
不過,寫到這邊時才發現原來反組譯才是最難的啦~
看起來接下來的功課就是去研究反組譯要怎麼做了 >.<
剛好趁最近有閒暇時間,就寫了一個搞笑版的Debug.exe 來測試它的原理。
我把我的主程式分成上圖中左半邊的那幾個區塊,一開始的時候先去把INT1/3中斷向量串走,讓他能夠被我控制,接著就去觸發一個INT 3h,我在自己的NewInt3hHandler內去把TF Flag設定起來,那麼離開INT 3h的時候,CPU自己每執行一行指令就會觸發一次INT 1h。
接著,我在自己的NewInt1hHanlder內去處理我的Command,從可以讓我控制我要的動作,而整個執行的畫面就會像是上圖中的右半邊一樣。
不過,寫到這邊時才發現原來反組譯才是最難的啦~
看起來接下來的功課就是去研究反組譯要怎麼做了 >.<
星期三, 6月 15, 2011
C語言Printf 自動補0
在一般的C語言中顯示HEX時總是會希望能夠補0,像是HEX: 0x10 顯示的時候就希望是0010
那要如何做呢?
其實很簡單,你只要控制printf 內的顯示控制就可以了。
例如:
printf ("%4X",MyHex); <--4個字元,但不會補0
printf ("%04X",MyHex); <--會補0
從下圖中的黑色部分中可以看到AX的值會有兩種結果~
那要如何做呢?
其實很簡單,你只要控制printf 內的顯示控制就可以了。
例如:
printf ("%4X",MyHex); <--4個字元,但不會補0
printf ("%04X",MyHex); <--會補0
從下圖中的黑色部分中可以看到AX的值會有兩種結果~
星期二, 6月 14, 2011
Win7 認不到USB HDD,出現"磁碟簽章發生衝突"
最近遇到Win7接了一個外接USB HDD結果卻看不到,但是在DeviceManager內可以看 到。
查了一下這個錯誤訊息,發現出現"磁碟簽章發生衝突"所以離線, 因此Google大神後找到了一個網站也遇過相同的問題,使用這邊的 "diskpart" 解決方式後就可以看到我的USB HDD了。
http://beddingmall.blogspot.co m/2011/01/blog-post_04.html
查了一下這個錯誤訊息,發現出現"磁碟簽章發生衝突"所以離線,
http://beddingmall.blogspot.co
Uninstall TrendMicro PC-cillin 方式
因為某些需求,所以希望把公司的掃毒程式移除,然後裝上自己喜歡的掃毒程式。
可是我並沒有反安裝的密碼,因此當我要反安裝的時候他會出現輸入密碼的對話框@@
但是沒關係,使用下面的方式可以達到我的需求:
1.執行一個批次檔先把掃毒程式停止,這樣子才能改註冊檔的機碼
先使用文字編輯器產生一個批次檔,我的Stop.bat內容如下:
net stop "OfficeScanNT RealTime Scan"
net stop "OfficeScan NT Listener"
taskkill /F /IM TmListen.exe
taskkill /F /IM PccNTMon.exe
taskkill /F /IM OfcPfwSvc.exe
taskkill /F /IM NTRtScan.exe
net stop "OfficeScan NT Listener"
taskkill /F /IM TmListen.exe
taskkill /F /IM PccNTMon.exe
taskkill /F /IM OfcPfwSvc.exe
taskkill /F /IM NTRtScan.exe
2.使用管理者權限執行stop.bat
3.開啟->執行 ,鍵入Regedit ,然後修改機碼Allow Uninstall = 1:
位置在: HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion\Misc.\Allow Uninstall
4.. 開始->所有程式->TrendMicro ->uninstall trend micro officescan ...
Enjoy...
EFI教學(1)-Flashmap.fdf
在傳統的BIOS 中我們都會使用一些Build tool把一些需要的檔案(OPROM/VBIOS...etc)、BIOS程式碼依照一些"描述檔的設定"把它依序擺放在一個BIOS Image file中,而在EFI BIOS中又是如何操作這部分的動作呢?
在EFI環境中已經有現成的Build tool會去做這件事情,他會去參考一個描述檔內的設定來幫你打包好整個BIOS Image file,然後我們就可以把這個BIOS Image file燒進去SPI ROM裡面。
而這個描述的檔案就叫做Flashmap.fdf ,這個檔案可以分成上下兩部分(下圖左邊所示)
下半部為FlashDeviceImage,也就是當你把抽屜放隔板,隔出一塊塊小區塊後,你要放那些東西進去這些小區塊,這些東西你就要描述在這邊。
所以從範例圖中可以看到上半部先隔出一個區塊叫做NVSTORE,而這個區塊還可以再細分成更多小區塊,例如圖中的SLPKEY,接著在FlashDeviceImage中告訴Build tool說你幫我把Slpkey.bin放到NVSTORE->SLPKEY的這個小區塊中。
而一般我們的EC BIOS也是透過這種方式包進去BIOS Image file內的。
但是你可能會問說那VBIOS跟OPROM也是嗎? 這兩個東西目前是包在DXE code裡面(我們稱FV,firmware volume,有很多的FV,DXE code只是其中之一),所以VBIOSOPROM並非像上面的方式來打包,而是先經過軟體壓縮後放進去FV裡面(可以省Code size),然後再把檔名為XXX.FV依照上面的方式描述在FlashDeviceImage {...} 內,然後Build tool就會把他們打包進去BIOS Image file。
因此,在BIOS開機過程中會把DXE code解壓縮,然後再從裡面把VBIOS/OPROM撈出來。
希望以上的解說對於剛入門EFI的人有幫助啦~
訂閱:
文章 (Atom)



