1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| bool __fastcall ConnectToServiceManager(String ComputerName, SC_HANDLE *SCHandle)
{
*SCHandle = OpenSCManager(ComputerName.IsEmpty() ? NULL : ComputerName.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
return (*SCHandle != NULL);
}
void __fastcall TFormScreen1::Button1Click(TObject *Sender)
{
SC_HANDLE Handle_SCM;
String ComputerName;// = MyGetComputerName();
ENUM_SERVICE_STATUS *Mes_Services = NULL;
DWORD OctetsNecessaires, Nombre_Services;
try
{
if (!ConnectToServiceManager(ComputerName, &Handle_SCM))
RaiseLastOSError();
DWORD ResumeHandle = 0;
if (!EnumServicesStatus(Handle_SCM,
SERVICE_TYPE_ALL,
SERVICE_STATE_ALL,
NULL,
0,
&OctetsNecessaires,
&Nombre_Services,
&ResumeHandle))
{
if (GetLastError() != ERROR_MORE_DATA)
RaiseLastOSError();
Mes_Services = (ENUM_SERVICE_STATUS*)(new BYTE[OctetsNecessaires]);
if (!EnumServicesStatus(Handle_SCM,
SERVICE_TYPE_ALL,
SERVICE_STATE_ALL,
Mes_Services,
OctetsNecessaires,
&OctetsNecessaires,
&Nombre_Services,
&ResumeHandle))
RaiseLastOSError();
String res;
res.printf(L"Nombre_Services=%d", Nombre_Services);
ShowMessage(res);
}
}
__finally {
//...
}
} |
Partager