DearKeen
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2005-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2793回复:5

有谁遇到过KERNEL_STACK_INPAGE_ERROR,0X77?莫名其妙的错误。

楼主#
更多 发布于:2003-04-30 15:25
一段标准的程序(我认为很标准),怎么总是出错?
大家帮忙看一下啊。
DriverEntry( )
{
    ...
    DriverObject->MajorFunction[IRP_MJ_READ] = Read ;
    ...
}
Read( )
{
    KEVENT Event ;
    IoCopyCurrentIrpStackLocationToNext( Irp ) ;
    IoSetCompletionRoutine( Irp , ReadCompletion ,
        &Event , TRUE , TRUE , TRUE ) ;
    KeInitializeEvent( &Event , NotificationEvent , FALSE );
    IoCallDriver( pDeviceObject , Irp ) ;
    KeWaitForSingleObject( &Event , Executive , KernelMode ,
        FALSE , NULL ) ;
    IoCompleteRequest( Irp , IO_NO_INCREMENT ) ;
}
ReadCompletion( )
{
    PKEVENT Event = ( PKEVENT )Context ;
    if( Irp->PendingReturned )
    {
        IoMarkIrpPending( Irp ) ;
    }
    KeSetEvent( Event , 0 , FALSE ) ;
    return STATUS_MORE_PROCESSING_REQUIRED ;
}
总是在ReadCompletion以后就出错,P1=2,P2=0,P3=1,P4=XXXX
,这是怎么回事呀?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-05 12:25
你是写virtual disk?


是的话,你要自已处理分割。
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-05 12:11

我没有写过ifs,下面只是猜测;)

你的错误可能是这样子产生的:
    你在kernel stack中创建了一个event对象,
然后,传递一个IRP到底陈驱动,
下面的驱动费了很长时间才完成这个IRP,在完成这个IRP的过程之
中,你的系统已经耗费了太多的资源,不得不把这那个正在等待的
线程的内核stack置换到硬盘上。
这时候,不幸的事情发生了,
IRP被完成了。
你的完成历程被调用啦。一访问那个event,系统就over了。
所以说,准确地讲,那个错误是在
 KeSetEvent( Event , 0 , FALSE ) ;
的时候发生的。
而且,多半你那个  P4=XXXX正好就是event地地址(也可能是
kenel stack 或者 KTHREAD之类的)。

还有,如果你去掉了
if( Irp->PendingReturned )
{
   IoMarkIrpPending( Irp ) ;
}

估计会出另外一个错误;)









DearKeen
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2005-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-05 10:23
还有,只要我不用IoSkipCurrentIrpStackLocation,那么在Completion Routine里面处理IoMarkIrpPending应该是没有问题的吧?
DearKeen
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2005-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-05 10:19
没有用,具体情况是这样的,在对小文件操作的时候没有问题,
但是大文件copy时会出错,在返回系统以后,这到底是怎么回事啊?
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-02 17:57

如果是ifs filter,去掉这个试试:

if( Irp->PendingReturned )
{
IoMarkIrpPending( Irp ) ;
}
游客

返回顶部