amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2932回复:10

WRITE_PORT_BUFFER_ULONG 谁使用过这个函数?

楼主#
更多 发布于:2004-04-29 15:42
我在使用WRITE_PORT_ULONG函数向并口写数据时,通过示波器可以观察到数据的输出,但是在使用WRITE_PORT_BUFFER_ULONG 函数向并口写数据时,用示波器却观察不到任何输出。有谁遇到过这样的问题
大概的代码如下,请指教
应用程序中:
unsigned long BufferL[1024];//一个双字类型的数组,长度1024

int i;
for(i=0;i<=1024;i++)
BufferL=0x0000ffff;//给数组赋初值

error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_BUFFER_UNLONG,
&BufferL,4096,NULL,0 &BytesReturned ,NULL);
//将数组地址传递给驱动程序

在驱动程序的DeviceControl例程中

PULONG      LongBuffer;
PVOID     ioBuffer;
unsigned short  LongBuffer2[1];
unsigned long *pLongBuffer2;

ioBuffer    = pIrp->AssociatedIrp.SystemBuffer;
LongBuffer  = (PULONG) ioBuffer;

pLongBuffer2=(unsigned long *)&LongBuffer2[0];
*pLongBuffer2=0x37C;

if (inBufLength >= 4096)
  WRITE_PORT_BUFFER_ULONG((PULONG)pLongBuffer2,LongBuffer,1024);
  




                        

[编辑 -  4/30/04 by  amei]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-04-29 15:53
没看懂什么意思????
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-30 09:14
  意思就是
    在应用程序中定义个一个长度为1024,双字类型的数组,并给这个数组赋初值后,将这个数组的头地址通过DeviceIoControl传送给驱动程序。
    在驱动程序的DeviceControl例程的case语句
    case:IOCTL_WRITE_PORT_BUFFER_UNLONG
中执行WRITE_PORT_BUFFER_ULONG,试图将应用程序中定义的双字数组的内容通过驱动程序发送到端口。其第一个参数是指向端口的指针,第二个参数是指向 buffer的指针,第三个参数是要传输的双字的个数。
    但是,在外接示波器观察输出时,什么也没有,不知道原因出在哪

[编辑 -  4/30/04 by  amei]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-04-30 10:57
PULONG LongBuffer;
PVOID ioBuffer;
unsigned short LongBuffer2[1];
unsigned long *pLongBuffer2;

ioBuffer = pIrp->AssociatedIrp.SystemBuffer;
LongBuffer = (PULONG) ioBuffer;

pLongBuffer2=(unsigned long *)&LongBuffer2[0];
*pLongBuffer2=0x37C;

if (inBufLength >= 4096)
WRITE_PORT_BUFFER_ULONG((PULONG)*pLongBuffer2,LongBuffer,1024);
 WRITE_PORT_BUFFER_ULONG proc near
.text:80019FF4                      
.text:80019FF4                      Port= dword ptr  4
.text:80019FF4                      Buffer= dword ptr  8
.text:80019FF4                      Count= dword ptr  0Ch
.text:80019FF4                      
.text:80019FF4 8B C6                mov     eax, esi
.text:80019FF6 8B 54 24 04          mov     edx, [esp+Port]
.text:80019FFA 8B 74 24 08          mov     esi, [esp+Buffer]
.text:80019FFE 8B 4C 24 0C          mov     ecx, [esp+Count]
.text:8001A002 F3 6F                rep outsd
.text:8001A004 8B F0                mov     esi, eax
.text:8001A006 C2 0C 00             retn    0Ch
.text:8001A006                      WRITE_PORT_BUFFER_ULONG endp

花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-07 22:13
请问那段汇编代码是调用WRITE_PORT_BUFFER_ULONG((PULONG)*pLongBuffer2,LongBuffer,1024)的实际过程吗?是怎么得到的
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-05-08 10:02
请问那段汇编代码是调用WRITE_PORT_BUFFER_ULONG((PULONG)*pLongBuffer2,LongBuffer,1024)的实际过程吗?是怎么得到的

什么意思????
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-08 11:17
意思是这段代码:
WRITE_PORT_BUFFER_ULONG proc near
.text:80019FF4
.text:80019FF4 Port= dword ptr 4
.text:80019FF4 Buffer= dword ptr 8
.text:80019FF4 Count= dword ptr 0Ch
.text:80019FF4
.text:80019FF4 8B C6 mov eax, esi
.text:80019FF6 8B 54 24 04 mov edx, [esp+Port]
.text:80019FFA 8B 74 24 08 mov esi, [esp+Buffer]
.text:80019FFE 8B 4C 24 0C mov ecx, [esp+Count]
.text:8001A002 F3 6F rep outsd
.text:8001A004 8B F0 mov esi, eax
.text:8001A006 C2 0C 00 retn 0Ch
.text:8001A006 WRITE_PORT_BUFFER_ULONG endp

是怎么来得:是你写的,还是你通过什么软件得到的
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2004-05-08 12:13
IDAPRO反编译得来的.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-08 15:29
喔,原来是这样呀!
我对32位的汇编语言不太了解,这段反编译得来的代码是不是这样理解:
在ESP中,从ESP+PORT即ESP+4地址开始依次存放的值是端口地址0x37c、0x37d、0x37e、0x37f;在ESP+BUFFER即ESP+8地址开始存放由应用程序传递来的缓冲区地址,ESP+COUNT地址中存放的值是1024。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2004-05-08 15:57
从ESP+PORT即ESP+4地址开始依次存放的值是端口地址0x37c、0x37d、0x37e、0x37f
晕.............
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-08 20:28
那就是放着0x37c,是一个双字
游客

返回顶部