b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

svchostdll_system svchost_svchost dll casn(2)

电脑杂谈  发布时间:2017-05-07 01:01:07  来源:网络整理

在启动一个svchost.exe负责的服务时,服务管理器如果遇到可执行程序内容ImagePath已经存在于服务管理器的映象库中,就不在启动第2个进程svchost,而是直接启动服务。这样就实现了多个服务共享一个svchost进程。

3. Svchost代码

现在我们基本清楚svchost的原理了,但是要自己写一个DLL形式的服务,由svchost来启动,仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?我们是否需要调用RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数?

这些问题要通过查看svchost代码获得。下边的代码是windows 2000 service pack 4 的svchost反汇编片段,可以看出svchost程序还是很简单的。

主函数首先调用ProcCommandLine()对命令行进行分析,获得要启动的服务组,然后调用SvcHostOptions()查询该服务组的选项和服务组的所有服务,并使用一个数据结构 svcTable 来保存这些服务及其服务的DLL,然后调用PrepareSvcTable() 函数创建SERVICE_TABLE_ENTRY 结构,把所有处理函数SERVICE_MAIN_FUNCTION 指向自己的一个函数FuncServiceMain(),最后调用API StartServiceCtrlDispatcher() 注册这些服务的调度函数。

; =============================== Main Funcion ===========================================

.text:010010B8 public start

.text:010010B8 start proc near

.text:010010B8 push esi

.text:010010B9 push edi

.text:010010BA push offset sub_1001EBA ; lpTopLevelExceptionFilter

.text:010010BF xor edi, edi

.text:010010C1 call ds:SetUnhandledExceptionFilter

.text:010010C7 push 1 ; uMode

.text:010010C9 call ds:SetErrorMode

.text:010010CF call ds:GetProcessHeap

.text:010010D5 push eax

.text:010010D6 call sub_1001142

.text:010010DB mov eax, offset dword_1003018

.text:010010E0 push offset unk_1003000 ; lpCriticalSection

.text:010010E5 mov dword_100301C, eax

.text:010010EA mov dword_1003018, eax

.text:010010EF call ds:InitializeCriticalSection

.text:010010F5 call ds:GetCommandLineW

.text:010010FB push eax

.text:010010FC call ProcCommandLine


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-45628-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 李佳佳
      李佳佳

      那些所谓的创新公司靠圈钱过日子

    • 马晨阳
      马晨阳

      笑死我了冲着那个狮子我要更新

    • 李虞
      李虞

      想讹钱

    热点图片
    拼命载入中...