阅读:891回复:0
困扰我的一个问题
我定义了一个结构
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 不正确。 |
|
|