总结一下mobile下dll加载不上这几天的尝试的情况。。。

本文详细记录了解决Windows Mobile平台下dll自启动问题的过程,包括数字签名、证书制作、降低设备安全等级等多个步骤,最终实现dll在设备开机时自动加载。

 首先给出我的dll

#include "stdafx.h"
#include "T21Service.h"
HINSTANCE g_hInst;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		g_hInst = (HINSTANCE)hModule;
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
    return TRUE;
}

// 这是导出变量的一个示例
T21SERVICE_API int nT21Service=0;

// 这是导出函数的一个示例。
T21SERVICE_API int fnT21Service(void)
{
	return 42;
}

// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 T21Service.h
CT21Service::CT21Service()
{ 
	return; 
}

//
//DWORD WINAPI ThreadProc(LPVOID pArg)
//{
//	g_nTimer = SetTimer(0,0, 10 * 1000, )
//}

//初始化
T21SERVICE_API DWORD ZZY_Init(DWORD dwData)
{

	//RETAILMSG(1,(_T("初始化的参数 %d\r\n"), dwData));
	return 1;
}
//卸载
T21SERVICE_API DWORD ZZY_Deinit(DWORD dwData)
{
	RETAILMSG(1,(_T("卸载的参数 %d\r\n"), dwData));
	return 0;
}
//打开
T21SERVICE_API DWORD ZZY_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
	return 0;
}
//关闭
T21SERVICE_API DWORD ZZY_Close(DWORD dwData)
{
	return 0;
}
//读
T21SERVICE_API DWORD ZZY_Read(DWORD dwData, LPVOID pBuf, DWORD dwLen)
{
	return 0;
}
//写
T21SERVICE_API DWORD ZZY_Write(DWORD dwData, LPVOID pBuf, DWORD dwLen)
{
	return 0;
}
//io控制
T21SERVICE_API DWORD ZZY_IOControl(DWORD dwData, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)
{
	//switch(dwCode)
	//{
	//case 0x1234:
	//	RETAILMSG(1,(_T("服务器开启\r\n")));
	//	break;
	//case IOCTL_SERVICE_STOP:
	//	RETAILMSG(1,(_T("服务器停止\r\n")));
	//	break;
	//case IOCTL_SERVICE_REFRESH:
	//	RETAILMSG(1,(_T("刷新\r\n")));
	//	break;
	//default:
	//	break;

	//}
	return 1;
}

T21SERVICE_API DWORD ZZY_Seek(DWORD dwData, long pos, DWORD type)
{
	return 0;
}


然后说出出现的问题:

 

我在platform.reg中加入了自己的注册表项,在platform.bib中加入了dll的路径。然后makimg,烧到板子上,本以为他会自启动,没想到给出的却是trust = 0;也就是没有加载上。

然后我开始解决问题:

看到网上很多人说没有数字签名。然后就想着如何去签名:

首先是mobile文档上面的:

1. On the Project menu, click Properties.  
2. Click Authenticode Signing.  
3. For the Authenticode Signature property, click Yes.  
4. For the Certificate property, click the Ellipses (...) button.  
In the Select Certificate dialog box, do one of the following:  
>> If the certificate you want appears in the list, select it, and then click OK.  
>> If the certificate you want does not appear in the list, click Manage Certificates to open the Manage Certificates dialog box. Use this dialog box to import one of the SDK certificates (or import the certificate an OEM or mobile operator gave you as part of its developer program).  

Note:   
Be sure to use the *.pfx file, not the *.cer file.   

On the Authenticode Signing page, click OK.


尝试了,设置为:

Go to the project properties under the "Authenticode Signing" and set:

Authenticode signature: Yes
Certificate: TEST USE ONLY - Sample Privileged... (you may have to import it from the SDK dir)
Provision device: Privileged certificate store


结果呢,makeimg还是trust = 0;

 

 

然后就想着做自己的证书,这样就不是TEST USE ONLY ,而是root了,具体区别感觉应该是root权限大吧:

首先安装了windows server 2003,因为这上面做证书很方便。

首先要安装IIS服务,点击开始---管理工具---管理你的服务器,然后在右边点击添加或者删除角色,下一步,看看你的应用程序服务器那一项的后面是否已经配置,如果是否那么久配置一下,好了完成了第一步。

 

其次:

1、开始----添加删除程序-安装WINDOWS 组建-证书服务

2、弹出警告信息“计算机名和域成员身份都不能更改”,选择“是”

3、证书类型有四种,自己可以分别试一下,选择"企业根CA" ,或者选择"独立根CA",这里选择的是“独立根CA”

4、输入CA的公用名称呢个,可以输入中文,到时候查看证书办法机构的时候看着顺眼(这个随意)

5、

6、是否要停止IIS服务,选择是。(注意这里可能弹出的不是这个,可能是让你插入CD,那么久就将server2003CD插入,下一步就行了)

7、

默认选择 是

8、在IE地址栏输入http://localhost/CertSrv/default.asp或者 http://10.10.65.111/certsrv/default.asp其中10.10.65.111是机器的IP地址。

9、选择提交一个高级证书申请(选择申请一个证书到这一步)

10、选择创建并向此CA提交一个申请

11、填入相应信息,这里只输入姓名和电子邮件(这个下面的选项根据自己的填,如代码签名,1024位,sha1,导出密钥);

 

12、到这里你可能会看到让你等一两天,管理员会给你颁发,其实你就是管理员,自己给自己颁发。

开始-管理工具-证书颁发机构

选择挂起的申请,就可以看到刚才的证书申请 -颁发之。

另外可以设置成 自动颁发

13、

 

结果呢,得到的是cert和可以导出的pvk也就是公钥和私钥,这和mobile文档上面要的pfx文件不一样,所以这样做了没结果了。

 

于是又查,找到了用vs小工具做pfx,然后根据mobile文档上面的加载。

数字签名的制作和验证过程如下:

 

首先要用cmd命令窗口(开始-运行-输入cmd-回车),在里面找到你的microsoft vs2008 下的 有一个common7下面的tools,你可以在你的安装目录下搜索一下这几个工具:

makecert.exe   cert2spc.exe    pvk2pfx.exe    signfile.exe

1、用Visual Studio提供的制作证书工具makecert.exe,生成密钥:

makecert -sv mycert.pvk -a sha1 -len 1024 -sky signature -n "CN=XXXXXXX, O=YYYYYYY" mycert.cer

 以上命令指定SHA1算法,密钥长度1024位,生成证书文件mycert.cer和私有密钥文件mycert.pvk
2、cert2spc.exe把cer格式文件 (X.509 certificate)转换成spc格式(Software Publisher Certificate)

cert2spc.exe mycert.cer mycert.spc


3、用pvk2pfx.exe把.spc文件和.pvk文件合并成一个pfx格式(Personal Information Exchange)文件,1234是保护pfx文件的密码

pvk2pfx.exe -pvk mycert.pvk -spc mycert.spc -f -po 1234 -pfx mycert.pfx


4、给AUTORUN签名用signfile.exe:

signfile.exe -fautorun.exe -xmycert.pfx -ppubkey.h -w1234 -a

注意以上命令在给autorun.exe签名的同时还以C头文件的形式导出了公钥(pubkey.h)。pubkey.h要放到BSP中,验证AUTORUN.EXE的数字签名时要用到。公钥导出一次即可。

我是做到第三步,然后按照mobile文档进行的,结果还是trust= 0.

 

于是我又寻找其他办法:

 

security configuration manager 是用来降低设备安全等级的吧.

 这个东西是在windows mobile 6 SDK中的tools 目录下的security目录下,你也可以搜索一下,后缀msi,安装就行了。

 

1 把设备通过Activesync连接到PC.

2 待同步之后在PC上启动security configuration manager, 等待security configuration manager连接到设备(注意该工具最下面的提示).

3  在 Selected Configuration 中选择Security Off, 单击Provision按钮.

4 等待提示安装成功就可以了.

里面点击帮助文档,其实也是mobile文档中的一部分,好哈看看,很容易操作。

 

我能够将板子的安全等级降下来了,但是还是trust=0,老天啊,我崩溃了。。。。。

 

到现在为止,我的服务dll还是没有能够开机即启动,仍然是trust=0;不能加载,期待牛人帮助解决啊。我在csdn上发了帖子地址是:

http://topic.youkuaiyun.com/u/20110824/14/b6e58f17-a018-4b67-b453-e153ba9ab41b.html?84255

希望能解决的帮忙解决,不能的顶一下,绝对给分。。。

写篇文章记录这几天的辛苦,希望能够快点解决啊,牛人们你们出现吧,那些曾经问过这个问题的人们啊,你们都解决了么,这么多人问这种问题,没看到正确的解决办法,你们都放弃了了么?

 

 

 

 

 

 

开头说明:此源码并未开发完成,只是个demo。而且写法很随意(我也想搞懂iTunesMobileDevice.dll的调用流程,奈何太繁琐),喜勿喷! 1 .好像iTunesMobileDevice.dll对 太新太旧的设备读取某些功能存在着有误的问题(Iphone11系列读取颜色会返回空值0/1 ,Iphone5s的CPU架构号也会返回错误),其他没测可自行尝试 2 .整体流程是:1.调用 AMDeviceNotificationSubscribe ,函数用来及时反馈插拔设备消息                     2.调用 AMDeviceConnect ,函数用来连接设备( 到此步即可直接去获取一些基础设备信息,上图就是 )                     3.调用 AMDeviceIsPaired ,函数用来判断配对                     4.调用 AMDeviceValidatePairing ,函数用来验证配对,此函数也可做为(锁屏/信任)等判断依据                     5.调用 AMDeviceStartSession ,函数来创建会话通道,完成此步可做一些文件/高级信息(序列号/硬盘/内存/电池等) 系列操作                     注:整体流程的 成功 返回值均在源码中备注, 错误 的返回值过多没做整理,可以到优快云( 连接在下方 )自行查询错误原因! 3 .源代码共调用了两个模块 精E模块(请自行替换),Ecallback(已开源,一搜就有源码,作者: 星锋工作室-东灿 ) 4 . 源代码或多或少都加了一些注释,功能多虽然多, 源代码依赖Itunes( iTunesMobileDevice.dll和CoreFoundation.dll )请自备! 5 .文献: 部分功能调用方法及声明(英文):https://bitbucket.org/tristero/mobiledeviceaccess/src/4bf38336bd6d7f5ffb23c8f331aed9eff5c720c0/MobileDevice.h?at=default#MobileDevice.h-115 部分服务/功能名查询:https://bitbucket.org/tristero/mobiledeviceaccess/src/4e3e281de0c38b7f9f053927d45a756b28134bd3/deviceValueForDomain.md?at=defaultfileviewer=file-view-default  错误返回值含义查询 :https://blog.youkuaiyun.com/Cinnazgc/article/details/858609 94
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值