如是,谢谢

解决方案 »

  1.   

    IISAPI过滤器和扩展跟普通DLL没有什么分别.
      

  2.   

    如果处理请求
    需要填充OnPreprocHeaders;我很久前的程序.
    static char sResulta[]=".asp";
    //static char sResultm[]=".";
    //static char sResult1[]=".";
    //static char sResult2[]=".";
    //static char sResult3[]=".";
    //static char sResult4[]=".";
    static char sResultw[]="/khgl/";
    DWORD CFFDFilter::OnPreprocHeaders(CHttpFilterContext* pCtxt,
    PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo)
    {
    // TODO: React to this notification accordingly and
    // return the appropriate status code
    char buffer[1024];
    DWORD bufferSize=sizeof(buffer);
    pHeaderInfo->GetHeader(pCtxt->m_pFC,"url",buffer,&bufferSize);
    char *pResulta=strstr(buffer,sResulta);
    //char *pResultm=strstr(buffer,sResultm);//主界面
    //char *pResult1=strstr(buffer,sResult1);//主界页框1
    //char *pResult2=strstr(buffer,sResult2);//主界面页框2
    //char *pResult3=strstr(buffer,sResult3);//主界面页框3
    //char *pResult4=strstr(buffer,sResult4);//主界面页框4
    char *pResultw=strstr(buffer,sResultw);//要加密过滤的网站名
    if(pResulta!=NULL 
    // &&pResultm==NULL
    // &&pResult1==NULL
    // &&pResult2==NULL
    // &&pResult3==NULL
    // &&pResult4==NULL
    &&pResultw!=NULL
    )
    {
    if(g_delfilename.IsEmpty()==0)
    {
    CFile::Remove(g_delfilename);
    }
    else
    {
    }
    // pHeaderInfo->SetHeader(pCtxt->m_pFC,"url","/Error_zgy.htm");
    //解密代码开始位置
    CFile rf;
    CFileException re;
    CFile jf;
    CFileException je;
    //密匙
    short int ms[24]={9,8,8,2,1,5,6,1,1,1,6,8,6,2,3,8,9,4,5,9,8,4,0,1};
    //9882156,111686,23894598,401;
    CString m_filepath;
    m_filepath.Empty();
    CString m_filevalue;
    m_filevalue.Empty();
    m_filevalue.ReleaseBuffer();
    int iLen;
    iLen=0;
    CString m_addfilename;
    m_addfilename.Empty();
    CString m_addfilevalue;
    m_addfilevalue.ReleaseBuffer();
    m_filepath=buffer;
    int iLf=pResulta-buffer;
    m_filepath.Replace("/","\\");
    m_filepath="e:\\gjd"+m_filepath.Left(iLf)+".167";
    if(rf.Open(m_filepath,CFile::modeRead,&re)!=0)
    {
    iLen=(int)rf.GetLength();
    short int *pBuffer=new short int[iLen];
    rf.Read(pBuffer,iLen);
    rf.Close();
    m_addfilename=buffer;
    int iLd=pResulta-buffer;
    m_addfilename.Replace("/","\\");
    m_addfilename="e:\\gjd"+m_addfilename.Left(iLd)+".asp";
    if(jf.Open(m_addfilename,CFile::modeWrite|CFile::modeCreate,&je)!=0)
    {
    g_delfilename=m_addfilename;
    //解密处理
    int i=0;
    short int iRand=11;
    int j=0;
    while(i<iLen/2)
    {
    short int hTemp;
    hTemp=*pBuffer;
    char pTemp;
    if(j==24)
    {
    j=0;
    }
    pTemp=(char)((short int)hTemp/(ms[j]+iRand));
    jf.Write(&pTemp,sizeof(char));
    pBuffer++;
    i++;
    j++;
    }
    jf.Close();
    m_filepath.Empty();
    m_filevalue.Empty();
    m_filevalue.ReleaseBuffer();
    m_addfilename.Empty();
    m_addfilevalue.Empty();
    m_addfilevalue.ReleaseBuffer();
    //delete pBuffer;
    pHeaderInfo->SetHeader(pCtxt->m_pFC,"url",buffer);
    return SF_STATUS_REQ_NEXT_NOTIFICATION;
    }
    else
    {
    return SF_STATUS_REQ_ERROR;
    }
    }
    else
    {
    return SF_STATUS_REQ_ERROR;
    }
    //解密代码结束
    }
    else
    {
    return SF_STATUS_REQ_NEXT_NOTIFICATION;
    }
    }
      

  3.   

    如果要操作虚拟路径之类,可以查看C:\Inetpub\iissamples\sdk\admin目录下的js文件.