您的位置:首页 > 其它

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

2011-08-24 21:22 316 查看

首先给出我的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.csdn.net/u/20110824/14/b6e58f17-a018-4b67-b453-e153ba9ab41b.html?84255

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

写篇文章记录这几天的辛苦,希望能够快点解决啊,牛人们你们出现吧,那些曾经问过这个问题的人们啊,你们都解决了么,这么多人问这种问题,没看到正确的解决办法,你们都放弃了了么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐