fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
20楼#
发布于:2002-06-17 12:38
哦,明白,我重开一贴,你来领分吧。
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2005-08-03 15:32
老兄.
      如何在驱动程序的入口中增加该函数
       VOID CancelIrpRoutine(
                     IN PDEVICE_OBJECT DeviceObject,
                     IN PIRP Irp);
比如DriverObject->MajorFunction[IRP_MJ_WRITE]          = BulkUsb_DispatchReadWrite;之类的东西.我的驱动是用XP DDK里的BULK_USB改的,应用程序调用CancelIo()时,驱动程序没有任何反应,当然ReadFile()就一直阻塞了,线程无法终止.相信是没有在驱动程序中增加相应的CancelIo()入口吧.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2005-08-03 16:03
我查WDM.H的所有入口
//
// Define the major function codes for IRPs.
//


#define IRP_MJ_CREATE                   0x00
#define IRP_MJ_CREATE_NAMED_PIPE        0x01
#define IRP_MJ_CLOSE                    0x02
#define IRP_MJ_READ                     0x03
#define IRP_MJ_WRITE                    0x04
#define IRP_MJ_QUERY_INFORMATION        0x05
#define IRP_MJ_SET_INFORMATION          0x06
#define IRP_MJ_QUERY_EA                 0x07
#define IRP_MJ_SET_EA                   0x08
#define IRP_MJ_FLUSH_BUFFERS            0x09
#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
#define IRP_MJ_SET_VOLUME_INFORMATION   0x0b
#define IRP_MJ_DIRECTORY_CONTROL        0x0c
#define IRP_MJ_FILE_SYSTEM_CONTROL      0x0d
#define IRP_MJ_DEVICE_CONTROL           0x0e
#define IRP_MJ_INTERNAL_DEVICE_CONTROL  0x0f
#define IRP_MJ_SHUTDOWN                 0x10
#define IRP_MJ_LOCK_CONTROL             0x11
#define IRP_MJ_CLEANUP                  0x12
#define IRP_MJ_CREATE_MAILSLOT          0x13
#define IRP_MJ_QUERY_SECURITY           0x14
#define IRP_MJ_SET_SECURITY             0x15
#define IRP_MJ_POWER                    0x16
#define IRP_MJ_SYSTEM_CONTROL           0x17
#define IRP_MJ_DEVICE_CHANGE            0x18
#define IRP_MJ_QUERY_QUOTA              0x19
#define IRP_MJ_SET_QUOTA                0x1a
#define IRP_MJ_PNP                      0x1b
#define IRP_MJ_PNP_POWER                IRP_MJ_PNP      // Obsolete....
#define IRP_MJ_MAXIMUM_FUNCTION         0x1b

以及PDRIVER_EXTENSION 和 PDRIVER_OBJECT都没有发现该入口可加入.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2005-08-03 16:25
不知道何原因?按照15楼的方法就是可以正常退出,驱动程序不改变.
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2005-08-04 09:54
下面是引用tianrongcai于2005-08-03 16:25发表的:
不知道何原因?按照15楼的方法就是可以正常退出,驱动程序不改变.


可能是你的irp已经交给下层处理,下层返回pending的,你取消irp的时候,取消irp也由下层处理,
所以你的驱动程序就不用改变了阿
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2005-08-04 10:43
谢谢.
      不错,ReadFile()传给下层IoCallDriver()后.是返回STATUS_PENDING.
      另外.我想取消pending的IRP可以用DeviceIoControl(),在驱动程序中.增加相应的代码.取消所有暂停的IRP.是否可行自己打了个问寒问号?因为DeviceIoControl()是对控制端点操作的.(我自己试的是这样,不知道别人的如何?)
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2005-08-05 15:55
调用if(!ReadFile(m_hEP1Read,buf,*len,&mByte,&m_OvRead1))  status = GetLastError();的确是返回了.但是status = 998,MSDN解释是ERROR_NOACCESS 998 Invalid access to memory location. 访问的内存位置无效.使用if(!ReadFile(m_hEP1Read,buf,*len,&mByteNULL))  status = GetLastError();时,XP DDK SP1的bulkusb无论是异步还是同步,嵌入式系统都无反应,而且桌面的图标也被自动隐藏.但NT DDK的bulkusb在同步时是用反应的,并且桌面的图标也不会自动隐藏,异步时同XP.版主能不能解释为何.
上一页 下一页
游客

返回顶部