首页
社区
课程
招聘
[求助]问个wm5.0调用服务的问题
发表于: 2009-4-22 17:39 5084

[求助]问个wm5.0调用服务的问题

2009-4-22 17:39
5084
我参照msdn上wince服务的介绍写了个服务,但好像一直没有被系统调用,大家帮忙看下原因.
appKey.SetValue("Dll", "MyMobileService.dll");
appKey.SetValue("Order", "10", RegistryValueKind.DWord);
appKey.SetValue("Prefix", "CU");
appKey.SetValue("Index", "0", RegistryValueKind.DWord);
appKey.SetValue("Context", "1", RegistryValueKind.DWord);
这个是写注册表的部分.
BOOL APIENTRY DllMain( HANDLE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
WriteDebugText("begin attach process\r\n");
g_dwServiceState = SERVICE_STATE_UNINITIALIZED;
InitializeCriticalSection(&g_cs);
DisableThreadLibraryCalls((HMODULE)hModule);
DEBUGREGISTER((HINSTANCE)hModule);
break;
case DLL_PROCESS_DETACH:
WriteDebugText("begin detach process\r\n");
DeleteCriticalSection (&g_cs);
break;

}
    return TRUE;
}

DWORD CU_Close(DWORD dwData)
{
WriteDebugText("service closed!\r\n");
return 0;
}

DWORD CU_Deinit(DWORD dwData)
{
    WriteDebugText("begin deinit services\r\n");
    DEBUGMSG(ZONE_INTRF,(L"CUFriends: CU_DeInit(0x%08x)\r\n",dwData));

    EnterCriticalSection (&g_cs);
    g_dwServiceState = SERVICE_STATE_UNLOADING;
LeaveCriticalSection(&g_cs);
DEBUGMSG(ZONE_INIT,(L"CUFriends: Completed shutdown.  Returning to "
                        L"services.exe for unload\r\n"));
return 0;
}

DWORD CU_Init(DWORD dwData)
{
    WriteDebugText("begin init services\r\n");
    DEBUGMSG(ZONE_INTRF,(L"CUFriends: CU_Init(0x%08x)\r\n",dwData));
EnterCriticalSection (&g_cs);
if (g_dwServiceState != SERVICE_STATE_UNINITIALIZED) {
DEBUGMSG(ZONE_ERROR,(L"CUFriends: ERROR: CUFriends service already "
L"initialized on CU_Init() call\r\n"));
LeaveCriticalSection (&g_cs);
return 0;
}
g_dwServiceState = SERVICE_STATE_STARTING_UP;
    DEBUGMSG(ZONE_INIT,(L"CUFriends: CU_Init success - service is "
                        L" in starting up state\r\n"));
    LeaveCriticalSection (&g_cs);
return 1;
}
......
void WriteDebugText(char* msg)
{
FILE* fl = fopen("logfile.txt", "a+" );
fwrite(msg, sizeof(char), strlen(msg), fl);
fclose(fl);
}
上面是dll中的主要代码.
LIBRARY "MyMobileService"
EXPORTS
CU_Close
CU_Deinit
CU_Init
CU_IOControl
CU_Open
CU_Read
CU_Seek
CU_Write
这个是def文件.

目标设备是CHS WM5.0 ppc r2 emulator
我把注册表项写入了模拟器,用远程注册表查看工具看过了,应该没问题.
然后把MyMobileService.dll文件拷贝到了模拟器的windows目录下.
软重置模拟器,发现日志文件没有被创建,并且发现MyMobileService.dll模块根本不在Service进程内.
还望大家帮忙解决下.还有,我怎么在模拟器上调试MyMobileService.dll的代码呢?
本人新手,大家说得越详细越好.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
服务的前缀应该和驱动一样吧,都是三个字母
2009-4-23 14:06
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
用WM5 SDK的文件签名了吗?
2009-4-23 16:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
非常感谢两位,那个Prefix我查了下,确实要求是3个符号(msdn上只说XXX_Init,那个XXX意味着必须3个字符,我没理解,汗),改过之后,我安装结束后用ActiveService可以以成功把服务注入到service进程,但模拟器重新启动后貌似没有load 我的dll.
还有"服务的前缀应该和驱动一样吧",这个什么意思?驱动是3个符号的?
"用WM5 SDK的文件签名了吗",没有,msdn介绍上好像没说要签名啊,我试试.
2009-4-23 17:43
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
5
如果使用的是WM5.0及以上版本就必须考虑安全性提高之后的签名问题。

建议你在PPC2003上也实验一下,首先保证,代码等方面没有问题。
2009-4-23 17:59
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
没load你的dll就是因为签名问题,要WM5 SDK的SamplePrivDeveloper.pfx来签名,我之前破解个驱动脱了签名再换自己的上去也是没法自动load了,后来在这个版块有个大牛告诉我要WM5 SDK签名,立即搞定自动load
2009-4-23 18:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
几位猛将兄,太感谢了.问题解决了,最后确实是差了个签名.
回过头来看看这个最后貌似很简单的解决方案,确花了我1天多的时间,最后还是靠几位牛牛的帮忙才最终搞定.想想当年斯坦门次的一在机器上画的一条线就值1万美元,现在想来确实是值的.
以后有问题还得请大家多多照顾啊,
再次感谢中
2009-4-24 07:34
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
8
刚入门的时候确实有很多困难,多查资料,多思考,多研究突破之后水平又会提高一层。
加油。
2009-4-24 08:31
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
9
另外也欢迎在有新的成果和进展时同大家一起分享。共同进步。
2009-4-24 08:47
0
游客
登录 | 注册 方可回帖
返回
//