2007年6月28日 星期四

What is different between SOURCELIB from TARGETLIB in sources

SOURCELIB:
source code need link library
a copy from link library
static link
TARGETLIB:
need import library when use this
Dynamic link

Beginning VS2005 introduce

http://www.cppblog.com/TechLab/articles/9366.html

2007年6月13日 星期三

Kiosk Mode for CE 6.0

http://blogs.msdn.com/mikehall/archive/2007/06/01/kiosk-mode-for-ce-6-0.aspx

不想用CEShell 的好方法

[轉載] AP Launch Flow in WinCE

首先你要瞭解到 task bar 是那個 process, 通常是 explorer.exe
然後你要知道它是怎麼被 launched, it is launched with following registry by kernel


[HKEY_LOCAL_MACHINE\init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00

LaunchXX 是代表 launch sequence,
DependXX 則是帶表當 LaunchYY 還沒 ready 前不會被 Launch
由此可知 explorer 的 Seq is 50 and it depends on Lanch20 (0x14) and Launch30 (0x1e)

Code Snippet
[HKEY_LOCAL_MACHINE\init]
"Launch20"="device.exe"
"Launch30"="gwes.exe"
"Depend30"=hex:14,00

也就是 device.exe (20/0x14) and gwes.exe (30/0x1e)
那再來就是 kernel 怎麼知道被 depend 的 process ready or not, it was deected by SignalStarted API.
基本上就是被 launch 的 App 要再適當時後 invoke SignalStarted to notify kernel it has been started and initilized.

所以可以這樣做
Assume your boot up checking apps is YourApp.exe
那可以加上以下的 registry

Code Snippet
[HKEY_LOCAL_MACHINE\init]
"Launch49"="YourApp.exe"
"Depend49"=hex:14,00, 1e,00 ; depend on devmgr and GWES as well.
"Depend50"=hex:14,00, 1e,00, 31, 00 ; and make the explorer depends on us.

這樣一來你的 App 會先被 loaded, 然後 do whatever you want, 之後假如要放行再 invoke SignalStarted, 不然就把 system shutdown if you want.
BTW, SignalStarted 會需要一個 parameter, sequence number for the apps.
假如是 Launch49 那你的 Seq number 就是 49, 當然 hard coded 不是一個好的辦法, 事實上 每個 LaunchXX 的 App 被 launched 的時後 kernel 都會把 Seq number 以 command parameter 的方式 pass 進去
也就是會由 WinMain 的 lpCmdLine 傳進來
關於 SignalStarted 的實例可以參考 $(_WINCEROOT)\public\shell\OAK\HPC\EXPLORER\MAIN\explorer.cpp or $(_WINCEROOT)\public\common\SDK\SAMPLES\CELOG\FLUSH\CELOGFLUSH\flush.c

http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1720833&SiteID=14

2007年6月12日 星期二

User mode and kernal mode driver in CE6.0

User Moder Driver
  1. have UI or message box
  2. independ on HW setting
  3. VirtualCopy, and its wrapper function MmMapIoSpace could not be called
  4. Under each driver setup entry in the registry, there are IOBase and IOLen keys that we use to mark physical memory.
  • [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]

"IoBase"=dword:02F8

"IoLen"=dword:8

  • [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial] "IoBase"=multi_sz:"2f8","3f6"

"IoLen"=multi_sz:"8","2"


Kernal Mode Driver

  1. have interrupt IRQ
  2. same as CE 5.0

http://www.windowsfordevices.com/articles/AT4670249763.html

2007年6月9日 星期六

川普致富術

簡介:
1980年代,媒體稱川普能點石成金
90年代初期 他負債92億美元 面臨破產
今天 他代表全美知名高價房地產品牌
再紐約擁有超過十座房地產 售價皆高於市價39%
川普親身傳授眾人迫切想問的問題
如何賺到人生的第ㄧ個十億元

知道川普這個名字 是從緯來育樂台播的美國影集 "誰是接班人 "
影集內容是 川普想找ㄧ位優秀的員工年薪六位數美元
全美各行各業頂尖人才都想來應徵
由幾十萬封履歷中挑選 十六位菁英 參加為期13周的競賽
比賽內容 有企畫 有拍廣告 有宣傳 有推銷
看著16位菁英 從無到有 腦力激盪 完成任務
最後失敗那ㄧ隊 要面對川普的質問 每周淘汰一名
隊員 有勾心鬥角 有勇於承擔 有推卸責任
當時 從川普口中說出 "You are fired" 殘酷又現實
印象最深刻的事 勇於承擔的人 認為自己該為失敗負責
要求被Fired 這樣的人 ㄧ定會被川普 Fired
並不會再給一次機會 令我十分訝異
川普認為 他不為自己辯解 不再爭取機會
就像鬥敗的公雞 他的企業不要這種人
而積極爭取 不把失敗當自己責任的人
反而有機會留下
讓我有點矛盾 美國總統華盛頓 砍倒櫻桃樹的故事
不是教大家要勇於承認自己的錯誤嗎
我想藉由 川普致富術這本書 我應該可以得到想要的答案

=================================================
先岔開ㄧ下話題 說說不ㄧ樣的想法
成者為王 敗者為寇
川普因為他現在的成就 是眾所皆知 被認定是成功的
所以他的經驗 可以寫書 可以被傳頌
大家都想認識他 了解他為何能成功
那如果王又增的話 會怎樣 他的ㄧ生有人在乎嗎
會有人想瞭解嗎 他能掏空公司 500億 到現在還沒被抓到
是不是也有過人之處
或許有人會說 當然要循著成功人士的腳步前進
但我相信 在王又增沒被抓包之前 他一樣被列為成功人士
並不是推崇他的行為可取
而是感嘆現實社會的矛盾 大起大落的人生 只是ㄧ線之隔
循著社會的遊戲規則 成功的人 就值得推崇
背離或違反規則的人 就該貶抑
越想越複雜 還是簡單點好
我想說的是 每個人都有一套生活規則 思考邏輯
見賢思齊 見不賢內自省
無所謂 羨慕或鄙視

========================================================
言歸正傳
Trump How to Get Rich
訂商周送的書 來給他好好研究ㄧ下
分六部份介紹川普的思想及生活
弟一部份 川普商業與管理學院
記載他如何管理及用人
1.川普強調對自己的事業要保持專注 並永遠充滿動力
這部分我相信每個創業的老闆剛開始ㄧ定都具備這樣的能力
很多失敗的案例都是在公司步入軌道後 老闆亂投資或開始享受
最後公司經營不善收掉
2.主事著也就是負責人必須確立標準並明確方向不要模擬兩可
不要指望員工比你還賣力工作,川普從不奢望這一點, 員工自有一套標準。
成功者用不同的眼光看問題 問題不是真正的困難 沒有問題那也許你就無事可做了
不要喝斥你的員工 才能聽到直言不諱的真心話 也才能達到自己想要的目標 (R先生與郭先生都做了這件事 結果卻天壤之別....... 另ㄧ個成王敗寇的故事)

記住:你的團隊是你的。
聽起來簡單卻是基本原則
這是你的競技場 由你來選擇戰略 由你來決定結果
川普格言: The Buck starts here 責任由此開始

如果你模擬兩可,說明了你對自己和事業缺乏自信
當評估一項專案 可行與不可行因素各佔一半的話
川普認為這專案是不可行的
他舉的例子太短 我不能完全體會
3. 管理應針對人而不是工作,重視人的能力而不是頭銜
川普能看出為他工作每位員工的潛力,即使是保全也能成為執行副總裁
4.歡迎每ㄧ個創意,但只採納正確的
學會把握分寸 要自信不要莽撞
這是個"時機"的問題-----注意你周圍發生的ㄧ切 根據事情的進展節奏調整自己的步伐
川普在工作時總是想控制事情的發展態勢
其實我也是這樣,我想自己規劃自己想做的事
當然我也會配合環境來做調整
川普喜歡那些永不放棄的人...這裡已經給了我答案
後面不用看了......................................................


第二部 來自川普的職場生涯建議
掌握面試
要求加薪要選適當時機
擁有熱情 並大張旗鼓推銷自己
作最好的準備 最壞的打算
在選擇新職業前 ㄧ定要三思而後行
以積極心態看待ㄧ切
認為自己很重要
正面看待批評
機會只留給那些有準備的人
穿著要注意場合
提升自己的高度
每天沉思三小時
有一點要提ㄧ下 川普不喜歡跟人握手 因為他有潔癖
他認為握手會傳撥細菌 也是啦

第三部 錢錢錢
川普認為做自己最好的財務顧問不透過中間人並要簽婚前協議書
這部份 可能只有他自己做的到 或是說外國人的觀念
川普提到他如何培養小孩認識一塊錢的價值

第四部 談判的秘訣
要有耐心
知道自己想要什麼 但不要急著說出來
考慮對方需要什麼
確保雙方都能獲利
相信自己的直覺
採取戰略上引人注意的大舉動 吸引媒體目光
學會說不的價值

第五部 川普的生活方式
以流水帳的方式記錄川普ㄧ週的生活
只能用 行程緊湊 忙忙忙 來形容

第六部 誰是接班人 幕後
川普敘述如何開始拍攝這部影集的由來
我覺得這部影集會如此轟動的原因是
美國有太多人想為川普工作 而且上電視可以出名(當然得表現優異)
年薪六位數太吸引人
競賽內容十分精采 大家都想知道參賽者如何發揮創意 團隊合作 完成任務
我想川普更藉這節目 名利雙收
既得到優秀的人才 又能為他的企業宣傳

2007年6月4日 星期一

What are Debug Zone and How to use

  1. 在 kitl enable 情況下 不需將system 停止 ,可控制想要列印的 debug information
  2. Debug Zone 可以說是 define name 再加上 debug message output status (on/off)
  3. 每個module 有16個 debug zones
  4. 需 include DbgApi.h
  5. 宣告 DBGPARAM Structure ,必須被 dbCurSettings 呼叫

EX:

#ifdef DEBUG
#define DEFAULT_ZONES 0x11 // init & error

#define ZONE_INIT DEBUGZONE(0)

#define ZONE_FUNCTION DEBUGZONE(1)

#define ZONE_TRACE DEBUGZONE(2)

#define ZONE_WARN DEBUGZONE(3)

#define ZONE_ERROR DEBUGZONE(4)

DBGPARAM dpCurSettings =

{

TEXT("Backlight"),

{ TEXT("Init"), TEXT("Function"),

TEXT("Trace"), TEXT("Warn"),

TEXT("Error"), TEXT("Undefined"),

TEXT("Undefined"), TEXT("Undefined"),

TEXT("Undefined"), TEXT("Undefined"),

TEXT("Undefined"), TEXT("Undefined"),

TEXT("Undefined"), TEXT("Undefined"),

TEXT("Undefined"), TEXT("Undefined") },

DEFAULT_ZONES

};

#endif

DEFAULT_ZONES : 預設開啟的Debug Message,用16Bit 表示,每bit 代表

dpCurSettings array index item enable or disable

EX: 0x3 表示開啟 TEXT("Init") TEXT("Function")

Registering Debug Zones

BOOL WINAPI

BAK_DllEntry(HINSTANCE DllInstance, INT Reason, LPVOID Reserved)

{

switch(Reason) {

case DLL_PROCESS_ATTACH:

DEBUGMSG(ZONE_TRACE, (TEXT("BAK_DllEntry: DLL_PROCESS_ATTACH\r\n")));

DEBUGREGISTER(DllInstance);
// load external DLL if necessary
break;
case DLL_PROCESS_DETACH:

DEBUGMSG(ZONE_TRACE, (TEXT("BAK_DllEntry: DLL_PROCESS_DETACH\r\n")));

// free stuff here
break;

}
// return TRUE for success, FALSE for failure

return TRUE;

}

  • Detail in :

http://msdn2.microsoft.com/en-us/library/aa935747.aspx

http://blogs.msdn.com/ce_base/archive/2006/12/18/debug-messages-and-debug-zones-in-windows-ce.aspx