关于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函数相关推荐

  1. WinCE OAL中的RAM定制函数

    在WinCE系统中,Kernel是如何使用内存的,如何知道内存的大小?是通过config.bib文件的描述,我们会在config.bib文件中MEMORY段定义WinCE内核所占用RAM的起始地址和大 ...

  2. 【转载】WinCE OAL架构分析

    转载自:http://blog.csdn.net/nanjianhui/article/details/3830452 我个人认为OAL应该是WinCE BSP中最为重要的一个模块了,简单回顾一下,W ...

  3. WINCE BSP中source文件中的宏定义

    在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的.这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编 ...

  4. WINCE 系统中的同步机制

    摘要 Windows® CE 是微软系列嵌入式平台所采用的操作系统内核.本文讨论了 WinCE 进程/线程之间的同步机制,给出了它们的典型应用场景.这些同步机制包括临界区.互斥体.信号量.事件.互锁函 ...

  5. OpenCV 相机校正过程中,calibrateCamera函数projectPoints函数的重投影误差的分析

    OpenCV 校正过程中,calibrateCamera函数的ret和重投影误差的分析 OpenCV对相机进行校正的过程中,校正返回值retval和重投影误差的计算公式表示和分析. OpenCV 校正 ...

  6. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...

    我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...

  7. C++11 :STL中的 iota ()函数

    该函数是C++11 才引入,之前版本没有此函数. iota 函数是一个计算机语言中的函数,用于产生连续的值.该函数得名自 APL 语言,其中用来产生从 1 开始的连续数值. 该函数位于头文件#incl ...

  8. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

  9. 在Vue的webpack中结合runder函数

    在Vue的webpack中结合runder函数 1.引入: <h1>下面是vue的内容:</h1><div id="app"><login ...

最新文章

  1. 在哪里学python好-为什么要学Python,Python好在哪里?
  2. 置顶 | 2021学习单/读书单(该来的总会来,过好当下,静待花开)
  3. 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
  4. 持续更新 | PMCAFF问答专场活动分享笔记大合集
  5. Action Service Dao三层的功能划分
  6. 模板 - 快速输入输出
  7. lucene 索引出错 no segments* file found in org.apache.lucene.store.MMapDirectory
  8. 你单身,其实是个科学问题……
  9. P1009 [NOIP1998 普及组] 阶乘之和-2022.02.01(python3实现)
  10. 表单html遇到的问题及处理,Web前端开发中常见问题及解决方案
  11. Vijos P1740聪明的质检员
  12. 图像处理 灰度世界算法
  13. 凯恩帝绝对坐标清零_凯恩帝 K90T i 数控车床系统使用手册分享
  14. 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
  15. 前端xlsx导入与导出
  16. 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视(mp4 格式)
  17. 单方差分析MATLAB,MATLAB单因素方差分析.PDF
  18. WSO2 XMl转JSON
  19. java 迷宫代码_老鼠走迷宫代码 JAVA
  20. pwd python 安装 模块_python模块学习之OS、PWD

热门文章

  1. 用Java和ffmpeg把音频和视频合成视频
  2. 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  3. qchart 设置线颜色_实战PyQt5: 137-QChart图表之散点图
  4. html展示pdf文件流,使用pdfjs提供的viewer.html展示pdf文件流
  5. node作为php中转带参数,Nodejs中使用命令行如何进行传参(代码)
  6. IT职业就业-学长有话说(二)
  7. Flag counter被博客园禁了的解决方法
  8. 开发者福音!面向Web场景的云开发服务正式开放!
  9. 蠢货别忘(一)common lisp funcall
  10. Ubuntu安装pycharm并且激活