Hey Guys!
This is my frist post (wow)
I've been trying to code a service using Dev-Cpp and as any
good-boy rookie I started at the tutorials. I tried the
following Example code, and though it compiled ok, the
StartServiceCtrlDispatcher() function kept on returning
error 1066 (which is "service exited with a specific error
code"), and the ServiceMain() function never started..
Can any of you guys give me hand ?
here is the source
// Test Service
#include <windows.h>
#include <stdio.h>
#define SLEEP_TIME 5000
#define LOGFILE "c:\memstatus.txt"
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
int InitService();
int WriteToLog(char* str)
{
FILE* log;
log =3D fopen(LOGFILE, "a+");
if (log =3D=3D NULL)
return -1;
fprintf(log, "%s\n", str);
fclose(log);
return 0;
}
int main()
{ WriteToLog("\nApp Starting");
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName =3D "MemoryStatus";
ServiceTable[0].lpServiceProc =3D
(LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName =3D NULL;
ServiceTable[1].lpServiceProc =3D NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
WriteToLog("\nApp Ending");
}
void ServiceMain(int argc, char** argv)
{ WriteToLog("Entering ServiceMain");
int error;
ServiceStatus.dwServiceType =3D
SERVICE_WIN32_OWN_PROCESS ;
ServiceStatus.dwCurrentState =3D
SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =3D SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode =3D 0;
ServiceStatus.dwServiceSpecificExitCode =3D 0;
ServiceStatus.dwCheckPoint =3D 0;
ServiceStatus.dwWaitHint =3D 0;
hStatus =3D RegisterServiceCtrlHandler(
"MemoryStatus",
(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus =3D=3D (SERVICE_STATUS_HANDLE)0)
{
// Registering Control Handler failed
return;
}
// Initialize Service
error =3D InitService();
if (error)
{
ServiceStatus.dwCurrentState =3D
SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode =3D -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
// We report the running status to SCM.
ServiceStatus.dwCurrentState =3D SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
MEMORYSTATUS memory;
// The worker loop of a service
while (ServiceStatus.dwCurrentState =3D=3D SERVICE_RUNNING)
{
char buffer[16];
GlobalMemoryStatus(&memory);
sprintf(buffer, "%d", memory.dwAvailPhys);
int result =3D WriteToLog(buffer);
if (result)
{
ServiceStatus.dwCurrentState =3D SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode =3D -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
Sleep(SLEEP_TIME);
}
return;
}
// Service initialization
int InitService()
{
int result;
result =3D WriteToLog("Monitoring started.");
return(result);
}
// Control handler function
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode =3D 0;
ServiceStatus.dwCurrentState =3D SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode =3D 0;
ServiceStatus.dwCurrentState =3D SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
default:
break;
}
// Report current status
SetServiceStatus (hStatus, &ServiceStatus);
return;
}</br>-----------------------------</br>
<a target=3D'_blank' href=3D"http://www.mail.bg/ads/adclick.php?bannerid=3D1=
809&zoneid=3D13&source=3D&dest=3Dhttp%3A%2F%2Fwww.vega-exchanges=
.org+&ismap=3D">
<b>Work & Travel in USA - =D1=F2=F3=E4=E5=ED=F2=F1=EA=E8 =E1=F0=E8=E3=E0=E4=
=E8 =E2 =D1=C0=D9.</b></br>
=C8=F1=EA=E0=F8 =EB=E8 =E4=E0 =F1=EF=E5=F7=E5=EB=E8=F8 $$$? =CA=E0=EA=E2=EE =
=F7=E0=EA=E0=F8 =EE=F9=E5? =C7=E0=EF=E8=F8=E8 =F1=E5!</br>
=CF=EE=E4=F0=EE=E1=ED=EE=F1=F2=E8 =ED=E0 =E0=E4=F0=E5=F1: http://www.vega-ex=
changes.org </a><div id=3D"beacon_1809" style=3D"position: absolute; left: 0=
px; top: 0px; visibility: hidden;"><img src=3D'http://www.mail.bg/ads/adlog.=
php?bannerid=3D1809&clientid=3D1078&zoneid=3D13&source=3D&bl=
ock=3D0&capping=3D0&cb=3Dc7516a674cc214d4c163c1237aa78df4' width=3D'=
0' height=3D'0' alt=3D'' style=3D'width: 0px; height: 0px;'></div>
|