社区
嵌入开发(WinCE)
帖子详情
如何用CreateFile打开设备
孙泳勇
2010-08-12 10:05:58
我写了个helloworld驱动,我应该怎么打开这个设备呢?
是不是像windows驱动一样要创建个设备的,可是我看其它驱动的源代码也没有创建设备的过程啊?
反正就是怎么用CreateFile和DeviceIoctrl与我的驱动通信?
...全文
966
14
打赏
收藏
如何用CreateFile打开设备
我写了个helloworld驱动,我应该怎么打开这个设备呢? 是不是像windows驱动一样要创建个设备的,可是我看其它驱动的源代码也没有创建设备的过程啊? 反正就是怎么用CreateFile和DeviceIoctrl与我的驱动通信?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
demoxie1
2011-04-15
打赏
举报
回复
搞定了,谢谢。我忘了在platform.bib中忘了调用io.dll.
demoxie1
2011-04-15
打赏
举报
回复
我改成GIO了,但是结果还是不能createfile,仍为-1.
eagle1597
2011-04-15
打赏
举报
回复
[Quote=引用 11 楼 demoxie1 的回复:]
我用createfile打开我自己的流驱动MYIO,返回值为-1。
我打开COM2的时候,是成功的。
我在注册表里面信息加进内核了啊:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MYIO]
"Prefix"="MYIO"
"Index"=dword:1
"Dll"="myio.dll"
"Order"=dword:12
我的内核里面也有……
[/Quote]
Prefix 用三个字母,别多也别少.
demoxie1
2011-04-15
打赏
举报
回复
我用createfile打开我自己的流驱动MYIO,返回值为-1。
我打开COM2的时候,是成功的。
我在注册表里面信息加进内核了啊:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MYIO]
"Prefix"="MYIO"
"Index"=dword:1
"Dll"="myio.dll"
"Order"=dword:12
我的内核里面也有MYIO.DLL文件,请问会是什么原因啊?
chinesedragon2010
2010-08-12
打赏
举报
回复
楼主,你是“写了个helloworld驱动”还是写个应用程序来显示“hello world”?
InsaneCode
2010-08-12
打赏
举报
回复
例如:
调用I2C驱动:
g_I2C = CreateFile(L"I2C1:", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH, NULL);//相当于调用驱动中的OPEN函数。
然后可以直接调用IOCTL函数。根据CODE判断具体功能。
孙泳勇
2010-08-12
打赏
举报
回复
看来此贴没戏了,水哥不知道,牛哥不屑道!哎。。。
孙泳勇
2010-08-12
打赏
举报
回复
CreateFile的参数怎么写?与注册表中的数据关系是什么?
winceARM
2010-08-12
打赏
举报
回复
写必要的REG和DEF,按照流驱动的基本格式xxx_INIT,xxx_OPEN等等,然后调用CreateFile就可以打开设备了
孙泳勇
2010-08-12
打赏
举报
回复
wince驱动有创建设备吗?没有吧?
jackyjkchen
2010-08-12
打赏
举报
回复
设备名都是字符串,和打开文件没有区别的……
还是看看windows核心编程,讲得比较细
chinesedragon2010
2010-08-12
打赏
举报
回复
[Quote=引用 6 楼 kacyquan 的回复:]
例如:
调用I2C驱动:
g_I2C = CreateFile(L"I2C1:", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH, NULL);//相当于调用驱动中的OPEN函数。
然后可以直接调用IOCTL函数。根据CODE判断具体功能。
……
[/Quote]
正解
harkspan
2010-08-12
打赏
举报
回复
CreateFile (TEXT ("HW1:"), GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);
孙泳勇
2010-08-12
打赏
举报
回复
驱动已被成功加载!!!
注册表:
dll helloworld.dll
prefix HW
index 1
order 0
打开设备:
CreateFile参数应该怎么写?
GUID就能获得
设备
路径
有了
设备
名(路径),就可以直接调用
Create
File
打开
设备
,进行它所支持的I/O操作了。如果事先并不能确切知道
设备
名,如何去访问
设备
呢?
获得USB的信息vc++
现在USB
设备
却很多,因此对USB
设备
的查找与读写就必不可少了。但是能找到关于USB读写的资料很少。这里使用VC++示范了一些获得USB的信息的方法。 一、枚举USB
设备
通过枚举USB控制器->枚举此控制器上的USB HUB->枚举HUB的各个端口->获得
设备
信息。 枚举控制器: wsprintf(HCName, "\\\\.\\HCD%d", HCNum); hHCDev =
Create
File
(HCName, GENERIC_WRITE,
FILE
_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 计算机上的USB主控制器以HCD1,HCD2等命名。通过控制器名称,使用C
Create
File
打开
它。使用DeviceIoControl即可得到其驱动程序名,以及与它连接的HUB的名称。用C
Create
File
打开
HUB,获得连接信息。再枚举HUB的各个端口即可获得连接的
设备
信息。 二、枚举HID
设备
HID
设备
是微软定义的标准人机接口规范。比如USB鼠标,USB游戏手柄等。不用查找具体
设备
的GUID,使用API HidD_GetHidGuid(&guidHID)即可得到GUID。有了GUID通过API SetupDiEnumDeviceInterfaces可获得是否有
设备
连接。如果此类
设备
连接通过SetupDiGetDeviceInterfaceDetail获得它的
设备
路径信息。使用C
Create
File
打开
它,通过HidD_GetAttributes获得其基本属性信息。使用DeviceIoControl可以获得更详细的属性。在本代码中如果计算机上插有USB游戏手柄,可获得其信息。但不知道为什么xp下却不能获得USB鼠标的信息。 三 枚举U盘 先用GetDriveType API获得
设备
的类型,若类型为REMOVABLE(当然有些大容量U盘可能报告为FIXED,那就需要其他方法来确定了),即可能是U盘。用C
Create
File
打开
之后,再用IOCTL_STORAGE_QUERY_PROPERTY为参数的DeviceIoControl来获得其属性。 四、结束语 示例工程在winxp+xpDDK+VC6下编译通过。USB
设备
种类比较多,也比较特殊,不同厂商的硬件不同,控制软件也不尽相同(我想主要是ICTL码不同,也不容易查到)。使得访问USB口的
设备
不象串口并口那么方便。这个例程只是展示了访问的基本方法。其中还有些问题还没有解决,发出来希望大家解决之后能通知我或者发表出来。 参考了USBPort,USBview等代码,一并致谢。
Visual Studio 2013 串口类
最近调试串口获取机芯日志,要做个上位机工具能随时查看机芯的本地日志。起初想参考合泰源码做一份,但是考虑到通用性。如果未来要做其他项目,又得改串口类的代码,很麻烦。所以想整一份自己的专属串口类,方便后续移植使用。 网上参考了很多资料,基本上都是大同小异。打算自己重构一份,使用双线程,实现读写分离,环形数组收发数据。应用层可以向指定的环形数组,随时随地写入不定长度的数据。或者随时随地从指定的环形数组,读取不定长度的数据。《Hankin》 参考资料如下: 《MFC图文并茂详解.doc》 《SCOM_MFC2.rar》 《serial_src.zip》 《SerialCom_YiHai_TEST-master.zip》 《SerialComSoftware_自写详细注释.rar》 《VC_MFC串口通信编程详解.pdf》 《VC++串口通信20个经典源码合集.rar》 《串口通信处女作.zip》 《用MFC实现串口编程.doc》
VC实现弹出CD
用
Create
File
()
打开
设备
,DeviceIOControl()弹出cd
快速掌握Mysql数据库对文件操作的封装
Mysql对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open、close、seek等,在Win32下的文件和目录操作函数使用了Creat
File
、CloseHandl、Set
File
Pointer等。其实使用API和标准库函数都可以生成文本文件和二进制文件,在这点上没有区别。同read()对应的是Read
File
,同write()对应的是Write
File
,同seek()对应的是Set
File
Pointer,同close对应的是CloseHandle。这两套函数都可以使用。但是Win 32系统把文件的概念进行了扩展。无论是文件、通信
设备
、命名管道都是用API函数
Create
File
来
打开
或创建的。
嵌入开发(WinCE)
19,497
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章