ECBACK.SYS
最近工廠PE端需要一堆測試程式,這些程式主要是用於測試EC的各種功能如:測試風扇,測試電池,測試鍵盤等等。而且要求通吃vista,xp,winpe。我起初建議使用wmi acpi實現,可是發現wmi acpi在winpe下無法工作。迫於無奈只有實現一個IO port的driver,然後AP透過EC的back door 存取EC XRAM®,只有這個方法才能通吃三個平台了.
IO port driver是非常簡單的driver了,winio就是一隻這種類型的driver。winio是通過修改IOPM開啟應用程式IO RW許可權的,我寫的這個ECBACK.sys則是使用DDK的API讀寫IO實現的。我參考了winio 載入 driver 部分的代碼,所以我將ECBACK.sys kernel mode & user mode source code開放在這裡下載。解壓後會三個檔案夾其中sys中是 ECBACK.sys的source code,lib是我匯出的user mode api 一共包含四個函數:
#ifndef __ECBACKAPI_H__
#define __ECBACKAPI_H__
BOOL Install_ECBackDrv(void);
BOOL Uninstall_ECBACKDrv(void);
void Write_EC_UCHAR(IN UCHAR port_base,IN UCHAR add_H,IN UCHAR add_L,IN UCHAR data);
UCHAR Read_EC_UCHAR(IN UCHAR port_base, IN UCHAR add_H,UCHAR add_L);
#endif
Install_ECBackDrv通過建立service的方式載入driver,這樣AP才可以和driver溝通。讀寫io port部分也被封裝到了Write_EC_UCHAR & Read_EC_UCHAR中了,user不用再去調用DeviceIoControl再往下送IRP了。使用完之後需要調用Uninstall_ECBACKDrv,該函數會將Install_ECBackDrv建立的service移除掉。檔案夾 ECBDTest是我寫的一個測試程式用於示範如何使用lib檔案夾中匯出的函數。這些部分實現了以後其他組寫測試程式只需要按照sample code寫法實現就好了,我解放了J!
That’s all!
Peter