C++ IIS7本机模块-使用文件句柄设置请求实体
所以我正在开发一个IIS7本机模块,它的部分功能是处理一些相当大的上传文件。我正在努力寻找减少模块内存占用的方法 我能够对处理后的响应数据做的一件事很好,就是使用HttpDataChunkFromFileHandle块类型将打开的文件句柄传递给底层系统,而不是内存缓冲区。我正试图对请求数据做同样的事情,但到目前为止没有任何乐趣 我首先读取所有请求数据,对其进行处理,然后在原始HTTP_请求中设置实体块,如下所示:C++ IIS7本机模块-使用文件句柄设置请求实体,c++,iis-7,C++,Iis 7,所以我正在开发一个IIS7本机模块,它的部分功能是处理一些相当大的上传文件。我正在努力寻找减少模块内存占用的方法 我能够对处理后的响应数据做的一件事很好,就是使用HttpDataChunkFromFileHandle块类型将打开的文件句柄传递给底层系统,而不是内存缓冲区。我正试图对请求数据做同样的事情,但到目前为止没有任何乐趣 我首先读取所有请求数据,对其进行处理,然后在原始HTTP_请求中设置实体块,如下所示: HTTP_REQUEST* rawRequest = _context->G
HTTP_REQUEST* rawRequest = _context->GetRequest()->GetRawHttpRequest();
rawRequest->EntityChunkCount = 1;
rawRequest->pEntityChunks = new HTTP_DATA_CHUNK[1];
rawRequest->pEntityChunks[0].DataChunkType = HttpDataChunkFromFileHandle;
rawRequest->pEntityChunks[0].FromFileHandle.FileHandle = _requestFile.handle();
rawRequest->pEntityChunks[0].FromFileHandle.ByteRange.StartingOffset.QuadPart = 0;
rawRequest->pEntityChunks[0].FromFileHandle.ByteRange.Length.QuadPart = _requestFile.size();
并返回RQ_通知
这将导致来自服务器的403响应
如果改用内存块,它会正常工作:
char* bufferOut = static_cast<char*>(_context->AllocateRequestMemory( _requestFile.size() ));
std::memcpy( bufferOut, _requestFile.map( 0, _requestFile.size() ), _requestFile.size() );
HTTP_REQUEST* rawRequest = _context->GetRequest()->GetRawHttpRequest();
rawRequest->EntityChunkCount = 1;
rawRequest->pEntityChunks = new HTTP_DATA_CHUNK[1];
rawRequest->pEntityChunks[0].DataChunkType = HttpDataChunkFromMemory;
rawRequest->pEntityChunks[0].FromMemory.pBuffer = (PVOID)bufferOut;
rawRequest->pEntityChunks[0].FromMemory.BufferLength = _requestFile.size()
所以。。。请求实体是否不支持HttpDataChunkFromFileHandle?或者我还需要做些什么才能让它工作
我需要对文件设置任何特定的安全权限吗