wince服务编写方法

WinCE平台高速WiFi实现方法 ETA6210简介     ETA6210是一款标准mini PCIe尺寸的WiFi通讯模块,模块核心芯片为NXP的iMX6UL和AP6181 WiFi芯片。ETA6210主要是与英创公司WINCE工控主板配套使用,实现高速WiFi通讯,模块支持应用程序WinSock编程。英创工控主板是通过mini PCIe上的USB接口来操作ETA6210模块的。在实际应用中,ETA6210是插在客户底板的... 阅读详情
wince服务与windows pc服务有区别,是将服务写成dll的形式,在注册表中配置项,然后系统自启动时加载.
下面是示例

1. 编写dll文件,实现几个方法


//写日志组件

CSTLogFile* Logger = CSTLogFile::GetLogFile();


// Handle to the worker thread

HANDLE g_hWorkerThread = NULL;
bool m_bRunning = false;


DWORD m_nThreadId = 0;


extern "C" BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD fdwReason, LPVOID lpvReserved) 
{
switch (fdwReason) 
{
case DLL_PROCESS_ATTACH:

break;

case DLL_PROCESS_DETACH:

break;
}
    return TRUE;
}


//服务启动时要做的事,示例中在这里启动写文件线程
extern "C" LIBAPI DWORD FIN_Init(DWORD dwData) 
{
     //初始化
     m_bRunning = true;

     g_hWorkerThread = CreateThread(NULL,0,FingerWorker,NULL,0,(LPDWORD)&m_nThreadId);

     return 1;
}

//停止服务时要做的事情
extern "C" LIBAPI BOOL FIN_Deinit(DWORD dwData) 
{   
    //停止线程
    m_bRunning = false;

    WaitForSingleObject(g_hWorkerThread,INFINITE);

    CloseHandle(g_hWorkerThread);

    g_hWorkerThread = NULL;
    
    return 1;
}

extern "C" LIBAPI DWORD FIN_Open (DWORD dwData, DWORD dwAccess, 
  DWORD dwShareMode)
{
return 1;
}

extern "C" LIBAPI BOOL FIN_Close (DWORD dwData) 
{
return TRUE;
}

extern "C" LIBAPI BOOL FIN_IOControl(DWORD dwData, DWORD dwCode, PBYTE pBufIn,
             DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut,
             PDWORD pdwActualOut)
{
        
switch (dwCode) 
{
// Control code sent to start a service.  (services start FIN0:)
case IOCTL_SERVICE_START:

//Logger->Write("IOCTL_SERVICE_START--------\n");

break;

// Control code sent to refresh a service. (services refresh FIN0:)
case IOCTL_SERVICE_REFRESH:

break;

// Control code sent to stop a service.  (services stop FIN0:)
case IOCTL_SERVICE_STOP:

//Logger->Write("IOCTL_SERVICE_STOP--------\n");

break;    

// An application (possibly services.exe itself) is 
// querying for the service's running state.
case IOCTL_SERVICE_STATUS:

break;

default:

;

break;
}
return TRUE;
}

extern "C" LIBAPI DWORD FIN_Read(DWORD dwData,LPVOID pBuff, DWORD dwLen)
{
return 0;
}


extern "C" LIBAPI DWORD FIN_Seek(DWORD dwData,LONG pos,DWORD type)
{
return 0;
}


extern "C" LIBAPI DWORD FIN_Write(DWORD dwData,LPCVOID pInBuf,DWORD dwInLen)
{
return 0;
}

//用于向文件写日志的方式测试
extern "C" DWORD WINAPI FingerWorker(LPVOID lpv)
{
while(m_bRunning)
{
Logger->Write("Test Logs------------\n");
Sleep(5000);
}
return 0;
}


2. 填加注册表项
2.1 
void CRegEditDlg::OnBnClickedButtonWrite()
{
HKEY RootKey = HKEY_LOCAL_MACHINE;
HKEY hKey;
//打开主键,没有则创建
CString strSubKey = _T("\\Services\\FinServ");
DWORD dw;
long nRet = RegCreateKeyEx(RootKey,strSubKey,0,REG_NONE,REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,&hKey,&dw);
if(nRet != ERROR_SUCCESS)
{
return;
}
int tsize = sizeof(TCHAR);
//设置键值
LPCTSTR buff = _T("\\Flash Disk\\TestService\\WinCEService.dll");
int length = _tcslen(buff)*tsize;
nRet = RegSetValueEx(hKey,_T("Dll"),0,REG_SZ,(LPBYTE)buff,length);
if(nRet != ERROR_SUCCESS)
{
return;
}

dw = 8;
RegSetValueEx(hKey,_T("Order"),0,REG_DWORD,(LPBYTE)&dw,sizeof(DWORD));
if(nRet != ERROR_SUCCESS)
{
return;
}

dw = 1;
RegSetValueEx(hKey,_T("Keep"),0,REG_DWORD,(LPBYTE)&dw,sizeof(DWORD));
if(nRet != ERROR_SUCCESS)
{
return;
}

buff = _T("FIN");
length = _tcslen(buff)*tsize;
RegSetValueEx(hKey,_T("Prefix"),0,REG_SZ,(LPBYTE)buff,length);
if(nRet != ERROR_SUCCESS)
{
return;
}

dw = 0;
RegSetValueEx(hKey,_T("Index"),0,REG_DWORD,(LPBYTE)&dw,sizeof(DWORD));
if(nRet != ERROR_SUCCESS)
{
return;
}

        dw = 0;
RegSetValueEx(hKey,_T("Context"),0,REG_DWORD,(LPBYTE)&dw,sizeof(DWORD));
if(nRet != ERROR_SUCCESS)
{
return;
}

buff = _T("wince service");
length = _tcslen(buff)*tsize;
RegSetValueEx(hKey,_T("DisplayName"),0,REG_SZ,(LPBYTE)buff,length);
if(nRet != ERROR_SUCCESS)
{
return;
}

buff = _T("Sample Wince Service");
length = _tcslen(buff)*tsize;
RegSetValueEx(hKey,_T("Description"),0,REG_SZ,(LPBYTE)buff,length);
if(nRet != ERROR_SUCCESS)
{
return;
}
}
2.2 删除注册表项
void CRegEditDlg::OnBnClickedButtonDel()
{
HKEY RootKey = HKEY_LOCAL_MACHINE;
CString strSubKey = _T("\\Services\\FinServ");
//找到该键,删除
LONG nRet = RegDeleteKey(RootKey,strSubKey);
if(nRet != ERROR_SUCCESS)
{
MessageBox(_T("删除注册表失败!"));
}
else
{
MessageBox(_T("删除注册表成功!"));
}
}

3. 启动和中止服务(这里是手动停止和中止服务,设置好注册表项和文件后位置后,系统启动时可以自动加载)


3.1 启动服务
HANDLE hService = RegisterService(_T("FIN"),0,_T("\\Flash Disk\\TestService\\WinCEService.dll"),NULL);
if(hService == NULL)
{
CString strMsg;
strMsg.Format(_T("GetLasterror: %d"), GetLastError());
AfxMessageBox(strMsg);
return;
}

注意:注意服务文件的路径,如果在Windows目录可以不指定前面的路径.

3.2 停止服务
void CRegEditDlg::OnBnClickedButtonStop()
{
//停止服务
HANDLE hService = GetServiceHandle(_T("FIN0:"),NULL,NULL);
if(hService !=INVALID_HANDLE_VALUE)
{
DeregisterService(hService);
}
else
{
CString strMsg;
strMsg.Format(_T("GetLasterror: %d"), GetLastError());
AfxMessageBox(strMsg);
}
}
     
RestSharp 支持4.0、3.5、net4-client、net35-client(找了很久) dll支持4.0、3.5、net4-client、net35-client,找了很久,才发现一个真正可用的,大家注意看我发的版本。 立即下载

相关推荐

RestSharp最新开发包

最新的restsharp,直接解压放到工程目录下即可,有用拿走

MDL

 DriverEntry函数:代码:pDriverObject^.MajorFunction[IRP_MJ_CREATE]         := @DispatchCreateClose;pDriverObject^.MajorFunction[IRP_MJ_CLEANUP]        := @DispatchCleanup;pDriverObject^.MajorFuncti

SDNHELIXIN的专栏 3847

HTTP辅助类组件RestSharp.dll文件

Http辅助类组件RestSharp。使用简单,只用到RestClient和RestRequest两种类型,同时支持上传文件

RestSharp使用说明

翻译自:https://github.com/restsharp/RestSharp/wiki,转载请注明。 一、新手入门 如果只有少量一次性请求需要封装为API,则可以如下使用RestSharp : using RestSharp; using RestSharp.Authenticators; var client = new RestClient(); client.BaseUr...

weixin_30911809的博客 2032

WinCE通讯之Web Service

终端设备是通过GPRS来进行数据传输的,因此,数据流量是非常重要的问题,应当尽可能少的减少数据传输,流量可是Money,压缩技术是关键

RestSharp稳定版

RestSharp稳定版,保证可用。本人亲自试验!dll支持4.0、3.5、net4-client、net35-client,找了很久,才发现一个真正可用的,大家注意看我发的版本。

wince 编写服务程序

Pocket PC 服务 发布日期: 3/9/2005 | 更新日期: 3/9/2005 Victor Sharov and Vassili Philippov Spb Software House 适用于: Windows Mobile 2003 Software

liguosheng的专栏 4282

RestSharp支持Http请求

wince 使用RestSharp 支持Http方式、速度快。还有json包

Wince中的服务变化

这里所说的服务就是字面上所表达的意思,不过从wince5=>wince6=>wince6 r3有一些变化,引用微软的原文(引用一)如下: Servicesd.exe is a process that acts as a host to service dynamic-link libraries (DLLs). Long-running services that do not need di

alien75的专栏 1187

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 226

ArcGIS拓扑面错误批量修改

在工作学习中经常会遇到拓扑修改的问题,当数据量巨大的时候会产生拓扑问题 当拓扑错误数量巨大时,人工逐一修改是不现实的,基于此利用gis自带工具箱实现拓扑面类错误的批量修改。 一、.常见拓扑错误的类型: 1面重叠 2空隙(绿色部分) 二、拓扑检查 1新建数据库-----新建数据集—导入数据. 2新建拓扑 3修改拓扑容差及名称 添加拓扑修改规则 完成拓扑检查-查看拓扑错误 三、拓扑批量...

qq_43173805的博客 3万+

wince 上面搭建web server

 在wince 上面搭建web server,找了n多资料,最后咨询一下英创的技术支持,发现EM9620上面有自带的web server,通过编写COM组件+ASP就可以实现特定的功能,顺带还发现了wince自带的ftp服务器,以后调试程序有福了,不用再用效率低的要死的telnet或者evc的remote file view了。 文章链接:ARM9工控板在远程监控中的应用之一---利用

paubljp的专栏 945

OpenWRT软件源更换保姆级教程:从国内镜像到官方源一键切换(含常见报错解决)

本文提供OpenWRT软件源更换的详细教程,涵盖从国内镜像源到官方源的切换方法,并深度解析常见报错解决方案。针对国内网络环境,指导用户如何精准定位系统信息、备份配置、选择并配置清华等国内镜像源,以及处理签名验证失败、依赖缺失、404错误等典型问题,旨在提升软件包管理效率与稳定性。

weixin_29229261的博客 1942

WinCE驱动开发问题精华集锦

1、在应用程序中,如何向修改本机的ip 地址等网络参数,并使之立即生效? 网络设置保存在注册表中,位置[HKEY_LOCAL_MACHINE/Comm/网卡名称/Parms/TcpIp],例如常见的CS8900网卡设置: [HKEY_LOCAL_MACHINE/Comm/CS89001/Parms/TcpIp] "EnableDHCP"=dword:0 "DefaultGateway"="192.

GaryLiu1104的专栏 1359

R语言clusterProfiler实战:GO与KEGG富集分析从入门到精通

本文提供了一份详尽的R语言clusterProfiler实战指南,从环境配置、数据导入、基因ID转换到GO与KEGG富集分析及可视化,手把手教你解读生物学意义。文章重点介绍了如何利用clusterProfiler这一强大工具,将差异基因列表转化为清晰的生物学通路与功能故事,并分享了结果解读、可视化以及处理非模式生物等进阶技巧与避坑指南。

weixin_29044713的博客 162

海康威视工业相机SDK二次开发实战:多相机同步采集与图像存储

本文详细介绍了海康威视工业相机SDK二次开发实战,包括多相机同步采集与图像存储的优化方案。通过MVS软件搭建开发环境,实现硬件与软件触发同步采集,并提供高效的图像存储管理技巧,帮助开发者提升工业视觉项目的效率与稳定性。

weixin_29168813的博客 666

WinCE驱动开发问题精华集锦(一)

WinCE驱动开发问题精华集锦(一) 2010年11月14日   在mediaplayer全屏播放的时候,我可以用键盘上的某一个键调节声音大小,现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当 声音变大在屏幕上就增多,当声音变小的时候就减少 [b]得到播放窗口的DC,然后在上面显示一个不同颜色的矩形或者其它形状。 [b][b]在ce自制平台中如何添加自己的驱动?cec文...

yng02yng 165

解决k8s核心组件calico pod资源不创建问题

解决k8s核心组件calico pod资源不创建问题 1.问题描述 由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示 calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复 但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的 2.解决方法 期初排查时,我觉得可能是由于当前master

江晓龙的博客 4808

WinCE驱动编写 小结

1、基础知识:1)系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来硬件只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动是内核的一部分。2)驱动程序完成以下功能:——对设备初始化和释放;——把数据从内核传送到硬件和从硬件读取数据;——读取应用程序传送给设备文

@塘外人 4332

APP爬虫:Airtest的使用和爬取实战详解

Airtest是一个跨平台的自动化测试工具,主要用于移动应用和游戏的UI自动化测试。它支持图像识别、触摸操作、文本输入等功能,能够模拟真实用户的操作行为。此外,Airtest还具备强大的日志记录和报告生成功能,方便开发者进行调试和分析。图像识别:通过截图匹配元素,无需依赖 UI 层次结构。跨平台支持:支持 Android、iOS 和 Windows 应用。简单易用:提供 IDE 和脚本录制功能,降低使用门槛。

数据知道的博客 9620

基于YOLOv13+CBAM注意力机制

本教程详细介绍了CBAM注意力机制的原理及其在YOLOv13中的集成方法。CBAM通过通道注意力和空间注意力两个模块,动态调整特征权重以增强模型性能。通道模块利用池化操作和共享MLP生成通道权重,空间模块则通过池化和卷积生成空间权重。教程提供了在YOLOv13中实现CBAM的具体步骤,包括模块代码定义、模型配置修改等关键环节,帮助开发者在目标检测任务中提升模型表现。

FJN110的博客 306

WINCE EBOOT的配置方法

-------------------------------------------------------------------------------------------------------------------------------------- EBOOT是WINCE调试的好工具,在EBOOT上我也走了不少弯路,现将成功的经验与大家分享,希望能给有需要的人一点帮助!---S

sunwill_chen的专栏 1972

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WinCE的LCD驱动程序编写指南

WinCE的LCD驱动程序编写指南转载自:http://blog.chinaunix.net/u1/58373/showart_459285.html    本文以1024*768分辨率的TFT_16BPP真彩LCD为例,说明在WIN CE 4.2中驱动程序的修改事项,目标板的微处理器是S3C2410A。

DM_man的专栏 745

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCE系统中WINFORM的按键事件的使用方法简介

WINCE系统中WINFORM的按键事件的使用方法简介 最近开始接触winform编写的WINCE系统运行的程序。 一般情况下,PDA界面比较小,WINCE自带的键盘输入太不方便,所以wince系统运行的PDA均有按键。一般按键,如,数字0-9,字母A-Z系统均可以自动识别,一些特殊的按键事件,系统并不能作出我们希望得到的动作,所以,在编写的程序中,为了提高用户体验,我们可以添加一些按键事件的

Tata_ZMJ的工作心得 3019
上一篇: wince与pc连接同步出错解决方法
下一篇: 多个目录Makefile编写模板
ComputerInBook
博客等级 码龄19年 1168粉丝 464原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值