C++ IIS7本机模块-使用文件句柄设置请求实体

C++ IIS7本机模块-使用文件句柄设置请求实体,c++,iis-7,C++,Iis 7,所以我正在开发一个IIS7本机模块,它的部分功能是处理一些相当大的上传文件。我正在努力寻找减少模块内存占用的方法 我能够对处理后的响应数据做的一件事很好,就是使用HttpDataChunkFromFileHandle块类型将打开的文件句柄传递给底层系统,而不是内存缓冲区。我正试图对请求数据做同样的事情,但到目前为止没有任何乐趣 我首先读取所有请求数据,对其进行处理,然后在原始HTTP_请求中设置实体块,如下所示: HTTP_REQUEST* rawRequest = _context->G

所以我正在开发一个IIS7本机模块,它的部分功能是处理一些相当大的上传文件。我正在努力寻找减少模块内存占用的方法

我能够对处理后的响应数据做的一件事很好,就是使用HttpDataChunkFromFileHandle块类型将打开的文件句柄传递给底层系统,而不是内存缓冲区。我正试图对请求数据做同样的事情,但到目前为止没有任何乐趣

我首先读取所有请求数据,对其进行处理,然后在原始HTTP_请求中设置实体块,如下所示:

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?或者我还需要做些什么才能让它工作

我需要对文件设置任何特定的安全权限吗