阅读:1159回复:4
一个问题,大家帮忙
我定义了一个结构
typedef struct _WRITE_CMD { unsigned char cmd_id; unsigned long start_lba; unsigned long write_len; unsigned char sector[512]; } WRITE_CMD, *PWRITE_CMD; 但由于想把sector定义的大一点,想用ExAllocatePool分配那么结构是不是应该定义为typedef struct _WRITE_CMD { unsigned char cmd_id; unsigned long start_lba; unsigned long write_len; unsigned char sector; } WRITE_CMD, *PWRITE_CMD; 我这样分配了一下 dBufferSize = sizeof (unsigned char) + sizeof(unsigned long) * 2+ sizeof(unsigned char) *56*1024; 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); 最后这一句好像有问题,老是兰频,大家帮忙 |
|
|
沙发#
发布于:2005-06-10 17:27
定义成这样
{ unsigned char cmd_id; unsigned long start_lba; unsigned long write_len; unsigned char sector[1]; } WRITE_CMD, *PWRITE_CMD; |
|
板凳#
发布于:2005-06-10 23:58
对,应该象楼上说的那样定义,这样可以不受长度了限制,而且直接可以用结构成员变量访问你的不定长成员变量sector.
|
|
|
地板#
发布于:2005-06-11 16:07
我这样分配以后,通过write_cmd->cmd_id 得到的值怎么不正确啊
|
|
|
地下室#
发布于:2005-06-11 17:41
结构如下定义
typedef struct _WRITE_CMD { unsigned long cmd_id; unsigned long start_lba; unsigned long write_len; unsigned char sector[1]; } WRITE_CMD, *PWRITE_CMD; 通过如下方式分配 ULONG dBufferSize; dBufferSize = sizeof(unsigned long) * 3+ sizeof(unsigned char) *left; write_cmd = (PWRITE_CMD)ExAllocatePool ( NonPagedPool, dBufferSize+1); write_cmd->cmd_id = htonl(42); write_cmd->start_lba = htonl(StartLBA); write_cmd->write_len = htonl(left); RtlCopyMemory((void*)write_cmd->sector, (UCHAR *)(pSrb->DataBuffer), left); len = sizeof(write_cmd); 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]不是42,不知道啥原因。 |
|
|