WebhostGetVersion 関数のサンプルコード (ISAPI Extension)

リスナーアダプター API に含まれる WebhostGetVersion 関数のサンプルコードです。

この例では、ISAPI Extension から WebhostGetVersion 関数を呼び出し、その結果をクライアントに返しています。


// ANSI BUILD ONLY

#include <httpext.h>
#include <windows.h>
//#include 

VOID SendResponse ( LPEXTENSION_CONTROL_BLOCK lpECB, PCHAR pszText );

typedef HRESULT (__stdcall *PFNWebhostGetVersion) (
     DWORD* pMajorVersion,
     DWORD* pMinorVersion );

#define DLL_NAME_WBHSTIPM "C:\\Windows\\System32\\inetsrv\\wbhstipm.dll"


/////////////////////////////////////////////////////////////////////////////
//
// GetExtensionVersion
//


BOOL WINAPI GetExtensionVersion( LPHSE_VERSION_INFO pVer ) {

     pVer->dwExtensionVersion = MAKELONG( 0, 1 );
     lstrcpynA( 
          pVer->lpszExtensionDesc, 
          "WebhostGetVersion - test isapi", 
          HSE_MAX_EXT_DLL_NAME_LEN );

     return TRUE;
     
}


/////////////////////////////////////////////////////////////////////////////
//
// HttpExtensionProc
// 


DWORD WINAPI HttpExtensionProc( LPEXTENSION_CONTROL_BLOCK lpECB ) {

     lpECB->ServerSupportFunction(
          lpECB->ConnID,
          HSE_REQ_SEND_RESPONSE_HEADER,
          NULL, 
          NULL, 
          (LPDWORD) "Content-type: text/html\r\n\r\n");


     //
     // Load DLL
     //

     HINSTANCE hDLL;

     hDLL = ::LoadLibraryA ( DLL_NAME_WBHSTIPM );

     if ( !hDLL ) {
          SendResponse ( lpECB, "Unabled to load DLL" );
          return HSE_STATUS_SUCCESS;
     }


     //
     // Get WebhostGetVersion Address
     //

     CHAR szBuff [256];
     DWORD dwMajorVersion = 0;
     DWORD dwMinorVersion = 0;
     PFNWebhostGetVersion pfnWebhostGetVersion = NULL;

     pfnWebhostGetVersion = (PFNWebhostGetVersion) GetProcAddress ( 
          hDLL, 
          "WebhostGetVersion" );

     if ( !pfnWebhostGetVersion ) {
          SendResponse ( lpECB, "GetProcAddress Failed." );
          FreeLibrary ( hDLL );
          return HSE_STATUS_SUCCESS;
     }


     //
     // Call WebhostGetVersion
     //
     
     HRESULT hr = pfnWebhostGetVersion ( 
          &dwMajorVersion, 
          &dwMinorVersion );

     if ( SUCCEEDED(hr) ) {
          wsprintf ( szBuff, "Version %u %u", dwMajorVersion, dwMinorVersion );
     }
     else {
          wsprintf ( szBuff, "WebhostGetVersion Failed. hr = %x", hr );
     }

     SendResponse ( lpECB, szBuff );


     //
     // Free Library
     //
     
     FreeLibrary ( hDLL );

     return HSE_STATUS_SUCCESS;

}



/////////////////////////////////////////////////////////////////////////////



VOID SendResponse ( LPEXTENSION_CONTROL_BLOCK lpECB, PCHAR pszText ) {

     DWORD dwBytes = lstrlenA ( pszText );

       lpECB->WriteClient(
          lpECB->ConnID, 
          (LPVOID) pszText, 
          &dwBytes, 
          HSE_IO_SYNC );

}



/////////////////////////////////////////////////////////////////////////////
//
// TerminateExtension
//


BOOL WINAPI TerminateExtension( DWORD dwFlags ) {

     return TRUE;

}

以上をビルドし、実行することによって以下のような結果となりました。

実行結果

メジャーバージョンとして バージョン 7 が返されていることがわかります。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説