WINCE ISAPI CGI ASP 小结

本文介绍如何在Windows CE系统中利用ISAPI实现在网页上动态修改设备IP地址的功能。通过修改tracker.dll文件并加入注册表操作,实现了通过特定URL请求即可更改设备IP的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过多天的努力 终于搞定了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

002

主要修改的的是以上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;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值