高阁客竟去·小园花乱飞·参差连曲陌·迢递送斜晖http://blog.yesky.com/Blog/wjswsl/复制地址
控制面板
日历
<2008年10月>
SuMoTuWeThFrSa
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
留言簿(49)
文章档案

//使用sc安装...然后sc start ServiceName "whoami"

//就可以看到效果了...呵呵

//Code by dahubaobao
#define DEBUGMSG

#include <windows.h>
#include <stdio.h>

#pragma comment (lib,"advapi32.lib")

#define erron GetLastError()

#define Debug(x) OutputDebugString(x)

TCHAR MsgError[50]={0};

SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE ServiceStatusHandle;

VOID WINAPI ServiceMain (DWORD dwArgc,TCHAR *lpArgv[]);

VOID WINAPI ServiceHandle (DWORD dwFlags);

BOOL ServiceTest (TCHAR *Command);

int main (int argc,TCHAR *argv[])
{
    SERVICE_TABLE_ENTRY ServiceTableEntry[2]=
    {
        {TEXT("dahubaobao"),ServiceMain},
        {NULL,NULL}
    };

    StartServiceCtrlDispatcher(ServiceTableEntry);

    return 0;
}

VOID WINAPI ServiceMain (DWORD dwArgc,TCHAR *lpArgv[])
{
     TCHAR SysDir[MAX_PATH]={0};
     TCHAR Command[MAX_PATH]={0};

     ServiceStatus.dwServiceType=SERVICE_WIN32;
     ServiceStatus.dwCurrentState=SERVICE_START_PENDING;
     ServiceStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP;
     ServiceStatus.dwServiceSpecificExitCode=0;
     ServiceStatus.dwWin32ExitCode=0;
     ServiceStatus.dwCheckPoint=0;
     ServiceStatus.dwWaitHint=0;

     if ((ServiceStatusHandle=RegisterServiceCtrlHandler(TEXT("dahubaobao"),ServiceHandle))==0)
     {
         #ifdef DEBUGMSG
                sprintf(MsgError,TEXT("RegisterServiceCtrlHandler() GetLastError reports %d\n"),erron);
                Debug(MsgError);
         #endif
         return ;
     }

     ServiceStatus.dwCurrentState=SERVICE_RUNNING;
     ServiceStatus.dwCheckPoint=0;
     ServiceStatus.dwWaitHint=0;

     if (SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0)
     {
         #ifdef DEBUGMSG
                sprintf(MsgError,TEXT("SetServiceStatus() GetLastError reports %d\n"),erron);
                Debug(MsgError);
         #endif
         return ;
     }

     GetSystemDirectory(SysDir,MAX_PATH-1);
     sprintf(Command,TEXT("%s\\cmd.exe /k %s%c"),SysDir,(char *)lpArgv[1],0);

     ServiceTest(Command);

     return ;
}

VOID WINAPI ServiceHandle (DWORD ControlCode)
{
     switch (ControlCode)
     {
             case SERVICE_CONTROL_STOP:
                  ServiceStatus.dwCurrentState=SERVICE_STOPPED;
                  ServiceStatus.dwWin32ExitCode=0;
                  ServiceStatus.dwCheckPoint=0;
                  ServiceStatus.dwWaitHint=0;
                  break;

             default:
                  break;
     }

     if (SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0)
     {
         #ifdef DEBUGMSG
                sprintf(MsgError,TEXT("SetServiceStatus() GetLastError reports %d\n"),erron);
                Debug(MsgError);
         #endif
         return ;
     }

     return ;
}

BOOL ServiceTest (TCHAR *Command)
{
     STARTUPINFO si={0};
     PROCESS_INFORMATION pi;
     si.cb=sizeof (STARTUPINFO);
     si.lpDesktop=TEXT("WinSta0\\Default");

     if (!(CreateProcess(NULL,Command,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)))
     {
         #ifdef DEBUGMSG
                sprintf(MsgError,TEXT("CreateProcess() GetLastError reports %d\n"),erron);
                Debug(MsgError);
         #endif
         return FALSE;
     }

     return TRUE;
}

 

posted on 2005-04-05 08:57 心海箫音 阅读(63) 评论(0)  编辑 报警

Feedbac

相关内容
文章评论

暂无人对此文章发表评论!

发表评论
标题 *  
姓名 *  
内容 *  
   验证码: *       
       
版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
Powered by:

Copyright © 警者自警