Собственный модуль IIS7 - установка объекта запроса с дескриптором файла - PullRequest
1 голос
/ 04 января 2012

Итак, я работаю над собственным модулем IIS7, и часть того, что он будет делать, - обрабатывать некоторые довольно большие загруженные файлы.Я пытаюсь найти способы уменьшить объем памяти модуля при этом.

Одна вещь, которую я смог сделать с обработанными данными ответа, и это хорошо, это передать дескрипторы открытых файлов вбазовая система вместо буферов памяти с использованием типов чанков HttpDataChunkFromFileHandle.Я пытаюсь сделать то же самое с данными запроса, но пока не радуюсь.

Сначала я читаю все данные запроса, обрабатываю их, а затем устанавливаю чанки сущностейв необработанном HTTP_REQUEST, например:

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_NOTIFICATION_CONTINUE.

Это приводит к ответу от сервера 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 просто не поддерживается для объектов запроса?Или что-то еще, что мне нужно сделать, чтобы это работало?

Нужно ли устанавливать какие-либо конкретные разрешения безопасности для файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...