WinCE OAL中的OEMIoControl函數(shù)詳解
在這里只是對(duì)OEMIoControl中比較常用的case說(shuō)一說(shuō)。看看PB的文檔就知道OEMIoControl函數(shù)可以包含很多case而且被分了類。下面就我個(gè)人接觸到的和比較常用的做個(gè)說(shuō)明:
1. IOCTL_HAL_INIT_RTC:
對(duì)應(yīng)OALIoctlHalInitRTC函數(shù),該case用于重新初始化RTC。在系統(tǒng)冷啟動(dòng)的時(shí)候,內(nèi)核會(huì)調(diào)用它來(lái)設(shè)置時(shí)鐘。
dwIoControlCode:IOCTL_HAL_INIT_RTC
lpInBuf:要設(shè)置的時(shí)鐘結(jié)構(gòu)體
實(shí)際上在該case中一般都是注冊(cè)RTC的ALARM中斷,然后調(diào)用OEMSetRealTime函數(shù)來(lái)進(jìn)行設(shè)置。關(guān)于OAL中的RTC的說(shuō)明,可以參考我在2008年1月寫的“WinCE中RTC驅(qū)動(dòng)開發(fā)介紹”。
2. IOCTL_HAL_POSTINIT:
對(duì)應(yīng)OALIoctlHalPostInit函數(shù),該case會(huì)被內(nèi)核調(diào)用,不傳入任何數(shù)據(jù),也不返回任何數(shù)據(jù)。在系統(tǒng)進(jìn)程啟動(dòng)之前,它提供了最后一次機(jī)會(huì)讓我們?cè)贠AL中做一些動(dòng)作。
3. IOCTL_HAL_ILTIMING:
對(duì)應(yīng)OALIoctlHalILTiming函數(shù),該case實(shí)現(xiàn)了對(duì)ILTiming的支持,當(dāng)Iltiming.exe運(yùn)行時(shí),該case會(huì)被調(diào)用。
dwIoControlCode:IOCTL_HAL_ILTIMING
lpInBuf:傳入ILTiming結(jié)構(gòu)
4. IOCTL_HAL_REBOOT:
對(duì)應(yīng)OALIoctlHalReboot函數(shù),該case用于熱啟動(dòng)系統(tǒng)。
5. IOCTL_HAL_ENABLE_WAKE:
對(duì)應(yīng)OALIoctlHalEnableWake函數(shù),該case用于添加可喚醒系統(tǒng)的中斷源。
dwIoControlCode:IOCTL_HAL_ENABLE_WAKE
lpInBuf:可喚醒系統(tǒng)的系統(tǒng)中斷號(hào)
6. IOCTL_HAL_DISABLE_WAKE:
對(duì)應(yīng)OALIoctlHalDisableWake函數(shù),該case用于刪除可喚醒系統(tǒng)的中斷源。
dwIoControlCode:IOCTL_HAL_DISABLE_WAKE
lpInBuf:被刪除的系統(tǒng)中斷號(hào)
7. IOCTL_HAL_GET_HIVE_CLEAN_FLAG:
對(duì)應(yīng)OALIoctlHalGetHiveCleanFlag函數(shù),該case會(huì)被Filesys模塊調(diào)用,用于確定是否清除系統(tǒng)Hive和用戶Hive。
dwIoControlCode:IOCTL_HAL_GET_HIVE_CLEAN_FLAG
lpInBuf:HIVECLEANFLAG_SYSTEM表示查詢系統(tǒng)Hive;HIVECLEANFLAG_USERS表示查詢用戶Hive
lpOutBuf:返回TRUE表示清除,返回FALSE表示不清除
8. IOCTL_HAL_GET_HIVE_RAM_REGION:
對(duì)應(yīng)OALIoctlHalGetHiveRamRegion函數(shù),該case會(huì)被Filesys模塊調(diào)用,返回一塊內(nèi)存區(qū)域用來(lái)存放Hive,此時(shí)系統(tǒng)Hive和用戶Hive是存放在一起的,所以所有的用戶都使用同一個(gè)用戶Hive。
dwIoControlCode:IOCTL_HAL_GET_HIVE_RAM_REGION
lpOutBuf:返回一個(gè)存放Hive的RAM結(jié)構(gòu)信息
9. IOCTL_HAL_QUERY_FORMAT_PARTITION:
對(duì)應(yīng)OALIoctlHalQueryFormatPartition函數(shù),該case會(huì)被Filesys模塊調(diào)用,返回是否需要格式化某個(gè)分區(qū)。對(duì)于一塊存儲(chǔ)介質(zhì)來(lái)說(shuō),如果在該介質(zhì)驅(qū)動(dòng)的注冊(cè)表配置中設(shè)置了CheckForFormat項(xiàng),F(xiàn)ilesys模塊才會(huì)調(diào)用該case,例如:
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MyProfile\FATFS]
"CheckForFormat"=dword:1
dwIoControlCode:IOCTL_HAL_QUERY_FORMAT_PARTITION
lpInBuf:傳入存儲(chǔ)介質(zhì)的信息
lpOutBuf:返回TRUE表示該分區(qū)需要格式化,返回FALSE表示不需要格式化
10. IOCTL_HAL_REQUEST_IRQ:
對(duì)應(yīng)OALIoctlHalRequestIrq函數(shù),該case用于為一個(gè)總線設(shè)備申請(qǐng)硬件中斷號(hào)。
dwIoControlCode:IOCTL_HAL_REQUEST_IRQ
lpInBuf:傳入總線設(shè)備的位置信息
lpOutBuf:返回硬件中斷號(hào)
11. IOCTL_HAL_REQUEST_SYSINTR:
對(duì)應(yīng)OALIoctlHalRequestSysintr函數(shù),該case用于完成物理IRQ到系統(tǒng)中斷之間的映射。
dwIoControlCode:IOCTL_HAL_REQUEST_SYSINTR
lpInBuf:物理IRQ
lpOutBuf:系統(tǒng)中斷SYSINTR
12. IOCTL_HAL_RELEASE_SYSINTR:
對(duì)應(yīng)OALIoctlHalReleaseSysintr,該case用于釋放以前申請(qǐng)的系統(tǒng)中斷SYSINTR。
dwIoControlCode:IOCTL_HAL_RELEASE_SYSINTR
lpInBuf:要被釋放的系統(tǒng)中斷SYSINTR
13. IOCTL_PROCESSOR_INFORMATION:
對(duì)應(yīng)OALIoctlHalProcessorInformation函數(shù),該case用于應(yīng)用程序獲得處理器的相關(guān)信息。
dwIoControlCode:IOCTL_PROCESSOR_INFORMATION
lpOutBuf:返回處理器的相關(guān)信息
14. IOCTL_HAL_GET_DEVICE_INFO:
對(duì)應(yīng)OALIoctlHalGetDeviceInfo函數(shù),該case用于獲得系統(tǒng)的相關(guān)參數(shù)信息。
dwIoControlCode:IOCTL_HAL_GET_DEVICE_INFO
lpInBuf:系統(tǒng)信息碼SPI_xxx
lpOutBuf:根據(jù)SPI_xxx碼,返回相應(yīng)的系統(tǒng)信息
15. IOCTL_HAL_QUERY_DISPLAYSETTINGS:
對(duì)應(yīng)OALIoctlHalQueryDisplaysettings函數(shù),該case會(huì)被GDI調(diào)用來(lái)查詢顯示分辨率和顯示深度等信息。
dwIoControlCode:IOCTL_HAL_QUERY_DISPLAYSETTINGS
lpOutBuf:返回顯示寬度,高度和深度
【編輯推薦】