8.20.2007

KernelIoControl

ref msdn http://msdn2.microsoft.com/en-us/library/ms886729.aspx
argument 依序是
  1. CommandConde
  2. InBuffer Pointer
  3. InBuffer Size
  4. OutBuffer Pointer
  5. OutBuffer Size
  6. 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的話,要
  1. 先define IOControl code ,用 CTL_CODE 宣告,有很多argument和限制,ref http://msdn2.microsoft.com/en-us/library/ms904001.aspx
  2. 在oal 中寫好處理的function,通常會是 OALIoCtlXXX( ),這個funciton 的argument也是限制的,要符合iocontrol 的四個argument : in,insize,out,outsize。
  3. 在oak_ioctl_tab.h 中建立IOcontrol code和 iocontrol function 的關聯。



在 CTL_CODE的說明頁,有說明可以指定 cotrol type.(oal 的就是FILE_DEVICE_HAL)。
這樣看來,也可以用 FILE_DEVICE_BATTERY 來指定由battery 來handle ?

沒有留言: