http://msdn.microsoft.com/en-us/library/bb540475(v=VS.85).aspx
1.程序类型:Win32 Console Application
2.几个主要的函数类型
VOID WINAPI SvcCtrlHandler( DWORD );
VOID WINAPI SvcMain( DWORD, LPTSTR * );
void __cdecl _tmain(int argc, TCHAR *argv[])
如果函数据类型不对,有可能在你停止service时随机收到0x00000000指令读取0x00000000地址非法的错误。
3. service 的安装类型
SC_HANDLE schService= CreateService(
schSCManager, // SCManager database
pszSvcName, // name of service
pszDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_IGNORE, // error control type
pszPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
如果要和系统有键盘消息则需要SERVICE_INTERACTIVE_PROCESS。
像发送Ctrl+Alt+Del消息
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),0,0);
keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),0,0);
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),KEYEVENTF_KEYUP,0);
keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),KEYEVENTF_KEYUP,0);
4.如何调试service.
Service 是一个exe程序。当启动时可以在taskmgr中看到。StartServiceCtrlDispatcher函数将会阻塞,直到用户在services.msc中停止service.
调试方法如下:
在services.msc中启动service, 然后attach到这个进程上进行调试。