whrcartoon
驱动牛犊
驱动牛犊
  • 注册日期2007-02-23
  • 最后登录2009-01-24
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望32点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:2260回复:7

请教SCM数据库文件是哪个啊

楼主#
更多 发布于:2007-04-13 21:27
  SCM数据库文件是哪个啊,文件名称是什么,找不到资料,请大家帮忙啦
whrcartoon
驱动牛犊
驱动牛犊
  • 注册日期2007-02-23
  • 最后登录2009-01-24
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望32点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-14 09:48
OpenSCManager proto lpMachineName:LPSTR, lpDatabaseName:LPSTR, dwDesiredAccess:DWORD

    函数使用的参数说明如下:
◎ lpMachineName--指向需要打开的计算机名字符串,字符串以NULL结尾,如果参数指定为NULL,表示连接到本机上的SCM
◎ lpDatabaseName--指向以NULL结尾的包含SCM数据库名称的字符串,字符串应该指定为"ServicesActive",如果参数指定为NULL,则默认打开"ServicesActive"

ServicesActive 找不到这个文件啊
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-04-14 13:56
。。设为NULL就好了。。
驱动开发者 呵呵
whrcartoon
驱动牛犊
驱动牛犊
  • 注册日期2007-02-23
  • 最后登录2009-01-24
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望32点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-14 14:47
我是很好奇,想看看这个文件是什么样的
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-04-14 20:29
advapi32.dll中导出的OpenSCManagerA会调用ROpenSCMangageA
然后ROpenSCMangageA会通过RPC来调用到service的一个NamePipe:\\pipe\\ntsvcs
并最终调用到services.exe中的同名函数ROpenSCManageA


函数会检查lpDatabaseName是否为NULL,若为NULL,则默认使用ServicesActive,否则将比较是否为
ServicesFailed或ServicesActive,若都不是,则返回ERROR_DATABASE_DOES_NOT_EXIST
然后会把DatabaseName保存到Sc_Manage_Handle中

RScOpenServiceW是由advapi32.dll中OpenServiceW 经RPC调用而来
这时会去检测其参数中Sc_Manage_Handle中的DataBaseName
若为ServicesActive则填充ServiceHandle中ServiceListEntry为ServiceRecordList的地址
否则会把获得的ServiceRecordList地址 and 0FE0FH再填充

CreateService也是类似
之后QueryServiceStatus,SetSerivceConfig之类都是操作ServiceHandle中这个ServiceListEntry来做的

因此这个不是代表的文件,而是内存中的服务列表数据库。。

以上IDA+ReactOS的代码分析得来。。。(ReactOS里无此机制)
各位大牛指教
驱动开发者 呵呵
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-04-16 09:12
难怪有人说把服务从内存链表摘除的话,就再也不能检测了,不过注册表里面还是可以想想办法的,嘿嘿。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
whrcartoon
驱动牛犊
驱动牛犊
  • 注册日期2007-02-23
  • 最后登录2009-01-24
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望32点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-17 07:40
CreateService 失败 服务已经存在, 可注册表里面却没有啦,可能是前一次运行驱动时蓝屏导致的注册表部分删除了,然后程序就蓝屏崩溃了,但服务数据库部分没能删除,所以导致我上面的想法,想看看服务数据库里面的数据是哪里来的,机器已经重新启动过了,注册表还是没有,CreateService 仍然是失败 服务已经存在,说明数据库不是开机后扫描注册表得到的
1423567
驱动牛犊
驱动牛犊
  • 注册日期2005-10-15
  • 最后登录2009-11-29
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望92点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-12-15 14:22
我也想知道 好像没下午了
游客

返回顶部