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