shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
阅读:1009回复:8

紧急求救,现答现测,答对给分

楼主#
更多 发布于:2002-06-28 10:55
下面是我的一段代码:

NTSTATUS WdmPciRead( IN PDEVICE_OBJECT fdo,
IN PIRP Irp)
{
PWDMPCI_DEVICE_EXTENSION dx = (PWDMPCI_DEVICE_EXTENSION)fdo->DeviceExtension;
if( !dx->GotPortOrMemory)
return CompleteIrp( Irp, STATUS_INSUFFICIENT_RESOURCES);
if( dx->IODisabled)
return CompleteIrp( Irp, STATUS_DEVICE_NOT_CONNECTED);
if (!LockDevice(dx))
return CompleteIrp( Irp, STATUS_DELETE_PENDING);

PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
ULONG BytesTxd = 0;

// Get call parameters
ULONG ReadLen = IrpStack->Parameters.Read.Length;
PULONG Buffer = (PULONG)Irp->AssociatedIrp.SystemBuffer;
NTSTATUS status=STATUS_SUCCESS;
ULONG QQ=0;
DebugPrint(\"读 %d 字节 \",(int)ReadLen);
READ_REGISTER_BUFFER_ULONG(PULONG(dx->PortBase+0X00),&QQ,1);
DebugPrint( \"读出的双字 %x\",QQ);
RtlCopyMemory(Buffer,&QQ,4);
// Complete IRP
CompleteIrp(Irp,status,BytesTxd);
UnlockDevice(dx);
return status;
}

这段代码执行后QQ中会有值,我如何将QQ的值传递给应用程序?
RtlCopyMemory(Buffer,&QQ,4);
我的外部调用函数如下:
ULONG WS=0;
case WDMPCI_BLOCK_READ_REGISTER_BIT:
{
if( !ReadFile( hWdmPci, &WS, 4, &BytesReturned, NULL))
return WDMPCI_BLOCK_READ_REGISTER_BIT_FAIL;
else if( BytesReturned==sizeof(InputBuffer))
return WDMPCI_BLOCK_READ_REGISTER_BIT_OK;
else
return WDMPCI_BLOCK_READ_REGISTER_BIT_BYTESWRONG;
}
经过我的测试在WS中并没有传出来的值,我想知道原因 :D
喂,小孩,你的小JJ露出来了!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-28 11:34
我碰到的事情怎这么奇怪? :D
喂,小孩,你的小JJ露出来了!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-28 12:15
BytesTxd=4;
yufei_lgq
驱动牛犊
驱动牛犊
  • 注册日期2001-12-22
  • 最后登录2004-10-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-28 13:39
关注
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-28 13:46
用softice跟一下

看QQ中有没有值
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-28 14:35
你如果是通过READFILE和WRITEFILE的方式和驱动程序通信的话,那么你传下来的缓冲区指针应该是在IRP->MDL里面的,并且你还需要把地址进行转化一下
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-28 14:40
你如果是通过READFILE和WRITEFILE的方式和驱动程序通信的话,那么你传下来的缓冲区指针应该是在IRP->MDL里面的,并且你还需要把地址进行转化一下


那不一定吧,要看是directio还是bufferio了
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-28 14:41
呵呵!你试试看
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-28 14:46
怎么试
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
游客

返回顶部