WinCE OAL中的OEMIoControl函数
關于OEMIoControl函數,我在2008年1月份寫過一篇blog叫“WinCE BSP中OAL層中的OEMIoControl介紹”,已經比較詳細的介紹了OEMIoControl,今天在這里只是對OEMIoControl中比較常用的case說一說。看看PB的文檔就知道OEMIoControl可以包含很多case而且被分了類。下面就我個人接觸到的和比較常用的做個說明:
??? 1. IOCTL_HAL_INIT_RTC:
??? 對應OALIoctlHalInitRTC函數,該case用于重新初始化RTC。在系統冷啟動的時候,內核會調用它來設置時鐘。
??? dwIoControlCode:IOCTL_HAL_INIT_RTC
??? lpInBuf:要設置的時鐘結構體
??? 實際上在該case中一般都是注冊RTC的ALarm中斷,然后調用OEMSetRealTime函數來進行設置。關于OAL中的RTC的說明,可以參考我在2008年1月寫的“WinCE中RTC驅動開發介紹”。
??? 2. IOCTL_HAL_POSTINIT:
??? 對應OALIoctlHalPostInit函數,該case會被內核調用,不傳入任何數據,也不返回任何數據。在系統進程啟動之前,它提供了最后一次機會讓我們在OAL中做一些動作。
??? 3. IOCTL_HAL_ILTIMING:
??? 對應OALIoctlHalILTiming函數,該case實現了對ILTiming的支持,當Iltiming.exe運行時,該case會被調用。
??? dwIoControlCode:IOCTL_HAL_ILTIMING
??? lpInBuf:傳入ILTiming結構
??? 4. IOCTL_HAL_REBOOT:
??? 對應OALIoctlHalReboot函數,該case用于熱啟動系統。
??? 5. IOCTL_HAL_ENABLE_WAKE:
??? 對應OALIoctlHalEnableWake函數,該case用于添加可喚醒系統的中斷源。
??? dwIoControlCode:IOCTL_HAL_ENABLE_WAKE
??? lpInBuf:可喚醒系統的系統中斷號
??? 6. IOCTL_HAL_DISABLE_WAKE:
??? 對應OALIoctlHalDisableWake函數,該case用于刪除可喚醒系統的中斷源。
??? dwIoControlCode:IOCTL_HAL_DISABLE_WAKE
??? lpInBuf:被刪除的系統中斷號
??? 7. IOCTL_HAL_GET_HIVE_CLEAN_FLAG:
??? 對應OALIoctlHalGetHiveCleanFlag函數,該case會被Filesys模塊調用,用于確定是否清除系統Hive和用戶Hive。
??? dwIoControlCode:IOCTL_HAL_GET_HIVE_CLEAN_FLAG
??? lpInBuf:HIVECLEANFLAG_SYSTEM表示查詢系統Hive;HIVECLEANFLAG_USERS表示查詢用戶Hive
??? lpOutBuf:返回TRUE表示清除,返回FALSE表示不清除
??? 8. IOCTL_HAL_GET_HIVE_RAM_REGION:
??? 對應OALIoctlHalGetHiveRamRegion函數,該case會被Filesys模塊調用,返回一塊內存區域用來存放Hive,此時系統Hive和用戶Hive是存放在一起的,所以所有的用戶都使用同一個用戶Hive。
??? dwIoControlCode:IOCTL_HAL_GET_HIVE_RAM_REGION
??? lpOutBuf:返回一個存放Hive的RAM結構信息
??? 9. IOCTL_HAL_QUERY_FORMAT_PARTITION:
??? 對應OALIoctlHalQueryFormatPartition函數,該case會被Filesys模塊調用,返回是否需要格式化某個分區。對于一塊存儲介質來說,如果在該介質驅動的注冊表配置中設置了CheckForFormat項,Filesys模塊才會調用該case,例如:
??? [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MyProfile/FATFS]
??? "CheckForFormat"=dword:1
??? dwIoControlCode:IOCTL_HAL_QUERY_FORMAT_PARTITION
??? lpInBuf:傳入存儲介質的信息
??? lpOutBuf:返回TRUE表示該分區需要格式化,返回FALSE表示不需要格式化
??? 10. IOCTL_HAL_REQUEST_IRQ:
??? 對應OALIoctlHalRequestIrq函數,該case用于為一個總線設備申請硬件中斷號。
??? dwIoControlCode:IOCTL_HAL_REQUEST_IRQ
??? lpInBuf:傳入總線設備的位置信息
??? lpOutBuf:返回硬件中斷號
??? 11. IOCTL_HAL_REQUEST_SYSINTR:
??? 對應OALIoctlHalRequestSysintr函數,該case用于完成物理IRQ到系統中斷之間的映射。
??? dwIoControlCode:IOCTL_HAL_REQUEST_SYSINTR
??? lpInBuf:物理IRQ
??? lpOutBuf:系統中斷SYSINTR
??? 12. IOCTL_HAL_RELEASE_SYSINTR:
??? 對應OALIoctlHalReleaseSysintr,該case用于釋放以前申請的系統中斷SYSINTR。
??? dwIoControlCode:IOCTL_HAL_RELEASE_SYSINTR
??? lpInBuf:要被釋放的系統中斷SYSINTR
??? 13. IOCTL_PROCESSOR_INFORMATION:
??? 對應OALIoctlHalProcessorInformation函數,該case用于應用程序獲得處理器的相關信息。
??? dwIoControlCode:IOCTL_PROCESSOR_INFORMATION
??? lpOutBuf:返回處理器的相關信息
??? 14. IOCTL_HAL_GET_DEVICE_INFO:
??? 對應OALIoctlHalGetDeviceInfo函數,該case用于獲得系統的相關參數信息。
??? dwIoControlCode:IOCTL_HAL_GET_DEVICE_INFO
??? lpInBuf:系統信息碼SPI_xxx
??? lpOutBuf:根據SPI_xxx碼,返回相應的系統信息
??? 15. IOCTL_HAL_QUERY_DISPLAYSETTINGS:
??? 對應OALIoctlHalQueryDisplaysettings函數,該case會被GDI調用來查詢顯示分辨率和顯示深度等信息。
??? dwIoControlCode:IOCTL_HAL_QUERY_DISPLAYSETTINGS
??? lpOutBuf:返回顯示寬度,高度和深度
總結
以上是生活随笔為你收集整理的WinCE OAL中的OEMIoControl函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软神速!Windows 11的2023
- 下一篇: Makefile.am