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

斑竹请进: 如何用WIN32接口与过滤层驱动(设备)通信

楼主#
更多 发布于:2004-10-01 17:07
我写了一个MOUSECLASS设备与SERIAL串口设备之间的一个过滤层驱动,先需要一USER MODE程序与过滤层驱动通信,现在采用IOCTL方式,但成功CREATEFILE后,DeviceIoControl总是返回1,在过滤驱动的IRP_MJ_DEVICE_CONTROL处理中,没有发现被调用到.我可以确认IOCTL的定义方面都没有问题,是否过滤驱动不支持DeviceIoControl调用方式,还是与我创建的设备类型有关系.

status = IoCreateDevice(Driver,
sizeof(DEVICE_EXTENSION),
NULL, // no name for this Filter DO
FILE_DEVICE_SERIAL_MOUSE_PORT,
0,
FALSE,
&device);


#define IOCTL_TOUCH_CALI_START CTL_CODE(
FILE_DEVICE_SERIAL_MOUSE_PORT,
0x801,
METHOD_BUFFERED,
FILE_ANY_ACCESS)
piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-01 22:28
首先强调一点:过滤驱动一定可以支持DeviceIoControl调用方式的。在你创建设备的时候,给设备一个名字,再创建一个SymbolicLink名字就可以了。如果你实在不愿意这样,可以看看SetupDi API的文档。
zbing
驱动牛犊
驱动牛犊
  • 注册日期2002-12-07
  • 最后登录2007-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-02 12:16
真是苦啊!
我通过IoCreateSymbolicLink建立了一个"\\DosDevices\\<symbolicName>"WIN32可见的设备名,成功打开设备后,我去WRITEFILE时错误,提示功能错误.DEVICEIOCTL也错误,同样提示功能错误.另外,在CREATEFILE时,加上GENERIC_READ就打不开.
同时调试发现WRITEFILE,DEVICEIOCTL根本就没有进入DRIVER里.
为什么会这样啊!各位,帮帮忙.


status = IoCreateDevice(Driver,
sizeof(DEVICE_EXTENSION),
&DeviceName,//NULL, // no name for this Filter DO
FILE_DEVICE_SERIAL_MOUSE_PORT,
FILE_DEVICE_SECURE_OPEN ,//0,
FALSE,
&device);

if (!NT_SUCCESS(status)) {
DebugPrintMsg("SerialMouseAddDevice: IoCreateDevice fail");
return status;
}

deviceExtension = (PDEVICE_EXTENSION) device->DeviceExtension;

Print(deviceExtension, DBG_PNP_TRACE, ("enter Add Device\n"));

//
// Initialize the fields.
//
RtlZeroMemory(deviceExtension, sizeof(DEVICE_EXTENSION));

DebugPrint("Symbolic:  %T",&SymLinkName );
DebugPrint("DeviceName:  %T",&DeviceName );

  status = IoCreateSymbolicLink (&SymLinkName,
 &DeviceName);

  if (!NT_SUCCESS(status)) {
IoDeleteDevice(device);
return status;
  }


//-------------------------zb add--------------------------------------------
// Register and enable our device interface
status = IoRegisterDeviceInterface(PDO, &Touch_GUID, NULL, &deviceExtension->ifSymLinkName);
if( !NT_SUCCESS(status))
{
IoDeleteDevice(device);
return status;
}
IoSetDeviceInterfaceState(&deviceExtension->ifSymLinkName, TRUE);

DebugPrint("Symbolic Link Name is %T",&deviceExtension->ifSymLinkName );
游客

返回顶部