原创翻译 在Windows CE上实现一个全功能的webserver

蓝讯k歌宝不用系统音量同步,用音乐音量怎么与手机音量同步? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。 阅读详情

本文转载自微软嵌入式中文社区 www.msembed.com

 

 

摘要
当开发人员在Windows CE上实现一个webserver时,他们通常会想到要实现PC平台上的webserver有的大多数的功能。但是对于Windows CE IIS来说这不可行。Windows CE IIS对于有些功能特性不支持,例如过程标号(session ID).本文描述了如何通过互联网服务器应用程序编程接口(ISAPI)来实现这些功能特性。最后,文章用一个例子来说明如何来做这件事情。

结构图

 

Isapi扩展动态连接库
Windows CE IIS不支持Web服务器有时需要的两项功能,它们是
 

  • 事务间的状态(States between Transactions)
  • 过程标号的管理

 

ISAPI(Internet server application programming interface)扩展可以使我们支持这些特性。以下部分是怎样来实现。

 


ISAPI被开发出用来给应用程序开发人员一个有力的方法来扩展IIS的功能。为了生成Windows CE Web Server的ISAPI扩展,需要编译生成一个动态连接库,该动态连接库导出如下标准ISAPI入口:
GetExtensionVersion
HttpExtensionProc
TerminateExtension (可选)
  

 

GetExtensionVersion在动态连接库第一次被装载时被调用,HttpExtensionProc在每个接入请求来到时都被调用,TerminateExtension在动态连接库被卸载时被调用。和Web服务器的交互通过标准的ISAPI回调函数来进行,比如ReadClient和WriteClient等。
 

 

因为所有的请求都只被这个动态连接库处理,所以以下功能可以被实现:
 

  • 过程标号(Session Id)的管理
  • 提供登录认证
  • 发送定制化文件
  • 一些实时变量,例如CPU的温度、使用情况、风扇转速、连结的设备和IP设置等都可以轻松地通过调用对应的API而获得并嵌入页面中。
     

 

怎样装载ISAPI扩展动态连接库
 除了编译过程中加入web server组件外,还需加入以下的注册表项来实现动态连接库的自动装载:
[HKEY_LOCAL_MACHINE/COMM/HTTPD/VROOTS//]
  @="//windows//sampleisapi.dll"
"a"=dword: 0 ;用于移除认证
 Web服务器在收到来自任意客户端的一个请求后将装载此动态连接库。此动态连接库可以处理任意数量的客户端的请求。
 
 

被导出的函数
 HttpExtensionProc在每个请求到来后都被调用。对此请求的处理在此函数中进行。
 1.GetExtensionVersion
此函数在动态连接库第一次被装载时调用。

 

2.HttpExtensionProc

这是此动态连接库唯一重要的函数。此函数在每个请求到来后都被调用。GetServerVariable函数可以用来获得查询字符串值,根据收到的查询结果,用WriteClient 函数可以将相应的被请求文件写回到客户端。若需从客户端读取数据,可以使用ReadClient函数。
 此函数的原型如下:

DWORD WINAPI HttpExtensionProc (LPEXTENSION_CONTROL_BLOCK lpECB);

这里的 LPEXTENSION_CONTROL_BLOCK 被声明如下.:

typedef struct _ EXTENSION_CONTROL_BLOCK 
{

 

DWORD cbSize; 
DWORD dwVersion; 
HCONN ConnID; 
DWORD dwHttpStatusCode; 
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; 
LPSTR lpszMethod; 
LPSTR lpszQueryString; 
LPSTR lpszPathInfo; 
LPSTR lpszPathTranslated; 
DWORD cbTotalBytes; 
DWORD cbAvailable; 
LPBYTE lpbData; 
LPSTR lpszContentType; 
BOOL (WINAPI* GetServerVariable); 
BOOL (WINAPI* WriteClient); 
BOOL (WINAPI* ReadClient); 
BOOL (WINAPI* ServerSupportFunction);

} EXTENSION_CONTROL_BLOCK, LPEXTENSION_CONTROL_BLOCK;

3.TerminateExtension

此函数在动态连接库被卸载时调用。  

GetServerVariable
GetServerVariable函数被用来获取服务器变量,例如IP地址,查询字符串等。
1.原型
BOOL WINAPI GetServerVariable(HCONN hConn, LPSTR lpszVariableName, VOID lpvBuffer, LPDWORD lpdwSizeofBuffer );
 

 

2.参数
hConn
指定连结句柄。这是HttpExtensionProc函数的输入参数。
lpszVariableName

一个NULL结尾的字符串用以标明被请求的服务器变量。
lpvBuffer

指向接受被请求信息的缓冲区。
lpdwSizeofBuffer
指向一个DWORD变量,该变量表明了lpvBuffer指向的缓冲区的大小。在成功调用后,此DWORD值为传到缓冲区的字节数目,包括Null结尾字节。
一些可以用GetServerVariable函数来获取的重要变量如下:
PATH_INFO 由客户端给出的URL的尾部路径信息。
QUERY_STRING 指定了URL中的第一个问号后的信息。
REMOTE_ADDR 指定了客户端的IP地址。

实现示例
正如已经提到的,ISAPI扩展动态连接库的主要用途是管理过程标号(session id)和获得一些实时参数如IP地址设置等。

 


1.用字符串参数调用外部动态连接库并将返回结果插入到发送给客户端的HTML输出中
我们刚才已经提到,要发送给客户端的html和java脚本文件是在存储设备上已有的。现在在存储这些文件之前,一些特殊符号可以被包含在html文件中来提示ISAPI动态连接库这些符号应被替换为一些实时变量。例如以下格式可以被包含在html文件里
!!DllName!!FunctionName!!

 


例如如果你想显示设备的IP地址,你可以加入如下的符号序列来告诉ISAPI将此符号序列替换为IP地址。
!!NetStatusDll!!GetIPAddress!!

 


在将文件发送到客户端之前,ISAPI动态连接库会解析文件中的符号序列。当找到以上序列后,将替换序列中的DllName和FunctionName。装载动态连接库后将调用解析到的函数,并将序列替换为函数返回的字符串。在上面这个例子中,NetStatus.dll通过调用LoadLibrary API被装载,函数GetIPAddress的地址通过调用GetProcAddress API而获得,最后函数GetIPAddress被调用。

 


同样地,当使用者希望设置设备上的实时变量时,发出的消息数据也可以包含符号序列。例如如果使用者希望从远程客户端为设备设置IP地址时,带有DllName和FunctionName的符号序列可以被加入到点击网页上的某个按钮时发出的消息数据中。

 


2.管理过程标号
    可以生成下表来管理过程标号:

  IP地址

  过程标号

  最后的Tick数 (ms)

   176.234.11.23

   12avcdefdef

   10000

   23.123.45.6

   234rfvdadds

   23456

   145.67.89.90

   123456asdfg

   45678


 当从一个新的客户端(例如新的IP地址)收到请求后,一个随机过程标号被生成并分配给该IP地址,同时此标号被存入XML数据库中。不论什么时候从任何客户端收到请求后,该表中的数据将被检查,如果对应的客户端项已存在于表中,则网页内容将被发送至客户端。如果客户端项不存在,那么只有登录页面被发送至客户端。表中的最后Tick数可以用来判断过程是否超时。

 


 总结
 本文解释了Isapi扩展动态连接库的用法。Isapi扩展动态连接库多用于需要使用一些实时变量如CPU温度,IP地址设置等的网页文件中。

Cheat Engine ceserver 连接手机记录 电脑端的 cheat engine 7.5不显示任何内容。换一个 cheatengine 就好了 真神奇。 阅读详情

相关推荐

Cheat Engine7.5的CE-server文件(包含linux, android, x86,x86-64, arm64)

开启服务

什么是ISAPI扩展?

什么是ISAPI扩展? 翻译:misterliwei原文:What an ISAPI extension is?(http://www.codeproject.com/isapi/isapi_extensions.asp)介绍如果不是孤陋寡闻,在浏览某些网站时,你一定遇到过URL地址栏的结尾是一个脚本目录下的DLL文件,就像下面的这个假设的URL地址:http://www.

misterliwei的专栏 1万+

易语言IIS脚本解释器

易语言IIS脚本解释器源码系统结构:GetExtensionVersion,HttpExtensionProc, ======程序集1 || ||------_启动子程序 || ||------_临时子程序 || || ======ESP || ||------GetExtensionVersion || ||------HttpExtensionProc

ISAPI详细分析

ISAPI包括扩展和过滤器两种形式,都可以利用来开发动态动态Web内容。ISAPI扩展和过滤器都以DLL形式实现,供IIS进程调用。   扩展按规范必须实现两个函数接口:GetExtensionVersion、HttpExtensionProc和一个可选函数接口:TerminateExtension;扩展和Web服务器中特定虚拟目录下的文件类型关联,可以和特定的文件后缀,比如.txt关联,也

黑色幽默 5200

从solidworks导出URDF模型

一、下载sw_urdf_exporter插件 ROS目前提供了SolidWorks转URDF的插件,叫做sw_urdf_exporter,从http://wiki.ros.org/sw_urdf_exporter下载sw2urdfSetup.exe文件,下载后点击安装,安装完成后就能在solidworks中导出URDF模型了。 二、创建solidworks模型 下面以较为简单的四轮小车为例进行说...

weixin_45168199的博客 4万+

ASP.NET 3.5核心编程学习笔记(41):HTTP处理程序与HTTP模块

  HTTP处理程序是真正负责处理请求的组件,它实现了IHttpHandler接口。该接口的ProcessRequest方法是控制请求处理的“中央控制台”。如,Page类实现IHttpHandler接口,它的ProcessRequest方法负责加载和保存视图状态,还负责引发一些常见的事件(Init、Load、PreRender等)。   ASP.NET会将每个传入的HTTP请求映射到相应的HTT...

weixin_30468137的博客 204

Unity Shader学习笔记/Urp/水墨风效果

Unity Shader学习

qq_63133691的博客 2117

原创翻译 用gSOAP在Windows Embedded Compact (Windows CE)上架构webservice

本文转载自微软嵌入式中文社区 www.msembed.com  在本文中我将讨论怎样在Windows Embedded Compact设备上架构webservice。你当然可以在一个智能设备上用托管代码来访问webservice,但是不幸的是用托管代码在设备上来架构一个webservice是不可能的。所以让我们再回到古老但却好用的本机代码上来吧!  我将会使用gSOAP,一

WinCE7的专栏 1897

Unity资源逆向解析:从APK到AssetStudio的完整实战

本文详细介绍了Unity资源逆向解析的全流程,从APK解包到使用AssetStudio深度解析Unity游戏资源。通过实战案例演示如何提取《植物大战僵尸》等游戏的素材,包括贴图、音频和3D模型,帮助开发者掌握Unity游戏逆向工程的核心技术。

weixin_30664051的博客 475

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 174

AI工程师成长地图:从环境搭建到模型服务化的实战路径

AI工程师不是算法研究员的简化版,而是一个聚焦模型服务化、MLOps与工程落地的独立技术角色。其核心能力涵盖Docker容器化、CI/CD流水线、Triton模型部署、Airflow数据管道及业务指标对齐等工程实践。区别于理论导向的算法岗位,AI工程师需构建‘训练→部署→监控→迭代’闭环,确保模型在GPU显存受限、高并发、实时特征流等真实生产环境中稳定交付。关键词如MLOps、模型部署、Dockerfile优化、Airflow数据管道、Triton服务化,均指向工业级AI系统建设的关键能力。本文即围绕这些高

weixin_30435261的博客 400

【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用

【图像超分】论文精读:Image Super-Resolution Using Deep Convolutional Networks(SRCNN)请配合上述论文精读文章使用,效果更佳!图像超分辨率SRCNN和FSRCNN复现代码,除基本的网络实现外,还有特征图可视化,PSNR曲线图可视化,测试自己的图像数据等不想理解原理,希望直接跑通然后应用到自己的图像数据的同学,请直接下载上面的代码,有训练好的模型,直接用即可。具体使用方式见代码中的README!有问题来本文评论区留言!准备数据集,以及数据预处理。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 2万+

在android设备中CheatEngine(CE)环境的搭建

1.准备 首先,您需要有一台已经获得root权限的手机 或 Android 模拟器。 然后,我们需要下载Cheat Engine server,通常我们叫它 “ceserver”,点我下载ceserver。打开下载网址后,找到如下图所示的位置。请选择与你android设备对应的链接。如果你使用的是国内的一些电脑端的android模拟器,那么极有可能您需要下载x86版本的ceserver。如果您使用的是真实机,那么ARM 64-bit可能适用于你。 其次,您最好安装Android Studio.

THMAIL的博客 2万+

AgentScope Java 2.0 项目实战:教你完整搭建企业级多租户AI数据分析Agent平台

本文详细讲解如何从零开始构建一个企业级多租户AI数据分析Agent平台(agentscope-dataagent)。涵盖项目的环境准备、项目骨架搭建、后端15个核心模块开发(认证授权、Agent网关、会话管理、SSE流式聊天、能力市场、Webhook通道、Docker沙箱等)、前端完整开发(路由守卫、SSE流式读取、28个页面组件)、内置资源定义、构建打包、测试验证及单机/Docker/分布式部署全流程。

program哲学 598

【原理图PCB专题】Cadence 17.4版本原理图及PCB 模块复用

在我们设计复杂板卡的时候,往往会遇到一部分电路被反复使用的情况。Cadence允许设计者一开始就将复用模块设计好,以后只要直接调用复用模块就可以直接用以设计更复杂的电路板了。这对于大规模集成设计无疑是非常好的选择,它不仅让设计者不必花费时间在相同模块反复设计上,更有利于电路的模块化设计。

一点硬件 2017

最给力的微软嵌入式“有奖调查”,

<br />最给力的微软嵌入式“有奖调查”,每月一期,赢取微软背包和无线鼠标:http://www.winitpro.com.cn/event/WindowsEmbedded/Regeist.aspx<br />微软嵌入式中文社区全新改版上线,新网站地址:www.msembed.com<br />l   新增嵌入式技术视频下载,让您更直观的了解嵌入式技术与业界趋势。<br />l   微软嵌入式电子期刊,带给您每月最新的微软嵌入式技术文章与解决方案。<br />l   新增嵌入式展厅,让您了解最新的采用微软

fujiyapeka的专栏 490

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

想拥有最新的微软嵌入式技术 就赶快加入微软嵌入式专家社区吧!

微软嵌入式专家社区成立啦! 微软嵌入式专家社区MSEmbed (http://www.msembed.com/),由微软嵌入式团队与Windows IT Pro(简称WinITPro)联袂打造。旨在聚集国内最好的微软嵌入式方面的爱好者,构建国内高水平的微软嵌入式技术交流组织,向广大的IT专业人士介绍微软嵌入式产品及行业解决方案。 大家在社区里将会学习和掌握到 最新的微软嵌入式...

weixin_33763244的博客 135

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【亲测免费】 Frida-Ceserver 使用教程

Frida-Ceserver 使用教程 项目介绍 Frida-Ceserver 是一个基于 Frida 的 ceserver,它融合了 Cheat Engine 和 Frida。该项目由 Dark Byte 原创,支持多种平台,包括 Windows、Mac(新版)、iOS、Android 和 Linux。Frida-Ceserver 主要用于内存分析和调试,实现了基于 lldb 的调试器,支持 i...

gitblog_00325的博客 1796

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用CE查找Android中变量的偏移

学习逆向联系QQ1847076032 QQ群692903341 0x00 准备工作 下载Cheat Engine以及调试器服务端:https://www.cheatengine.org/index.php 夜神模拟器:https://www.yeshen.com/ 下载安装贪婪洞窟(梦境模式):http://a.4399.cn/game-id-94656.html 0x01 CE远程挂接模拟...

YJJYXM的博客 5207

如何在MuMu模拟器12上使用Cheat Engine

部分用户在使用MuMu模拟器12的过程中,会需要使用Cheat Engine进行如监控内存变化跟踪逻辑等操作。如何在MuMu模拟器12上使用Cheat Engine呢?Mu酱为大家带来如下教程,让大家快速上手~

2403_86891960的博客 2744
上一篇: 原创翻译 怎样让WinCE6.0 ARM套件下的USB摄像头工作
下一篇: 原创翻译 Windows Embedded Compact 7: 带有ActiveSync的Silverlight Shell
巴斯滕
博客等级 码龄16年 319粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值