cat5
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1745回复:8

有关DeviceIoControl

楼主#
更多 发布于:2002-07-31 08:25
我在Sys里DeviceControl()里switch(irp...){case IOCTL_LOCK_SYSTEMKEY:...}
在App里DeviceIoControl(hDevice,//设备接口
IOCTL_UNLOCK_SYSTEMKEY,
NULL,NULL,
NULL,NULL,
&ret,
NULL))

#define IOCTL_LOCK_SYSTEMKEY \\
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
用GetLastError()返回却是1,说是功能错误。

请问各位可能是什么原因啊。
cat5
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-31 15:02
请问这种键盘过滤驱动,我在DeviceIoControl里该怎么设缓冲区。
wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-31 11:17
我估计是你的驱动里面控制部分返回值不对,你先总是返回SATUS_SUCCESS试试,如果还错,那就是DeviceControl参数中输入输出缓冲需要设置。
请多多指教!
cat5
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-31 10:26
按道理我感觉没有错呀,实在是搞不懂了。请各位帮我想想原因,谢谢!!
cat5
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-31 10:25
不好意思,写错了,我说详细点。。。
#define IOCTL_LOCK_SYSTEMKEY \\
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_UNLOCK_SYSTEMKEY \\
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_NEITHER, FILE_ANY_ACCESS)

//这个函数是DriverStudio生成的用来处理控制码的。
NTSTATUS KbfilterDevice::InternalDeviceControl(KIrp I)
{
t << \"Entering KbfilterDevice::Internal Device Control, \" << I << EOL;
ULONG IoctlCode = I.IoctlCode();
PCONNECT_DATA theConnectData;

//Hook the callback routine
switch(IoctlCode)
{
case IOCTL_LOCK_SYSTEMKEY:
              //my code...
           case IOCTL_UNLOCK_SYSTEMKEY:
              //my code...
           case IOCTL_INTERNAL_KEYBOARD_CONNECT:
if(I.IoctlInputBufferSize() != sizeof(CONNECT_DATA))
return I.PnpComplete(STATUS_INVALID_PARAMETER);
theConnectData = (PCONNECT_DATA)I.IoctlType3InputBuffer();

//Save the original service and device object for the
// callback.
m_RealClassService = (PMY_SERVICE_CALLBACK)theConnectData->ClassService;
m_RealDeviceObject = theConnectData->ClassDeviceObject;

//Put in our device object and callback
theConnectData->ClassDeviceObject = m_pDeviceObject;
theConnectData->ClassService = LinkTo(KBServiceCallback);
break;
//Don\'t allow a disconnect
case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
return I.PnpComplete(STATUS_NOT_IMPLEMENTED);
}

return PassThrough(I, LinkTo(InternalDeviceCompletion), this);
}
我在应用程序里是这样的:
if(!DeviceIoControl(hDevice,//hDevice是我用CreateFile获得的设备Handle.
IOCTL_LOCK_SYSTEMKEY, NULL,NULL,
           NULL,NULL, &ret,      
NULL))
{
printf(\"%d\",GetLastError());
CloseHandle(hDevice);
return FALSE;
}
用GetLastError()返回却是1,说是功能错误。

请问各位可能是什么原因啊。

hevil_s
驱动牛犊
驱动牛犊
  • 注册日期2002-07-15
  • 最后登录2002-07-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-31 10:14
有收获
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-07-31 08:51
细心点啦。  ;)
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-31 08:46
甚是!
IOCTL_LOCK_SYSTEMKEY

IOCTL_UNLOCK_SYSTEMKEY
是属笔误还是?
另外,switch()里面的因子应该是IoControlCode.



Tom_lyd
alan2u
驱动巨牛
驱动巨牛
  • 注册日期2001-12-11
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分5926分
  • 威望43813点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-07-31 08:32
我在Sys里DeviceControl()里switch(irp...){case IOCTL_LOCK_SYSTEMKEY:...}
在App里DeviceIoControl(hDevice,//设备接口
IOCTL_UNLOCK_SYSTEMKEY,
NULL,NULL,
NULL,NULL,
&ret,
NULL))

#define IOCTL_LOCK_SYSTEMKEY \\
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
用GetLastError()返回却是1,说是功能错误。

请问各位可能是什么原因啊。



IOCTL_LOCK_SYSTEMKEY

IOCTL_UNLOCK_SYSTEMKEY


不知你在驱动里是否实现了IOCTL_LOCK_SYSTEMKEY
游客

返回顶部