modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
阅读:897回复:3

这两段代码有什么不一样?

楼主#
更多 发布于:2004-06-06 21:21
第一个:
PDEVICE_EXTENSION pDevExt=(PDEVICE_EXTENSION)
                          pDevObj->DeviceExtension;
UCHAR userBuffer;
userBuffer=(PUCHAR)pIrp->AssociatedIrp.SystemBuffer;
*userBuffer=READ_PORT_UCHAR((PUCHAR)pDevExt->portBase);
pIrp->IoStatus.Status=STATUS_SUCCESS;
pIrp->IoStatus.Information=1;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return STATUS_SUCCESS;
第二个:
NTSTATUS status=STATUS_SUCCESS;
PDEVICE_EXTENSION pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;
PIO_STACK_LOCATION pIrpStack=IoGetCurrentIrpStackLocation(pIrp);
ULONG transferSize;
PVOID userBuffer;
transferSize=pIrpStack->Parameters.Read.Length;
userBuffer=pIrp->AssociatedIrp.SystemBuffer;
transferSize=(transferSize<8)?
        transferSize:8;
ULONG port[2]={0x01010101,0x10101010};
port[0]=(ULONG)pDevExt->portBase;
port[1]=pDevExt->portLength;
RtlCopyMemory(userBuffer,(PVOID)port,transferSize);
pIrp->IoStatus.Status=status;
pIrp->IoStatus.Information=transferSize;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return status;
我是初学者,总觉得这两个实现的功能是一样的。。。  请大侠们指点~~~~~~~~~~~~~

[编辑 -  6/6/04 by  modernhill]
mihopaul
驱动牛犊
驱动牛犊
  • 注册日期2002-10-01
  • 最后登录2009-10-14
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望13点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-07 09:46
第一个:
PDEVICE_EXTENSION pDevExt=(PDEVICE_EXTENSION)
                          pDevObj->DeviceExtension;
UCHAR userBuffer;
userBuffer=(PUCHAR)pIrp->AssociatedIrp.SystemBuffer;
*userBuffer=READ_PORT_UCHAR((PUCHAR)pDevExt->portBase);
pIrp->IoStatus.Status=STATUS_SUCCESS;
pIrp->IoStatus.Information=1;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return STATUS_SUCCESS;
第二个:
NTSTATUS status=STATUS_SUCCESS;
PDEVICE_EXTENSION pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;
PIO_STACK_LOCATION pIrpStack=IoGetCurrentIrpStackLocation(pIrp);
ULONG transferSize;
PVOID userBuffer;
transferSize=pIrpStack->Parameters.Read.Length;
userBuffer=pIrp->AssociatedIrp.SystemBuffer;
transferSize=(transferSize<8)?
        transferSize:8;
ULONG port[2]={0x01010101,0x10101010};
port[0]=(ULONG)pDevExt->portBase;
port[1]=pDevExt->portLength;
RtlCopyMemory(userBuffer,(PVOID)port,transferSize);
pIrp->IoStatus.Status=status;
pIrp->IoStatus.Information=transferSize;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return status;
我是初学者,总觉得这两个实现的功能是一样的。。。  请大侠们指点~~~~~~~~~~~~~

[编辑 -  6/6/04 by  modernhill]



第一肺 只有坐取一
wwjmaomao
驱动牛犊
驱动牛犊
  • 注册日期2003-07-07
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-07 11:02
以我的经验来看,PORT ARRAY 是为了让AP 或者FIRMWARE容易知道数据的大小
modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-08 21:09
问题是如果我仅仅需要DevExt->PortBase的时候,第二种还有必要吗?还有,第一种写法正确吗?
游客

返回顶部