argument 依序是
- CommandConde
- InBuffer Pointer
- InBuffer Size
- OutBuffer Pointer
- OutBuffer Size
- Buffer Pointer to Save the returned value (DWORD)
但是這個 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和限制,ref 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 ?
沒有留言:
張貼留言