wdynasty
驱动大牛
驱动大牛
  • 注册日期2003-10-10
  • 最后登录2011-04-07
  • 粉丝0
  • 关注0
  • 积分627分
  • 威望199点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:944回复:0

一个问题,困扰多时

楼主#
更多 发布于:2005-06-12 17:07
我定义了一个结构
typedef struct _WRITE_CMD
{
unsigned long cmd_id;
unsigned long start_lba;
unsigned long write_len;
unsigned char sector[1];

} WRITE_CMD, *PWRITE_CMD;

通过如下方式分配空间
unsigned char sector[1]这个变量的空间不定。

ULONG dBufferSize;
dBufferSize = sizeof(unsigned long) * 2+ left+1;

write_cmd = (PWRITE_CMD)ExAllocatePool (
NonPagedPool,
dBufferSize);

write_cmd->cmd_id = 0x2a

write_cmd->start_lba = htonl(StartLBA);
write_cmd->write_len = htonl(left);

RtlCopyMemory((void*)write_cmd->sector, (UCHAR *)(pSrb->DataBuffer), left);

len = sizeof(dBufferSize);
dStatus = TdiSendDatagram ( // send datagram
pTdiTransportObject, // to transport
MY_PORT, // port
dTdiRemoteAddress, // address
&write_cmd, // data
len ); // size
if ( !NT_SUCCESS ( dStatus ) )
DbgPrint ( \"ERROR: writing sending %X\\n\", dStatus );
else
DbgPrint ( \"writing send success\\n\" );
发到Server端以后
通过
iRtn = recvfrom( s, (char *)buf, sizeof(buf), 0, (struct sockaddr *)&from, &len);接收数据
后,发现buf[0]不是0x2a,同时通过
WRITE_CMD *p_write_cmd = (WRITE_CMD *)buf;
  int len = ntohl(p_write_cmd->write_len);
这样的得到的len 不正确。
21世纪是搜索的世界,看看BAIDU的股票就知道了。
游客

返回顶部