參考 msdn http://msdn2.microsoft.com/en-us/library/ms886729.aspx
argument 依序是
CommandConde
InBuffer Pointer
InBuffer Size
OutBuffer Pointer
OutBuffer Size
Buffer Pointer to Save the returned value (DWORD)就和 Linux 的 IOControl 一樣。
但是這個 IOControl 是對 Kernel ,在source code上來說,也就是 OAL。
CE 的 Driver 都是run 在 User Space (6.0以前),
所以driver 的access 方法不一樣。
driver 的iocontrol 和 linux 的比較類似,
就是 open device,然後用iocontrol function。
但是 kernel 不是 driver,所以就不用open 了,
直接呼叫 KernelIoControl( )就可以。
自己要加一些 Kernel IoControl command的話,要
先define IOControl code ,
用 CTL_CODE 宣告,
有很多argument和限制,
參考 http://msdn2.microsoft.com/en-us/library/ms904001.aspx
在oal 中寫好處理的function,
通常會是 OALIoCtlXXX( ),
這個funciton 的argument也是限制的,
要符合iocontrol 的四個argument : in,insize,out,outsize。
在oak_ioctl_tab.h 中建立IOcontrol code和 iocontrol function 的關聯。
在 CTL_CODE的說明頁,
有說明可以指定 cotrol type.(oal 的就是FILE_DEVICE_HAL)。
這樣看來,也可以用 FILE_DEVICE_BATTERY 來指定由battery 來handle ?