Сервер Web своими руками. Язык HTML, приложения CGI и ISAPI



Приложение FILEUPL - часть 10


Для создания файла мы использовали функцию CreateFile, описанную нами в 26 томе “Библиотеки системного программиста”, который называется “Программирование для Windows NT. Часть 1”. Примеры использования этой и других функций, предназначенных для работы с файлами, вы можете найти в 27 томе этой же серии, который называется “Программирование для Windows NT. Часть 2”.

Запись принятых данных в файл выполняется за один вызов функции WriteFile:

WriteFile(hOutFile, lpDataMIME,

   lpECB->cbTotalBytes, &dwWritten, NULL);

В качестве размера блока данных здесь указывается содержимое поля cbTotalBytes структуры типа EXTENSION_CONTROL_BLOCK. После выполнения записи файл закрывается функцией CloseHandle. Блок памяти, полученный от функции ReadClientMIME, освобождается при помощи функции LocalFree.

Далее расширение создает документ HTML в буфере szBuff и посылает его удаленному пользователю при помощи функции ServerSupportFunction с кодом операции HSE_REQ_SEND_RESPONSE_HEADER.

Теперь займемся функцией ReadClientMIME.

В качестве первого параметра эта функция получает указатель на блок EXTENSION_CONTROL_BLOCK, передаваемый функции HttpExtensionProc  через единственный параметр. Второй параметр nStatus используется для передачи результата работы функции ReadClientMIME вызывающей программе.

В самом начале своей работы функция ReadClientMIME анализирует содержимое поля cbTotalBytes структуры EXTENSION_CONTROL_BLOCK, в котором находится размер принимаемых данных. Если данных для чтения нет, функция ReadClientMIME передает код ошибки HSE_STATUS_ERROR и возвращает вызывающей программе значение NULL.

Если все нормально и данные для чтения есть, функция ReadClientMIME с помощью функции LocalAlloc заказывает блок памяти размером lpECB?>cbTotalBytes байт. Описание этой функции вы найдете в только что упомянутом 26 томе “Библиотеки системного программиста”.

После этого начинается процесс копирования данных в полученный буфер.

Вначале функция ReadClientMIME копирует блок данных из буфера предварительного чтения, вызывая для этого функцию memcpy:




Содержание  Назад  Вперед