阅读:1037回复:1
非常棘手的问题,90分相送
我把论坛上tiamo的虚拟磁盘修改了一下 ,
tiamo的虚拟磁盘把大文件拷贝到磁盘时没有问题, 我想把磁盘的数据存到数据库 ,但是 当文件比较大 ,超过 20M 系统就死了 。小文件操作没问题。不知道啥原因 。 与算法等应该没关系,因为我就在tiamo的 写磁盘的函数里面 加了一段tdi发包函数代码 如下:只是往数据库写数据,但是文件比较大的时候,系统就死了。 for ( i=0; i<Count; i++) { // 发送WRITE_CMD write_cmd.cmd_id = 0x2a; Start =StartLBA+512*i; write_cmd.start_lba = htonl(Start); DbgPrint ( \"TDI Rwrite: %d\\n\", Start); // 拷贝数据 if ( left >= BlockSize) { RtlCopyMemory(write_cmd.sector, (UCHAR *)(pSrb->DataBuffer)+i*BlockSize, BlockSize); write_cmd.write_len = htonl(BlockSize); devDebugPrint(\"write %d bytes:\\n\", BlockSize); status = ZwWriteFile(pExt->m_hFileHandle[pSrb->TargetId],NULL,NULL,NULL,&ioStatus,(UCHAR *)(pSrb->DataBuffer)+i*BlockSize, BlockSize,&pos,NULL); pos.QuadPart+=BlockSize; // DbgPrint ( \"TDI Rwrite: %d\\n\", ntohs(pos.QuadPart)); left -= BlockSize; } else { RtlCopyMemory(write_cmd.sector, (UCHAR *)(pSrb->DataBuffer)+i*BlockSize, left); write_cmd.write_len = htonl(left); status = ZwWriteFile(pExt->m_hFileHandle[pSrb->TargetId],NULL,NULL,NULL,&ioStatus,(UCHAR *)(pSrb->DataBuffer)+i*BlockSize, left,&pos,NULL); left =0; } len = sizeof(write_cmd); dStatus = TdiSendDatagram ( // send datagram pTdiTransportObject, // to transport MY_PORT, // port dTdiAddress, // address &write_cmd, // data len ); // size if ( !NT_SUCCESS ( dStatus ) ) DbgPrint ( \"ERROR: writing sending %X\\n\", dStatus ); else DbgPrint ( \"writing send success\\n\" ); // 接收确认 len = sizeof(pExt->buf); dStatus = TdiReceiveDatagram ( pTdiTransportObject, // to transport MY_PORT, // port &dTdiAddress, // address pExt->buf, // buffer &len ); // buffer size DbgPrint ( \"TDI receive len: %d\\n\", len); if ( NT_SUCCESS ( dStatus ) ) DbgPrint ( \"writing rec: success\\n\"); else DbgPrint ( \"ERROR: writing \\n\" ); } |
|
|
沙发#
发布于:2005-04-12 13:41
这样看代码是乎没有问题
|
|
|