WINCE ISAPI CGI ASP 小结

经过多天的努力 终于搞定了ISAPI 并不是完全搞定 符合自己的需求了

目前先写这些 看不懂的话 留言 我只会WINCE6.0 PB用的是6 其他的不懂了

需求WINCE 里面搭建个类似IIS 发布网站 做类似路由的网页 更改IP或者其他的

方式1、 用CGI 必须移植goahead

方式2、 用ISAPI 系统添加组件后支持

方式3、 COM组件

我用的是ISAPI方式实现的

WINCE 自带web服务器 但是不支持ASP 所以添加组件让他来支持ASP

参考 http://zxffl.blog.163.com/blog/static/25909762010102475353451/ wince6.0 web开发

图1

WINCE ISAPI CGI ASP 小结

002

WINCE ISAPI CGI ASP 小结

主要修改的的是以上2个图的内容

这个是tracker.dll

咱们自己修改tracker.dll中的内容

例如

看这里 判断URL中有没有修改IP 有的话自己修改了 这里用的是修改注册表的方法

if (strstr(lpEcb->lpszQueryString,"修改IP"))
	{
		//此处写修改IP的代码
// Dump the log
		strcpy(outbuf, "content-type: text/html\r\n\r\n");
		outbuflen = strlen(outbuf);
		lpEcb->ServerSupportFunction(lpEcb->ConnID,
			                         HSE_REQ_SEND_RESPONSE_HEADER,
									 NULL,
									 &outbuflen,
									 (LPDWORD)outbuf);

		
		LPCTSTR lp_Path=TEXT("Comm\\DM9CE1\\Parms\\TcpIp");
		LPCTSTR lp_Key=TEXT("IpAddress");
		LPCTSTR lp_Val=TEXT("192.168.1.235");
		bool bOk=false;
		HKEY hKEY;
		DWORD type_1=REG_SZ; 
		long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lp_Path, 0, KEY_WRITE,&hKEY)); 
		if(ret0==ERROR_SUCCESS) 
		{ 
			long ret1=::RegSetValueEx(hKEY, lp_Key, NULL, type_1, (LPBYTE)lp_Val, 100); 
			if(ret1==ERROR_SUCCESS) 
			{			
				::RegCloseKey(hKEY);
				bOk=true;
			} 			
		} 
		if (bOk)
		{

			strcpy(outbuf,"<HTML><TITLE>IIS Tracker Log    zhangsan</TITLE></HTML> \n\
							   <H1>192.168.1.235 修改成功</H1> \n\
							   <hr>\n");
		}
		else
		{

			strcpy(outbuf,"<HTML><TITLE>IIS Tracker Log    zhangsan</TITLE></HTML> \n\
							   <H1>修改IP失败</H1> \n\
							   <hr>\n");
		}

		strlen(lp_Path);




		//strcpy(outbuf,"<HTML><TITLE>IIS Tracker Log    zhangsan</TITLE></HTML> \n\
		//				   <H1>IIS Tracker Log   2012-0315</H1> \n\
		//				   <hr>\n");


		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
		                   outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);

		EnterCriticalSection(&LogCS);
		if (pLogStart > pLogStop)
		{
			DWORD firstbuflen = ((DWORD)pLogBuff + dwLogBuffSize) - (DWORD)pLogStart;
			DWORD secondbuflen = (DWORD)pLogStop - (DWORD)pLogBuff;
			DWORD outbuflen = firstbuflen + secondbuflen;

			char *pOutput = (char*)HeapAlloc(GetProcessHeap(), 0, outbuflen);
			memcpy(pOutput, pLogStart, firstbuflen);
			memcpy(pOutput + firstbuflen, pLogBuff, secondbuflen);
			LeaveCriticalSection(&LogCS);
			lpEcb->WriteClient(lpEcb->ConnID,
				               pOutput,
							   &outbuflen,
							   HSE_IO_SYNC);
			HeapFree(GetProcessHeap(), 0, pOutput);
		}
		else
		{
			outbuflen = (DWORD)pLogStop - (DWORD)pLogStart;
			char *pOutput = (char*)HeapAlloc(GetProcessHeap(), 0, outbuflen);
			memcpy(pOutput, pLogStart, outbuflen);
			LeaveCriticalSection(&LogCS);
			lpEcb->WriteClient(lpEcb->ConnID,
				               pOutput,
							   &outbuflen,
							   HSE_IO_SYNC);
			HeapFree(GetProcessHeap(), 0, pOutput);
		}		
		strcpy(outbuf, "\n</html>");
		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
			               outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);
		return HSE_STATUS_SUCCESS;



	}


	if (strstr(lpEcb->lpszQueryString, "View"))
	{
		// Dump the log
		strcpy(outbuf, "content-type: text/html\r\n\r\n");
		outbuflen = strlen(outbuf);
		lpEcb->ServerSupportFunction(lpEcb->ConnID,
			                         HSE_REQ_SEND_RESPONSE_HEADER,
									 NULL,
									 &outbuflen,
									 (LPDWORD)outbuf);

		strcpy(outbuf,"<HTML><TITLE>IIS Tracker Log</TITLE></HTML> \n\
						   <H1>IIS Tracker Log</H1> \n\
						   <hr>\n");
		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
		                   outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);

		EnterCriticalSection(&LogCS);
		if (pLogStart > pLogStop)
		{
			DWORD firstbuflen = ((DWORD)pLogBuff + dwLogBuffSize) - (DWORD)pLogStart;
			DWORD secondbuflen = (DWORD)pLogStop - (DWORD)pLogBuff;
			DWORD outbuflen = firstbuflen + secondbuflen;

			char *pOutput = (char*)HeapAlloc(GetProcessHeap(), 0, outbuflen);
			memcpy(pOutput, pLogStart, firstbuflen);
			memcpy(pOutput + firstbuflen, pLogBuff, secondbuflen);
			LeaveCriticalSection(&LogCS);
			lpEcb->WriteClient(lpEcb->ConnID,
				               pOutput,
							   &outbuflen,
							   HSE_IO_SYNC);
			HeapFree(GetProcessHeap(), 0, pOutput);
		}
		else
		{
			outbuflen = (DWORD)pLogStop - (DWORD)pLogStart;
			char *pOutput = (char*)HeapAlloc(GetProcessHeap(), 0, outbuflen);
			memcpy(pOutput, pLogStart, outbuflen);
			LeaveCriticalSection(&LogCS);
			lpEcb->WriteClient(lpEcb->ConnID,
				               pOutput,
							   &outbuflen,
							   HSE_IO_SYNC);
			HeapFree(GetProcessHeap(), 0, pOutput);
		}
		strcpy(outbuf, "\n</html>");
		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
			               outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);
		return HSE_STATUS_SUCCESS;
		
	}
	if (strstr(lpEcb->lpszQueryString, "Clear"))
	{
		EnterCriticalSection(&LogCS);
		pLogStart = pLogStop = pLogBuff;
		LeaveCriticalSection(&LogCS);
		Stamp(0);
		strcpy(outbuf, "<FONT SIZE=+2> Log cleared.</FONT>\n");
		LogWrite(outbuf, strlen(outbuf));
		LogConfig();
		strcpy(outbuf, "content-type: text/html\r\n\r\n");
		outbuflen = strlen(outbuf);
		lpEcb->ServerSupportFunction(lpEcb->ConnID,
			                         HSE_REQ_SEND_RESPONSE_HEADER,
									 NULL,
									 &outbuflen,
									 (LPDWORD)outbuf);

		strcpy(outbuf,"<HTML> \n\
                        <HEAD> \n\
                        <TITLE>IIS Tracker Utility</TITLE> \n\
                        </HEAD> \n\
                        <BODY> \n\
                        <H1>IIS Tracker Utility</H1> \n\
						<H2>Log Successfully Cleared</H2>\n");
		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
		                   outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);
		ShowConfig(lpEcb);
		strcpy(outbuf, "</BODY></HTML>");
		outbuflen = strlen(outbuf);
		lpEcb->WriteClient(lpEcb->ConnID,
		                   outbuf,
						   &outbuflen,
						   HSE_IO_SYNC);
		return HSE_STATUS_SUCCESS;
	}


你可能感兴趣的:(WinCE)