忘了从哪抄的了:void CNetSearchDlg::CheckService(char * pHostName)
{
char sBuf[256];
UINT nCount = 1, nItemCount = 0;
ENUM_SERVICE_STATUS *lpSrv = (ENUM_SERVICE_STATUS *)malloc(sizeof(ENUM_SERVICE_STATUS));
DWORD dwNeeded = 0, dwSrvRet = 0, dwResumeHandle = 0; dwResumeHandle = 0; SC_HANDLE hSCManager = OpenSCManager(pHostName, NULL, GENERIC_READ); int temp = GetLastError();_retry_:
BOOL bRet = EnumServicesStatus(hSCManager,
SERVICE_WIN32, SERVICE_STATE_ALL, lpSrv, sizeof(ENUM_SERVICE_STATUS) * nCount,
&dwNeeded, &dwSrvRet, &dwResumeHandle); for(UINT x = 0; x < dwSrvRet; x++)
{
nItemCount++; CString strAux;
sprintf(sBuf,"%-30s : %s\n",lpSrv[x].lpDisplayName,lpSrv[x].lpServiceName); m_list.InsertString(-1,sBuf); } if(!bRet)
{
int g_dwLastError = GetLastError(); if((g_dwLastError == ERROR_MORE_DATA) || (nCount * sizeof(ENUM_SERVICE_STATUS) < dwNeeded))
{
nCount++; if(lpSrv)
{
lpSrv = (ENUM_SERVICE_STATUS *)realloc(lpSrv,
sizeof(ENUM_SERVICE_STATUS) * nCount);
if(!lpSrv)
goto _exit_;
}
else
{
lpSrv = (ENUM_SERVICE_STATUS *)malloc(sizeof(ENUM_SERVICE_STATUS) * nCount);
if(!lpSrv)
goto _exit_;
} goto _retry_;
}
else
goto _exit_;
}_exit_:
if(lpSrv)
free(lpSrv);
CloseServiceHandle(hSCManager);
}
{
char sBuf[256];
UINT nCount = 1, nItemCount = 0;
ENUM_SERVICE_STATUS *lpSrv = (ENUM_SERVICE_STATUS *)malloc(sizeof(ENUM_SERVICE_STATUS));
DWORD dwNeeded = 0, dwSrvRet = 0, dwResumeHandle = 0; dwResumeHandle = 0; SC_HANDLE hSCManager = OpenSCManager(pHostName, NULL, GENERIC_READ); int temp = GetLastError();_retry_:
BOOL bRet = EnumServicesStatus(hSCManager,
SERVICE_WIN32, SERVICE_STATE_ALL, lpSrv, sizeof(ENUM_SERVICE_STATUS) * nCount,
&dwNeeded, &dwSrvRet, &dwResumeHandle); for(UINT x = 0; x < dwSrvRet; x++)
{
nItemCount++; CString strAux;
sprintf(sBuf,"%-30s : %s\n",lpSrv[x].lpDisplayName,lpSrv[x].lpServiceName); m_list.InsertString(-1,sBuf); } if(!bRet)
{
int g_dwLastError = GetLastError(); if((g_dwLastError == ERROR_MORE_DATA) || (nCount * sizeof(ENUM_SERVICE_STATUS) < dwNeeded))
{
nCount++; if(lpSrv)
{
lpSrv = (ENUM_SERVICE_STATUS *)realloc(lpSrv,
sizeof(ENUM_SERVICE_STATUS) * nCount);
if(!lpSrv)
goto _exit_;
}
else
{
lpSrv = (ENUM_SERVICE_STATUS *)malloc(sizeof(ENUM_SERVICE_STATUS) * nCount);
if(!lpSrv)
goto _exit_;
} goto _retry_;
}
else
goto _exit_;
}_exit_:
if(lpSrv)
free(lpSrv);
CloseServiceHandle(hSCManager);
}
SC_HANDLE hSCManager, // handle to SCM database
DWORD dwServiceType, // service type
DWORD dwServiceState, // service state
LPENUM_SERVICE_STATUS lpServices, // status buffer
DWORD cbBufSize, // size of status buffer
LPDWORD pcbBytesNeeded, // buffer size needed
LPDWORD lpServicesReturned, // number of entries returned
LPDWORD lpResumeHandle // next entry
);
轻风又伤心了:2002-06-04
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
I solved my problem with your suggestion.