kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1060回复:3

大虾看看驱动间传递IRP的问题

楼主#
更多 发布于:2004-04-09 11:28
以下为代码拷贝,我用IoGetDeviceObjectPointer得到了一个scsi设备,此时想通过该设备句柄向scsi设备发送irp,但在IoCallDriver时老出错:
NTSTATUS    status = 0;
UNICODE_STRING uniNtNameString;
PDEVICE_OBJECT pTargetDeviceObject = NULL;
PFILE_OBJECT   pTargetFileObject = NULL;

RtlInitUnicodeString( &uniNtNameString, DeviceName);//SCSI_DEVICE_NAME );

status = IoGetDeviceObjectPointer(
IN &uniNtNameString,
IN FILE_ALL_ACCESS,
OUT &pTargetFileObject,  
OUT &pTargetDeviceObject
);
if( !NT_SUCCESS(status) )
{
   pTargetFileObject = NULL;
   pTargetDeviceObject = NULL;
   return( status );
}
DbgPrint("Scsi设备句柄:%x,文件句柄:%x\n",pTargetDeviceObject,pTargetFileObject);
if(!pTargetDeviceObject)
   return status ;
 
PIRP pIrp=NULL;
KEVENT keIoctlComplete;
IO_STATUS_BLOCK ioSb;
SRB_SET_DEVOBJ iobuf;
UINT ubuffer;
PIO_STACK_LOCATION pIrpStack;

KeInitializeEvent(&keIoctlComplete,NotificationEvent,FALSE);

iobuf.SrbCtrl.HeaderLength = sizeof(SRB_IO_CONTROL);
FILLSIGNATURE(iobuf.SrbCtrl.Signature);
iobuf.SrbCtrl.Timeout = DEFAULT_TIMEOUT;
iobuf.SrbCtrl.ControlCode = 1;
iobuf.SrbCtrl.ReturnCode = 0xFFFFFFFF;
iobuf.SrbCtrl.Length = sizeof(gDeviceObject);
iobuf.pDeviceObj=gDeviceObject;

pIrp=IoBuildDeviceIoControlRequest(
IOCTL_SCSI_MINIPORT,
pTargetDevObj,
&iobuf,
sizeof(iobuf),
&ubuffer,
sizeof(ubuffer),
FALSE,
&keIoctlComplete,
&ioSb);
IoCallDriver(pTargetDevObj,pIrp);  (出错处,缺页错误)

KeWaitForSingleObject(&keIoctlComplete,Executive,KernelMode,FALSE,NULL);

DbgPrint("Send Success\n");




在scsi设备端,我使用了如下处理代码
DbgPrint("Get IoCtl_test event\n");
PIRP Pirp=(PIRP)Srb->OriginalRequest;
Pirp->IoStatus.Status=STATUS_SUCCESS;
Pirp->IoStatus.Information=0;


请大虾救命阿,搞了好久了
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-09 17:00
每人看?自己顶一下
dregs
驱动小牛
驱动小牛
  • 注册日期2004-02-19
  • 最后登录2006-05-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-14 17:01
问题解决了没有啊?
我来帮你顶
会不会与pTargetFileObject有关系啊?
还是我
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-14 17:28
估计是没招了,我找了另外一个方法,在NDIS的设备对象中找了个字段来共享两个驱动的数据,哈哈,鬼吧
游客

返回顶部