README.TXT

FORMDUMP - Form Decoder and Dumper, an Internet Information Server extension 

NOTE: FORMDUMP has been revised from its first release

This sample is a Microsoft Internet Server extension, similar to CGI
extensions common to many internet servers. FORMDUMP illustrates how
to write a DLL that can be used to obtain form data from a web
browser, and also how to build a reply to the form.

This version of FORMDUMP incorporates two new features useful in
exploring how forms are submitted. The original version of FORMDUMP
is structured into two major parts: organizing inbound data
into a memory structure, and using that data to build a HTML page.
This version adds a dump of the server variables as well as the
security context in which the DLL thread runs in.

HttpExtensionProc does the following:

1. Sends the header of the HTML response
2. Parses inbound form fields and send them back as HTML
3. Determines the security context in which the thread is running,
and return the domain and user as HTML
4. Uses GetServerVariable to retrieve all server variables, and
send them back as HTML
5. Sends the footer of the HTML resoponse
6. Returns control to IIS

This version also adds an HtmlPrintf() function in html.h.

To build this sample, you must have the Internet SDK installed,
and the environment of your compiler properly set. A Visual C++
4.0 makefile is included.

The following files are included in the sample:

FORMDUMP.CPP - The main source file and entry point for the DLL.

KEYS.CPP - A set of reusable form data decoding functions. They
implement an interface that you can use in your own
extension.

HTML.CPP - A set of wrappers for common HTML features. These
wrappers can also be reused.

KEYS.H - The header file for the external interface
implemented in KEYS.CPP.

HTML.H - The header file for all functions available in HTML.CPP.

FORMDUMP.DEF - The definition file (one is required for all Win32 DLLs).

FORMDUMP.MAK - A Visual C++ 4.0 make file.

MAKEFILE - A generic make file


NOTE: The source files all have .CPP extensions, though they really don't
rely on any C++ specific features. However, you can use C++ features,
and if you use any of these .CPP files, you do not need extern "C".

To Build the DLL
----------------

Simply run NMAKE in the directory containing FORMDUMP.CPP, KEYS.CPP, HTML.CPP,
and so on. You must have the multi-threaded C Runtime libraries installed,
and your environment must point to:

PATH=C:\MSTOOLS\BIN;C:\COMPILER\BIN
INCLUDE=C:\MSTOOLS\INCLUDE;C:\INETSDK\INCLUDE
LIB=C:\MSTOOLS\LIB
WWWROOT=C:\INETSRV\WWWROOT
WWWSCRIPTS=C:\INETSRV\SCRIPTS

Where C:\MSTOOLS points to the Win32 SDK, C:\INETSDK points to the Internet
SDK, and C:\COMPILER points to your C++ compiler.

When setting WWWROOT and WWWSCRIPTS to your Internet Information Server
locations, use a local or mapped drive. If you want to use UNC names, be
careful with using a $ in the name, because NMAKE will treat it as a macro.
If you must have a $ in the environment variable, preceed it with two
carets (^^$) because both the command prompt and NMAKE will convert the
caret symbol. Here is an example of how to map to \\myserver\c$:

SET WWWROOT=\\myserver\C^^$\inetsrv\wwwroot

Another issue is the type of C Runtimes that are linked with the ISAPI
extension. Make sure the DLL version of the C Runtimes is installed on your
server, in the SYSTEM32 directory. For Visual C++, the DLLs are MSVCRT40.DLL
and MSVCR40D.DLL. If these DLLs are not available, you will see error 500
when trying to access the DLL from a Web browser.