來源: 如何disable taskbar

 

Elay: 節錄重點討論,翻譯、整理部分語句。

 

主題: 如何將 ap 開機執行時,可優先其他程式提前被執行。

 

Q: 想要在WinCE 開機後,強迫使用者一定要先使用我的ap,所以想要把一些按鍵disable掉。我目前可以把ESC跟ENTER兩個按鍵鎖住,避免使用者關掉我的AP, 下一步是想要把taskbar disable,讓使用者無法去執行,請問有什麼方法可以達到呢 ?

 

A: 首先要瞭解到 task bar 是那個 process(通常是 explorer.exe),然後要知道它是怎麼被 launch的:

it is launched with following registry by kernel


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

- LaunchXX 是代表此process 的 launch sequence
- DependXX 則是說明,LaunchXX要等待那些 process ready,所以value 裡列出的 LaunchYY 還沒準備好前,LaunchXX 是不會被啟動的。


由此可知 explorer 的 Seq 是 50,他會等待Lanch20 (0x14) 跟 Launch30 (0x1e) 完成才會被呼叫,也就是 device.exe (20/0x14) 和 gwes.exe (30/0x1e)。


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


那再來就是 kernel 怎麼知道被 depend 的 process ready 了沒,此部份是由 SignalStarted API 所提供的,基本上就是被 launch 的 ap 要在適當時間, invoke SignalStarted,並通知 kernel 這個ap已經開始並初始化了。

所以此問題可以這樣做,假設你的ap 叫 YourApp.exe,那可以加上以下的 registry

[HKEY_LOCAL_MACHINE\init]
"Launch49"="YourApp.exe"
"Depend49"=hex:14,00, 1e,00 ; depend on devmgr and GWES
"Depend50"=hex:14,00, 1e,00, 31, 00 ; 並且讓 explorer depends 你的AP

這樣一來你的 ap 會先被 載入,然後做你要做的工作,完成你的工作後再 invoke SignalStarted,不然可選擇完成工作後 shutdown system。


BTW, SignalStarted 會需要一個參數:該ap的sequence number,假如是 Launch49 那你的 Seq number 就是 49,當然 hard coded 不是一個好的辦法, 事實上每個 LaunchXX 的 ap 被啟動時, kernel 都會把 Seq number 以 command parameter 的方式 傳進去,也就是會由 WinMain 的 lpCmdLine 傳進來。

關於 SignalStarted 的實例可參考:

$(_WINCEROOT)\public\shell\OAK\HPC\EXPLORER\MAIN\explorer.cpp
$(_WINCEROOT)\public\common\SDK\SAMPLES\CELOG\FLUSH\CELOGFLUSH\flush.c

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()