La structure EXTENSION_CONTROL_BLOCK a la forme suivante:
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; //IN
DWORD dwVersion //IN
HCONN ConnID; //IN
DWORD dwHttpStatusCode; //OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT
LPSTR lpszMethod; //IN
LPSTR lpszQueryString; //IN
LPSTR lpszPathInfo; //IN
LPSTR lpszPathTranslated; //IN
DWORD cbTotalBytes; //IN
DWORD cbAvailable; //IN
LPBYTE lpbData; //IN
LPSTR lpszContentType; //IN
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * WriteClient )
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );
BOOL ( WINAPI * ReadClient )
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * ServerSupportFunction )
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
Le serveur communique avec l'ISA via EXTENSION_CONTROL_BLOCK.
Les références ci-dessus et indique si le membre s'applique aux messages de l'extension (IN) ou de l'extension (sort).
Membres
La structure EXTENSION_CONTROL_BLOCK contient les champs suivants:
cbSize
La taille de cette structure.
dwVersion
La version d'informations ofnbsp ; HTTP_FILTER_REVISIO&N. Le HIWORD a le numéro de version principale et le LOWORD a le numéro de version mineure.
ConnID
  ;Un numéro unique attribué par le serveur HTTP. Il ne doit pas être modifié.
dwHttpStatusCode
Le statut de la transaction en cours lorsque la demande est terminée. Peut être l'une des opérations suivantes:
lpszLogData
Mémoire tampon de taille HSE_LOG_BUFFER_LEN. Contient une chaîne d'information journal un NULL, spécifique à l'ISA, de la transaction en cours. Information de ce journal est entrée dans le journal du serveur HTTP. Maintien d'un seul fichier journal avec un serveur HTTP et de transactions d'ISA est très utile aux fins de l'administration.
lpszMethod
La méthode avec laquelle la demande a été faite. C'est l'équivalent à la variable CGI REQUEST_METHOD.
lpszQueryString
nbsp ;Chaîne contenant les informations de requête. C'est l'équivalent à la variable CGI QUERY_STRI&NG.
lpszPathInfo
Chaîne contenant les informations de chemin d'accès supplémentaire données par le client. Ceci est équivalent à la variable PATH_INFO de CGI.
lpszPathTranslated
Chaîne contenant le chemin d'accès traduit. C'est l'équivalent à la variable CGI PATH_TRANSLATED.
cbTotalBytes
Le nombre total d'octets à être reçu par le client. Ceci est équivalent à la variable CGI CO&NTENT_LENGTH. Si cette valeur est 0xffffffff, alors il existe quatre gigaoctets ou plus de data.nbsp disponibles ; Dans ce cas, CHttpServerContext::ReadClient doit être appelé jusqu'à ce que plus aucune donnée n'est renvoyée.
cbAvailable
Le nombre d'octets (out of a total of cbTotalBytes) dans la mémoire tampon pointé par lpbDatadisponibles. Si cbTotalBytes est le même que cbAvailable la variable lpbData pointe vers une mémoire tampon qui contient toutes les données envoyées par le client. Sinon, cbTotalBytes contiendra le nombre total d'octets de données reçues. L'ISA il faut ensuite utiliser la fonction de rappel CHttpServerContext::ReadClient pour lire le reste des données (à partir de l'offset de cbAvailable).
lpbData
Pointe vers une mémoire tampon de taille cbAvailable qui a les données envoyées par le client.
lpszContentType
Chaîne contenant le type de contenu des données envoyées par le client. C'est l'équivalent à la variable CGI CONTENT_TYPE.
GetServerVariable
Cette fonction copie d'informations (y compris les variables CGI) concernant une connexion HTTP, ou le serveur lui-même, dans une mémoire tampon. GetServerVariable prend les paramètres suivants:
| Nom de la variable | Description |
| ALL_HTTP | Tous les en-têtes HTTP qui n'étaient pas déjà analysés dans l'une des variables ci-dessus. Ces variables sont de la forme HTTP_lt ; nom du champ d'en-tête & gt. |
| AUTH_PASS | Cela permettra de récupérer le mot de passe correspondant à REMOTE_USER fourni par le client. Ce sera une chaîne terminée par null. |
| AUTH_TYPE | Contient le type d'authentification used.nbsp ; Par exemple, si l'authentification de base est utilisée, la chaîne sera « De base ». Pour Windows &NT Challenge-réponse, il sera « NTLM ». Autres schémas d'authentification auront d'autres chaînes. Parce que les nouveaux types d'authentification peuvent être ajoutés au serveur Internet, il n'est pas possible d'énumérer toutes les chaînes possibles. Si la chaîne est vide, alors aucune authentification n'est utilisée. |
| CONTENT_LENGTH | Le nombre d'octets qui le script peut s'attendre à recevoir du client. |
| CONTENT_TYPE | Le type de contenu de l'information fournie dans le corps d'une requête POST. |
| GATEWAY_INTERFACE | La révision de la spécification CGI auquel ce serveur est conforme. La version actuelle est CGI/1.1. |
| HTTP_ACCEPT | En-tête de cas spécial HTTP. Les valeurs de l'accepter : les champs sont concaténées, séparées par des «, ». Par exemple, si les lignes suivantes font partie de l'en-tête HTTP
alors la variable HTTP_ACCEPT auront une valeur de:
|
| PATH_INFO | Informations supplémentaires de chemin d'accès, tel qu'indiqué par le client. Cela comprend la partie arrière de l'URL après le nom du script, mais avant la chaîne de requête (le cas échéant). |
| PATH_TRANSLATED | Il s'agit de la valeur de PATH_INFO, mais avec un nom de chemin d'accès virtuel dans une spécification de répertoire. |
| QUERY_STRING | L'information qui suit le ? dans l'URL qui a référencé ce script. |
| REMOTE_ADDR | L'adresse IP du client. |
| REMOTE_HOST | Le nom d'hôte du client. |
| REMOTE_USER | Contient le nom d'utilisateur fourni par le client et authentifié par le serveur. |
| REQUEST_METHOD | La méthode de demande HTTP. |
| NOM_DU_SCRIPT | Le nom du programme script en cours d'exécution. |
| SERVER_NAME | Du serveur nom d'hôte (ou adresse IP) tel qu'il devrait apparaître dans autoréférencement URL. |
| SERVER_PORT | Le port TCP/IP sur lequel la demande a été reçue. |
| SERVER_PROTOCOL | Le nom et la version du protocole de recherche d'informations relatives à cette demande. Normalement HTTP/1.0. |
| SERVER_SOFTWARE | Le nom et la version du serveur web sous lequel s'exécute le programme CGI. |
WriteClient
Envoie les informations vers le client de la mémoire tampon indiquée. WriteClient prend les paramètres suivants:
ReadClient
Lit les informations du corps de la demande HTTP du client Web dans la mémoire tampon fourni par l'appelant. ReadClient prend les paramètres suivants:
ServerSupportFunction
Fournir l'ISAs avec certaines fonctions de généralistes, ainsi que des fonctions qui sont spécifiques à l'implémentation du serveur HTTP. ServerSupportFunction prend les paramètres suivants:
Commentaires
U&n serveur identifie les fichiers avec l'extensionsnbsp;.EXE et.BAT comme exécutables CGI (Common Gateway Interface). En outre, un serveur va identifier un fichier avec une extension DLL comme un script à exécuter.
Lorsque le serveur charge la DLL, il appelle la DLL au point d'entrée CHttpServer::GetExtensionVersion pour obtenir le numéro de version de lanbsp ; HTTP_FILTER_REVISIO&N l'ISA est basé sur et une description de texte court pour les administrateurs de serveur. Pour chaque demande du client, le point d'entrée de CHttpServer::HttpExtensionProc est appelé. L'extension reçoit les informations généralement nécessaires tels que la chaîne de requête, info de chemin d'accès, nom de la méthode et la voie traduite.
Voir aussi  ;CHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc