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.