pDevExt->buffer = (PUCHAR)ExAllocatePool(PagedPool,MAX_FILE_LENGTH);
ULONG ulWriteOffset=(ULONG)stack->Parameters.Write.ByteOffset.QuadPart;
memcpy( pDevExt->buffer + ulWriteOffset , pIrp->AssociatedIrp.SystemBuffer, ulWriteLength);
求高手解答为什么将pIrp->AssociatedIrp.SystemBuffer复制到自己申请的buffer缓冲区还要在后面加个ulWriteOffset,去掉行不行
------解决方案--------------------
驱动模仿一个文件吧 驱动保存文件就用的pDevExt->buffer,buffer的长度是MAX_FILE_LENGTH(即文件最大长度)。
当写请求到达驱动的时候,需要把应用程序要写数据写到文件中(即复制到buffer中)。
ULONG ulWriteOffset=(ULONG)stack->Parameters.Write.ByteOffset.QuadPart;就是本次写操作的偏移量。比如文件长度是2000Bytes,ulWriteOffset为1000,那么意思就是从文件开始的第1000个字节开始将ulWriteLength个Bytes写到文件中。
写文件就2个参数,一个ByteOffset(即写到文件中的哪个位置),一个length(即写多少个字节的数据)
明白了吗?