Windows CGI


The Windows CGI interface is a direct interface designed solely for pure Windows backend programs (16 and 32 bits). The purpose of the interface, as touted by O'Reilly, is to make it easy to write extensions in any programming language that can access Windows specific features, such as DDE, OLE and ODBC. The popularity of the Windows CGI interface has declined significantly amidst the current battle of the interfaces. Many scripters have turned either back to Standard CGI or to Perl for portability and support. The Windows CGI interface has its own performance problems as well. It is only suitable for parsing form data.


The server first parses the information from the client and places it into a temporary input file. Other temporary files may also be created during this initial processing. An empty output file is also created at this time. The Windows program is then launched with parameters telling it where to find these files. The program performs its processing and fills the output file with information to send back to the client's browser. When the program terminates, the server parses the output file and sends its contents.

Four command line parameters are passed to the Windows CGI program:

C:\HTTPD\CGI-WIN\SCRIPT.EXE profile content output query

The profile parameter is the name of the private profile. It contains information about the launch and may reference other data files. The content parameter is the name of the file that contains data from the user. The output parameter is the name of the output file that the program should write its output to, for return to the client. The query parameter is the query string or URL argument, if available.

Private Profile

The profile is formated like a Windows .INI file. The purpose is to allow programs to access the information inside of them easily with the Windows API:

Section [CGI]

Each entry works like the environment variables set in the standard CGI interface, for a detailed description see the Standard CGI section. The section CGI contains following entries:

  • REQUEST PROTOCOL name/revision of the protocol used
  • EXECUTEABLE PATH logical path of the CGI program
  • LOGICAL PATH additional path information if needed by the script
  • PHYSICAL PATH the logical path with aliases expanded
  • QUERY STRING the information in the URL after the question mark
  • REFERER URL of the document that includes the CGI call
  • FROM if set by the client: the email address of the user
  • CONTENT TYPE MIME type of attachment if existing
  • CONTENT LENGTH attachment length
  • CONTENT FILE name of attachment file
  • SERVER SOFTWARE name/version of webserver i.e. Alibaba/1.0
  • SERVER NAME host name of the server
  • SERVER PORT internet port number used
  • SERVER ADMIN email address of the administrator
  • CGI VERSION 'CGI/1.3a' for this version
  • REMOTE HOST host name of the client
  • REMOTE ADDRESS IP address of the client
  • AUTHENTICATION METHOD 'BASIC' method used for authenticating CGI access
  • AUTHENTICATION REALM which group of users is allowed access
  • AUTHENTICATED USERNAME username within realm

Section [ACCEPT]

All accept fields received are written in the form accept=quality
1 is assumed if not stated otherwise

  • Example:

Section [SYSTEM]

  • GMT OFFSET number of seconds the local time differs from GMT. This is a positive value for regions east of Greenwich (Europe, Asia), a negative for regions westwards (USA)
  • DEBUG MODE normally set to zero
  • CONTENT FILE is the private profile ini filename.
  • OUTPUT FILE the name of the output file sent to the client.


Here all values retrieved by a get command are included, in name=value manner.




Here all values retrieved by a POST command are included, in name=value manner. In this section we place all values which are less then 1500 bytes, if they are longer, they are put into section [FORM EXTERNAL].


Here all values retrieved by a POST command are included, in name=filename size manner. The files contain the values without any modification. Be sure to read them with binary file attributes, so that no automatic conversion takes place.


  • NAME_VAR=c:\tmp/03147835.0 181777

Section [FORM HUGE]

If a string in the content file is more than 64kB, it is referenced here in the form name=offset length. Offset points to the beginning of the string in the content file and length is the size of the string. Both values are in bytes. Be sure to open the content file in binary mode, so that no automatic conversion takes place.

Copyright 1997 Omnicron Technologies Corporation