设计了网站,网站添加微信支付功能,上海有名的网络公司,徐州市住房建设局网站关于OEMIoControl函数#xff0c;我在2008年1月份写过一篇blog叫“WinCE BSP中OAL层中的OEMIoControl介绍”#xff0c;已经比较详细的介绍了OEMIoControl#xff0c;今天在这里只是对OEMIoControl中比较常用的case说一说。看看PB的文档就知道OEMIoControl可以包含很多case而…关于OEMIoControl函数我在2008年1月份写过一篇blog叫“WinCE BSP中OAL层中的OEMIoControl介绍”已经比较详细的介绍了OEMIoControl今天在这里只是对OEMIoControl中比较常用的case说一说。看看PB的文档就知道OEMIoControl可以包含很多case而且被分了类。下面就我个人接触到的和比较常用的做个说明 1. IOCTL_HAL_INIT_RTC 对应OALIoctlHalInitRTC函数该case用于重新初始化RTC。在系统冷启动的时候内核会调用它来设置时钟。 dwIoControlCodeIOCTL_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会被调用。 dwIoControlCodeIOCTL_HAL_ILTIMING lpInBuf传入ILTiming结构 4. IOCTL_HAL_REBOOT 对应OALIoctlHalReboot函数该case用于热启动系统。 5. IOCTL_HAL_ENABLE_WAKE 对应OALIoctlHalEnableWake函数该case用于添加可唤醒系统的中断源。 dwIoControlCodeIOCTL_HAL_ENABLE_WAKE lpInBuf可唤醒系统的系统中断号 6. IOCTL_HAL_DISABLE_WAKE 对应OALIoctlHalDisableWake函数该case用于删除可唤醒系统的中断源。 dwIoControlCodeIOCTL_HAL_DISABLE_WAKE lpInBuf被删除的系统中断号 7. IOCTL_HAL_GET_HIVE_CLEAN_FLAG 对应OALIoctlHalGetHiveCleanFlag函数该case会被Filesys模块调用用于确定是否清除系统Hive和用户Hive。 dwIoControlCodeIOCTL_HAL_GET_HIVE_CLEAN_FLAG lpInBufHIVECLEANFLAG_SYSTEM表示查询系统HiveHIVECLEANFLAG_USERS表示查询用户Hive lpOutBuf返回TRUE表示清除返回FALSE表示不清除 8. IOCTL_HAL_GET_HIVE_RAM_REGION 对应OALIoctlHalGetHiveRamRegion函数该case会被Filesys模块调用返回一块内存区域用来存放Hive此时系统Hive和用户Hive是存放在一起的所以所有的用户都使用同一个用户Hive。 dwIoControlCodeIOCTL_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] CheckForFormatdword:1 dwIoControlCodeIOCTL_HAL_QUERY_FORMAT_PARTITION lpInBuf传入存储介质的信息 lpOutBuf返回TRUE表示该分区需要格式化返回FALSE表示不需要格式化 10. IOCTL_HAL_REQUEST_IRQ 对应OALIoctlHalRequestIrq函数该case用于为一个总线设备申请硬件中断号。 dwIoControlCodeIOCTL_HAL_REQUEST_IRQ lpInBuf传入总线设备的位置信息 lpOutBuf返回硬件中断号 11. IOCTL_HAL_REQUEST_SYSINTR 对应OALIoctlHalRequestSysintr函数该case用于完成物理IRQ到系统中断之间的映射。 dwIoControlCodeIOCTL_HAL_REQUEST_SYSINTR lpInBuf物理IRQ lpOutBuf系统中断SYSINTR 12. IOCTL_HAL_RELEASE_SYSINTR 对应OALIoctlHalReleaseSysintr该case用于释放以前申请的系统中断SYSINTR。 dwIoControlCodeIOCTL_HAL_RELEASE_SYSINTR lpInBuf要被释放的系统中断SYSINTR 13. IOCTL_PROCESSOR_INFORMATION 对应OALIoctlHalProcessorInformation函数该case用于应用程序获得处理器的相关信息。 dwIoControlCodeIOCTL_PROCESSOR_INFORMATION lpOutBuf返回处理器的相关信息 14. IOCTL_HAL_GET_DEVICE_INFO 对应OALIoctlHalGetDeviceInfo函数该case用于获得系统的相关参数信息。 dwIoControlCodeIOCTL_HAL_GET_DEVICE_INFO lpInBuf系统信息码SPI_xxx lpOutBuf根据SPI_xxx码返回相应的系统信息 15. IOCTL_HAL_QUERY_DISPLAYSETTINGS 对应OALIoctlHalQueryDisplaysettings函数该case会被GDI调用来查询显示分辨率和显示深度等信息。 dwIoControlCodeIOCTL_HAL_QUERY_DISPLAYSETTINGS lpOutBuf返回显示宽度高度和深度