阅读:2631回复:12
如何获得句柄
自己编了一个驱动编译也通过了,也能家在进去,我想编个应用程序来实验一下思路是用createfile()获得设备句柄,然后IOCRL来操作,
可是 createfile()返回的句柄是个FFFFFFFF 问题出在那里?? 是我的驱动没有起作用?? |
|
沙发#
发布于:2004-09-15 15:19
驱动是用platformbuilder 做的
|
|
论坛版主
|
板凳#
发布于:2004-09-15 20:49
0xffffffff是INVALID_HANDLE_VALUE,你用getlasterror看看错误码吧,看看设备名给对没,用OPEN_EXISTING,最后一个参数null
|
|
地板#
发布于:2004-09-16 08:52
用getlasterror得到的错误代码如下:
55 The specified network resource or device is no longer available. ERROR_DEV_NOT_EXIST 你说的那个OPEN_EXISTING,最后一个参数null也没有问题 加载调试的时候,我看到地址也映射过去了,也对所要求的寄存器进行了赋值,通过观察远程注册表信息,我做的那个驱动也在里面,怎么会说是不可用的呢,晕了 |
|
地下室#
发布于:2004-09-16 09:02
用getlasterror得到的错误代码如下: ?? |
|
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 |
|
6楼#
发布于:2004-09-16 09:31
也就是 说 不存在 那个设备,感觉 应该 是驱动 的问题吧。。。既然 CreateFile() 的 设置 没有错误 的 话!!!你在 看一下你映射的地址 和 你的计算机里面 发现 这个 设备的 地址 是不是 一样的。。。
|
|
|
论坛版主
|
7楼#
发布于:2004-09-16 13:16
驱动跑起来了问题就不大了:)我觉得是注册表和设备名配合不对,兄弟再看看帮助吧:)
对了,还有注意一下驱动里面某些东西是不是要设置一下,我说这个不是ce驱动里面的问题,原来做2K驱动的时候,其他都对,就在driverentry里面有一个什么参数的一位没设,设备就是打不开,兄弟再查查 |
|
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得到的错误信息是说我的参数有错,怎么会有错呀 |
|
论坛版主
|
9楼#
发布于:2004-09-16 20:41
OUT BUFFER大小对不?
|
|
10楼#
发布于:2004-09-17 08:34
对,BufferSize=sizeof(SYSTEMPOWERSTATUSEX2)
|
|
论坛版主
|
11楼#
发布于:2004-09-17 13:39
那就只能是句柄不对了:)
要不lpBytesReturned是空指针?这个我想不会错的吧...:) 再看看句柄的问题吧 |
|
12楼#
发布于:2004-12-29 17:56
在注册表信息中,prefix: BAT
order: 0 Wince中 prefix后的数看Index,不是看order,order是Load的顺序 |
|