victory788
驱动牛犊
驱动牛犊
  • 注册日期2009-07-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1646回复:3

内核线程创建

楼主#
更多 发布于:2010-11-11 22:35
我想在IRP_MJ_READ派遣例程中,发送IRP给文件系统层前创建一个IRP,但是这个IRP的创建必须在PASSIVE_LEVEL,可是读请求有时运行在APC_LEVEL,有时在PASSIVE_LEVEL。对于在APC级别,如何创建我自己想要的IRP,我想通过降低irql,可是内核没有相应的函数;创建线程,使其运行在PASSIVE,再在线程中创建IRP,但是PsCreateSystemThread的调用必须在PASSIVE级别。第三种方式,就是在PASSIVE级别的例程中创建线程,通过事件使该线程和读派遣例程进行通信,但是这种方式比较麻烦。所以请教有什么更好的方法可以达到我的目的?
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
沙发#
发布于:2010-11-12 11:24
用户被禁言,该主题自动屏蔽!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2010-11-13 07:52
或者可以使用workitem
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
lijianhua12
驱动牛犊
驱动牛犊
  • 注册日期2009-12-04
  • 最后登录2013-03-29
  • 粉丝12
  • 关注9
  • 积分33分
  • 威望301点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分11分
地板#
发布于:2010-11-16 08:51
读写例程里创建irp 试一试

ASSERT((MajorFunction == IRP_MJ_READ) || (MajorFunction == IRP_MJ_WRITE));
    
    KeInitializeEvent(&Event, NotificationEvent, FALSE);

    Irp = IoBuildSynchronousFsdRequest(
        MajorFunction,
        DeviceObject,
        Buffer,
        Length,
        ByteOffset,
        &Event,
        IoStatus
        );
    if (!Irp)
        return STATUS_INSUFFICIENT_RESOURCES;
游客

返回顶部