阅读:2260回复:7
请教SCM数据库文件是哪个啊
SCM数据库文件是哪个啊,文件名称是什么,找不到资料,请大家帮忙啦
|
|
沙发#
发布于:2007-04-14 09:48
OpenSCManager proto lpMachineName:LPSTR, lpDatabaseName:LPSTR, dwDesiredAccess:DWORD
函数使用的参数说明如下: ◎ lpMachineName--指向需要打开的计算机名字符串,字符串以NULL结尾,如果参数指定为NULL,表示连接到本机上的SCM ◎ lpDatabaseName--指向以NULL结尾的包含SCM数据库名称的字符串,字符串应该指定为"ServicesActive",如果参数指定为NULL,则默认打开"ServicesActive" ServicesActive 找不到这个文件啊 |
|
板凳#
发布于:2007-04-14 13:56
。。设为NULL就好了。。
|
|
|
地板#
发布于:2007-04-14 14:47
我是很好奇,想看看这个文件是什么样的
|
|
地下室#
发布于: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里无此机制) 各位大牛指教 |
|
|
5楼#
发布于:2007-04-16 09:12
难怪有人说把服务从内存链表摘除的话,就再也不能检测了,不过注册表里面还是可以想想办法的,嘿嘿。。。。。。
|
|
|
6楼#
发布于:2007-04-17 07:40
CreateService 失败 服务已经存在, 可注册表里面却没有啦,可能是前一次运行驱动时蓝屏导致的注册表部分删除了,然后程序就蓝屏崩溃了,但服务数据库部分没能删除,所以导致我上面的想法,想看看服务数据库里面的数据是哪里来的,机器已经重新启动过了,注册表还是没有,CreateService 仍然是失败 服务已经存在,说明数据库不是开机后扫描注册表得到的
|
|
7楼#
发布于:2008-12-15 14:22
我也想知道 好像没下午了
|
|