⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex31b.cpp

📁 《vc++技术内墓》 附带源码
💻 CPP
字号:
// EX31B.CPP - Implementation file for your Internet Server//    ex31b Filter#include "stdafx.h"#include "ex31b.h"#define WM_SENDTEXT WM_USER + 5///////////////////////////////////////////////////////////////////////// The one and only CWinApp object// NOTE: You may remove this object if you alter your project to no// longer use MFC in a DLL.CWinApp theApp;///////////////////////////////////////////////////////////////////////// The one and only CEx31bFilter objectCEx31bFilter theFilter;///////////////////////////////////////////////////////////////////////// CEx31bFilter implementationCEx31bFilter::CEx31bFilter(){}CEx31bFilter::~CEx31bFilter(){}BOOL CEx31bFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer){	// Call default implementation for initialization	CHttpFilter::GetFilterVersion(pVer);	// Clear the flags set by base class	pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK;	// Set the flags we are interested in	pVer->dwFlags |= SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT			 | SF_NOTIFY_READ_RAW_DATA;	// Load description string	TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];	ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),			IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN));	_tcscpy(pVer->lpszFilterDesc, sz);	// m_hWndDest, m_hProcessDest used by SendTextToWindow	m_hProcessDest = NULL;	if((m_hWndDest = ::FindWindow(NULL, "ex31b")) != NULL) {		DWORD dwProcessId;		GetWindowThreadProcessId(m_hWndDest, &dwProcessId);		m_hProcessDest = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 			dwProcessId);		SendTextToWindow("EX31B filter started\r\n");	}	return TRUE;}DWORD CEx31bFilter::OnReadRawData(CHttpFilterContext* pCtxt,	PHTTP_FILTER_RAW_DATA pRawData){	TRACE("CEx31bFilter::OnReadRawData\n");	// sends time/date, from IP, to IP, request data to a window	char pchVar[50] = "";	char pchOut[2000];	DWORD dwSize = 50;	BOOL bRet;	CString strGmt = CTime::GetCurrentTime().FormatGmt("%m/%d/%y %H:%M:%S \		GMT");	strcpy(pchOut, strGmt);	bRet = pCtxt->GetServerVariable("REMOTE_ADDR", pchVar, &dwSize);	if(bRet && dwSize > 1) {		strcat(pchOut, ", From ");		strcat(pchOut, pchVar);	}	bRet = pCtxt->GetServerVariable("SERVER_NAME", pchVar, &dwSize);	if(bRet && dwSize > 1) {		strcat(pchOut, ", To ");		strcat(pchOut, pchVar);	}	strcat(pchOut, "\r\n");	int nLength = strlen(pchOut);	// Raw data is not zero-terminated	strncat(pchOut, (const char*) pRawData->pvInData, pRawData->cbInData);	nLength += pRawData->cbInData;	pchOut[nLength] = '\0';	SendTextToWindow(pchOut);	return SF_STATUS_REQ_NEXT_NOTIFICATION;}void CEx31bFilter::SendTextToWindow(char* pchData){	if(m_hProcessDest != NULL) {		int nSize = strlen(pchData) + 1;		HANDLE hMMFReceiver;		HANDLE hMMF = ::CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, 			PAGE_READWRITE, 0, nSize, NULL);		ASSERT(hMMF != NULL);		LPVOID lpvFile = ::MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, nSize);		ASSERT(lpvFile != NULL);		memcpy((char*) lpvFile, pchData, nSize);		::DuplicateHandle(::GetCurrentProcess(), hMMF, m_hProcessDest, 			&hMMFReceiver, 0, FALSE, DUPLICATE_SAME_ACCESS | 			DUPLICATE_CLOSE_SOURCE);		::PostMessage(m_hWndDest, WM_SENDTEXT, (WPARAM) 0, 			(LPARAM) hMMFReceiver);		::UnmapViewOfFile(lpvFile);	}}// Do not edit the following lines, which are needed by ClassWizard.#if 0BEGIN_MESSAGE_MAP(CEx31bFilter, CHttpFilter)	//{{AFX_MSG_MAP(CEx31bFilter)	//}}AFX_MSG_MAPEND_MESSAGE_MAP()#endif	// 0///////////////////////////////////////////////////////////////////////// If your extension will not use MFC, you'll need this code to make// sure the extension objects can find the resource handle for the// module.  If you convert your extension to not be dependent on MFC,// remove the comments arounn the following AfxGetResourceHandle()// and DllMain() functions, as well as the g_hInstance global./****static HINSTANCE g_hInstance;HINSTANCE AFXISAPI AfxGetResourceHandle(){	return g_hInstance;}BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ulReason,					LPVOID lpReserved){	if (ulReason == DLL_PROCESS_ATTACH)	{		g_hInstance = hInst;	}	return TRUE;}****/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -