我也不懂,估计是载入KERNEL32.DLL,并调用dll的输出函数RegisterServiceProcess来将当前进程注册为服务程序。具体参数的含义就不太清楚了。我也想知道,push

解决方案 »

  1.   

    ??
    typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD)
    MYFUNC  是自定义数据类型(代表一个函数指针),返回值为DWORD,有两个参数都是DWORD型          
    MYFUNC RegisterServiceProcessFun = NULL;    //RegisterServiceProcessFun定义的函数指针
    RegisterServiceProcessFun = (MYFUNC)GetProcAddress(hInst, "RegisterServiceProcess");//取得hInst中RegisterServiceRrocess函数的位置,现在RegisterServiceProcessFun就是RegisterServiceRrocess函数了。
      

  2.   

    void HideProcess()
    {
    HINSTANCE hInst = LoadLibrary("KERNEL32.DLL"); 
    //显示载入KERNEL32.DLL动态连接库
    if(hInst) 
    //如果成功
    {            
    typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);          
    //定义一个函数类型, 注意只是个类型而已
    MYFUNC RegisterServiceProcessFun = NULL;    
    //定义一个函数变量
    RegisterServiceProcessFun = (MYFUNC)GetProcAddress
    (hInst, "RegisterServiceProcess");
    //取得KERNEL32.DLL动态库中的"RegisterServicePrecess"函数, 并将之赋给函数变量
    if(RegisterServiceProcessFun)    
    //如果取得的函数有效
    {            
    RegisterServiceProcessFun(GetCurrentProcessId(),1);    
    //以当前进程ID和1(表示注册为服务, 0表示相反)作为参数 调用该函数
    }    
    FreeLibrary(hInst); 
    //释放动态连接库
    }
    }
    //这段程序的作用是:在98下隐藏进程自己, 使进程管理器(ctrl-alt-del)看不见
    //如果程序有可视窗口, 窗口并不隐藏
    //RegisterServiceProcess函数在msdn能找到, 但是RegisterServiceProcessFun
    //就找不到了, 因为它是自定义的变量名, MYFUNC是自定义的函数类型而已
      

  3.   

    谢谢cctime()的详细解答,给分了