raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2631回复:12

如何获得句柄

楼主#
更多 发布于:2004-09-15 15:17
自己编了一个驱动编译也通过了,也能家在进去,我想编个应用程序来实验一下思路是用createfile()获得设备句柄,然后IOCRL来操作,
可是 createfile()返回的句柄是个FFFFFFFF 问题出在那里??
是我的驱动没有起作用??
raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-15 15:19
驱动是用platformbuilder 做的
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-15 20:49
0xffffffff是INVALID_HANDLE_VALUE,你用getlasterror看看错误码吧,看看设备名给对没,用OPEN_EXISTING,最后一个参数null
根据地的兄弟们,团结就是力量
raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-16 08:52
用getlasterror得到的错误代码如下:
55 The specified network resource or device is no longer available.  ERROR_DEV_NOT_EXIST
你说的那个OPEN_EXISTING,最后一个参数null也没有问题
加载调试的时候,我看到地址也映射过去了,也对所要求的寄存器进行了赋值,通过观察远程注册表信息,我做的那个驱动也在里面,怎么会说是不可用的呢,晕了
linwn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2015-01-27
  • 粉丝0
  • 关注0
  • 积分97分
  • 威望30点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-16 09:02
用getlasterror得到的错误代码如下:
55 The specified network resource or device is no longer available.  ERROR_DEV_NOT_EXIST
你说的那个OPEN_EXISTING,最后一个参数null也没有问题
加载调试的时候,我看到地址也映射过去了,也对所要求的寄存器进行了赋值,通过观察远程注册表信息,我做的那个驱动也在里面,怎么会说是不可用的呢,晕了


??
raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-16 09:30
我是这样样获得句柄的
hbatt= CreateFile (TEXT("BAT0:"), // Pointer to the name                       GENERIC_READ | GENERIC_WRITE,
                                    // Access (read-write) mode
                      0,            // Share mode
                      NULL,         // Pointer to the security attribute
                      OPEN_EXISTING,// How to open
                      0,            // Port attributes
                      NULL);
在注册表信息中,prefix: BAT
                order: 0
这样得到的句柄就是FFFFFFFF
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-16 09:31
也就是 说 不存在 那个设备,感觉 应该 是驱动 的问题吧。。。既然 CreateFile() 的 设置 没有错误 的 话!!!你在 看一下你映射的地址 和 你的计算机里面 发现 这个 设备的 地址 是不是 一样的。。。
我的Vc代码仓库:[url]http://sh.b211.net[/url]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-16 13:16
驱动跑起来了问题就不大了:)我觉得是注册表和设备名配合不对,兄弟再看看帮助吧:)

对了,还有注意一下驱动里面某些东西是不是要设置一下,我说这个不是ce驱动里面的问题,原来做2K驱动的时候,其他都对,就在driverentry里面有一个什么参数的一位没设,设备就是打不开,兄弟再查查
根据地的兄弟们,团结就是力量
raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-16 16:32
有进展,尽管是阴差阳错,
原来注册表里prefix BAT order 0 我看到调试时有的地方竟然出现BAT1,我把应用程序里的createfile() 中的BAT0改为BAT1,结果竟能返回一个句柄,(尽管我不知道这个句柄到底对不对)。可是我把注册表里的order 0 改为  1 仍然能够返回句柄, 不知所以然。

假设现在得到的是正确的句柄,下一步是用DeviceIoControl(
hbatt,IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX2,
pInBuf, sizeof(BOOL),            // Input    
lpBattStatus, BufferSize, // Output  
lpBytesReturned, NULL) ;
这是个比较典型的语句吧,却不行,编译通过,但是用getlasterror得到的错误信息是说我的参数有错,怎么会有错呀
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-16 20:41
OUT BUFFER大小对不?
根据地的兄弟们,团结就是力量
raiky_wu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-17 08:34
对,BufferSize=sizeof(SYSTEMPOWERSTATUSEX2)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-09-17 13:39
那就只能是句柄不对了:)

要不lpBytesReturned是空指针?这个我想不会错的吧...:)

再看看句柄的问题吧
根据地的兄弟们,团结就是力量
zhangqb
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2011-01-26
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-29 17:56
在注册表信息中,prefix: BAT
order: 0

Wince中
prefix后的数看Index,不是看order,order是Load的顺序
游客

返回顶部