WebhostGetVersion 関数のサンプルコード (ISAPI Extension)
リスナーアダプター API に含まれる WebhostGetVersion 関数のサンプルコードです。
この例では、ISAPI Extension から WebhostGetVersion 関数を呼び出し、その結果をクライアントに返しています。
// ANSI BUILD ONLY #include <httpext.h> #include <windows.h> //#includeVOID 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 が返されていることがわかります。