专栏首页编程入门之C语言wince中测试驱动应用程序的实现

wince中测试驱动应用程序的实现

  这里建的工程是MFC的smart device,选择ARMV4I的指令集,不同的设备可能会有轻微的不同,不过大体实现是一样滴。还有,这里选的应用类型是dialog base。

  1.应用监测内核动向

  内核通过postmessage广播给所有的窗口,比如发送的数据是“hello ce”,即PostMessage(HWND_BROADCAST, RegisterWindowMessage(L"hello ce"), 0, 0);然后就是应用部分监测消息,先在对话框类里面声明一个消息处理PreTranslateMessage,手动添加或者在vs的资源视图的dialog里面添加消息也是可以的,我这里用手动添加,另一种好像找不着这个消息。然后在PreTranslateMessage这个函数里面添加一个判断if(pMsg->message == ::RegisterWindowMessage(L"hello ce"))

{

应用处理内容

}

  2.应用和内核流式驱动的双向通信

  首先,假设流式驱动如果注册的名字为LED,index是0。(数值零不是字母O)

  然后,应用和驱动中共同分别都要定义一个宏,名为IOCTL_WRITE_LED,即#define IOCTL_WRITE_LED 10086 。

  接着就是几个关键的函数,CreateFile和DeviceIoControl。先用HANDLE hread = CreateFile(L"LED0:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL, NULL);创建一个句柄hread定义 BYTE bTemp[128]用来存放数据,然后DeviceIoControl(hread, IOCTL_WRITE_LED, NULL, 0, bTemp, 128, 0, (LPOVERLAPPED) NULL);就能够把数据写入到bTemp里面,这样就能读取驱动中的数据。同样,要写数据进驱动,DeviceIoControl(hread, IOCTL_READ_LED, (char *)(LPCTSTR)c_str, sizeof(c_str), NULL, 0, 0, (LPOVERLAPPED) NULL);IOCTL_READ_LED这个宏自行定义,这里面的格式转换花费了我一点时间,现在就能完成应用层主动读取和写数据进内核了。

  3.扩展

  如果应用要读写内核的所有数据,可以通过读写一个流式驱动,然后这个流式驱动用共享内存或者全局变量的方式传值。可能还有更好的办法,目前我就只能用这种比较挫的方式。

  界面比较简单,加几个按钮,控制led开关。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux中OTG识别到一个U盘后产生一个sg节点的全过程

      需要关注注册驱动的有hub, usb, usb-storage。hub中用来做检测usb口是否有OTG的东东接入,usb是所有usb接入设备的老大哥,usb...

    啊源股
  • Android native进程间通信实例-socket本地通信篇之——基本通信功能

      网上看了很多篇有关socket本地通信的示例,很多都是调通服务端和客户端通信功能后就没有下文了,不太实用,真正开发中遇到的问题以及程序稳定性部分没有涉及,代...

    啊源股
  • Android native进程间通信实例-binder结合共享内存

      在android源码的驱动目录下,一般会有共享内存的相关实现源码,目录是:kernel\drivers\staging\android\ashmem.c。但...

    啊源股
  • 常见的Linux系统监控命令

    显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

    仙人技术
  • 自然语言处理中的Attention Model:是什么及为什么

    要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model(后文有时会简称AM模型)这个词。AM模型应该说是过去一年来NLP...

    新智元
  • python绘制六角星外廓_Python之OpenGL笔记(32):正交投影画六角星

    从日常生活的经验中可以很容易地了解到,随着摄像机位置、姿态的不同,就算是对同一个场景进行拍摄,得到的画面也是迥然不同的。

    用户7886150
  • DRF使用超链接API实现真正RESTful

    很多API并不是真正的实现了RESTful,而应该叫做RPC (Remote Procedure Call 远程过程调用),Roy Fielding曾经提到了它...

    dongfanger
  • Python3:用QQ邮箱发送邮件

        QQ邮箱是SSL认证的邮箱系统,要用QQ邮箱发送邮件,需要开启POP3/ SMTP服务,并获取授权码。

    py3study
  • iOS开发 UIlabel 文字两边对齐

    czjwarrior
  • 基于Python的自媒体小助手—登录页面的实现代码

    好多文章写Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 我看了N遍也没够好多东西都没有就基本的介绍。。。还不够。我搞这个也是为了项目服...

    砸漏

扫码关注云+社区

领取腾讯云代金券