Sambar ISAPI "hello4.dll"

Sambar ISAPI "hello4.dll"

来源(www.asm32.net)
 

From: http://www.asm32.net/article_disp.asp?ID=2784


Sambar ISAPI "hello4.dll"

hello4.c

#include <windows.h>
#include <httpext.h>
#include <string.h>
#include <stdio.h>
#include <winbase.h>
//#include <stdarg.h>

/*
** Globals
*/

CHAR * A_szWeekday[7] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
CHAR * A_szNow[6] = {"夜里好", "早上好", "上午好", "中午好", "下午好", "晚上好"};

char szAppTitle[] = "Sambar ISAPI /"hello4.dll/"";
char szResponseHeader_Format[] = "Content-Type: text/html/r/n/r/n"
                                 "<html>/r/n"
                                 "<head><title>%s</title></head>/r/n"
                                 "<body>/r/n"
                                 "<h1>%s</h1>/r/n"
                                 "<hr>/r/n"
                                 "<P><strong>first run:</strong> %s ...</P>/r/n"
                                 "<P>Begin ...</P>/r/n/r/n";
CHAR szPageEnd[] = "/r/n<P>Done.</p>/r/n/r/n</BODY>/r/n</HTML>/r/n";

CHAR szResponseHeader[256] = {0};
UINT nResponseHeader_Len = 0;
CHAR szDateTimeBuffer[128] = {0};
CHAR szModuleFileName[MAX_PATH] = {0};

void PA_GetDateTime(LPTSTR m_szDateBuff);
void PA_InitializeDLL();
void PA_WriteClient(EXTENSION_CONTROL_BLOCK *pECB, LPCTSTR m_strInfo);
HINSTANCE hInst;

BOOL WINAPI DllMain(IN HINSTANCE hinstDll, IN DWORD dwReason, IN LPVOID lpvContext){
    // Note that appropriate initialization and termination code
    // would usually be written within the switch statement below. But because
    // this example is very simple, no initialization and termination code is  needed.

    GetModuleFileName(hinstDll, szModuleFileName, MAX_PATH);
    switch(dwReason) {
        case DLL_PROCESS_ATTACH :
            PA_InitializeDLL();
            break;
        case DLL_PROCESS_DETACH :
            break;
    }

    return TRUE;
}

/*
**    GetExtensionVersion
**
**    ISAPI/Win32 API method to ensure compatibility with the Server.
*/
BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer) {
    pVer->dwExtensionVersion = MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);

    lstrcpyn(pVer->lpszExtensionDesc, "Sambar Server ISAPI Search extension.",
            HSE_MAX_EXT_DLL_NAME_LEN);

    return TRUE;


/*
**    HttpExtensionProc
**
**     Called in response to the client request.
*/
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB) {

    CHAR    szFile[MAX_PATH];
    CHAR    buffer[2048];
    int     buflen=0;

    if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER,
        "200 OK", &nResponseHeader_Len, (LPDWORD)szResponseHeader)) 
    {
        pECB->dwHttpStatusCode = 500;
        return HSE_STATUS_ERROR;
    }

    PA_WriteClient(pECB, "<p>Hello World!</p>/r/n");

    PA_WriteClient(pECB, "<strong>REMOTE_HOST:</strong>/r/n");
    
    buflen = sizeof(buffer);
    pECB->GetServerVariable(pECB->ConnID, "REMOTE_HOST", buffer, &buflen);
    PA_WriteClient(pECB, buffer);

    PA_GetDateTime(szDateTimeBuffer);
    sprintf(buffer, "<p><strong>welcome:</strong> %s<br>/r/n", szDateTimeBuffer);
    PA_WriteClient(pECB, buffer);

    sprintf(buffer, "<p><strong>ModuleFile:</strong> %s</p>/r/n", szModuleFileName);
    PA_WriteClient(pECB, buffer);

    GetModuleFileName(NULL, szFile, MAX_PATH);
    sprintf(buffer, "<p><strong>Caller:</strong> %s</p>/r/n", szFile);
    PA_WriteClient(pECB, buffer);

    PA_WriteClient(pECB, szPageEnd);

    pECB->dwHttpStatusCode = 200;

    return HSE_STATUS_SUCCESS;
}

void PA_WriteClient(EXTENSION_CONTROL_BLOCK *pECB, LPCTSTR m_strInfo){
    DWORD m_dwInfoLen = strlen(m_strInfo);
    pECB->WriteClient(pECB->ConnID, (LPVOID)m_strInfo, &m_dwInfoLen, 0);
}

void PA_InitializeDLL(){
    PA_GetDateTime(szDateTimeBuffer);
    wsprintf(szResponseHeader, szResponseHeader_Format, szAppTitle, szAppTitle, szDateTimeBuffer);
    nResponseHeader_Len = strlen(szResponseHeader);
}

void PA_GetDateTime(LPTSTR m_szDateBuff){
    SYSTEMTIME m_tmSystemTime;
    char * m_szNow;
    int m_nHour =0;

    GetLocalTime(&m_tmSystemTime);
    m_nHour = m_tmSystemTime.wHour;
    if( m_nHour>=0  && m_nHour<4 )  m_szNow = A_szNow[0];
    if( m_nHour>=4  && m_nHour<9 )  m_szNow = A_szNow[1];
    if( m_nHour>=9  && m_nHour<12 ) m_szNow = A_szNow[2];
    if( m_nHour>=12 && m_nHour<14 ) m_szNow = A_szNow[3];
    if( m_nHour>=14 && m_nHour<18 ) m_szNow = A_szNow[4];
    if( m_nHour>=18 && m_nHour<24 ) m_szNow = A_szNow[5];
    
    // "2005-05-02 12:27:30 星期三 下午";
    sprintf(m_szDateBuff,
            "%04d年%02d月%02d日 %02d:%02d:%02d %s %s",
            m_tmSystemTime.wYear,
            m_tmSystemTime.wMonth,
            m_tmSystemTime.wDay,
            m_tmSystemTime.wHour,
            m_tmSystemTime.wMinute,
            m_tmSystemTime.wSecond,
            A_szWeekday[m_tmSystemTime.wDayOfWeek],
            m_szNow);
}




hello4.def

; hello4.def : Declares the module parameters for the DLL.

LIBRARY      "hello4"
DESCRIPTION  'hello4 Windows Dynamic Link Library'

EXPORTS
    GetExtensionVersion
    HttpExtensionProc
    ; Explicit exports can go here



hello4.dsp

# Microsoft Developer Studio Project File - Name="hello4" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

CFG=hello4 - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE 
!MESSAGE NMAKE /f "hello4.mak".
!MESSAGE 
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE 
!MESSAGE NMAKE /f "hello4.mak" CFG="hello4 - Win32 Debug"
!MESSAGE 
!MESSAGE Possible choices for configuration are:
!MESSAGE 
!MESSAGE "hello4 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "hello4 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE 

# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe

!IF  "$(CFG)" == "hello4 - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "hello4___Win32_Release"
# PROP BASE Intermediate_Dir "hello4___Win32_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HELLO4_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HELLO4_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x804 /d "NDEBUG"
# ADD RSC /l 0x804 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"hello4.dll"

!ELSEIF  "$(CFG)" == "hello4 - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HELLO4_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HELLO4_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x804 /d "_DEBUG"
# ADD RSC /l 0x804 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"hello4.dll" /pdbtype:sept

!ENDIF 

# Begin Target

# Name "hello4 - Win32 Release"
# Name "hello4 - Win32 Debug"
# Begin Group "Source Files"

# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File

SOURCE=./hello4.c
# End Source File
# End Group
# Begin Group "Header Files"

# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File

SOURCE=./hello4.def
# End Source File
# End Group
# Begin Group "Resource Files"

# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project



运行结果:

Sambar ISAPI "hello4.dll"


first run: 2007年04月24日 07:08:59 星期二 早上好 ...

Begin ...

Hello World!

REMOTE_HOST: 127.0.0.1

welcome: 2007年04月24日 07:08:59 星期二 早上好

ModuleFile: E:/Inetpub/virtualdir/isapi/hello4.dll

Caller: H:/WINNT/system32/dllhost.exe

Done.




Link: http://www.asm32.net/article_disp.asp?ID=2784


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值