|
CServItem*CServConfig::EnumServList()
{
// ENUM_SERVICE_STATUS*pServStatus=NULL;
SC_HANDLE hSCM= OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(!hSCM){
return NULL;
}
CServItem *pServHeader=NULL,*pServPre=NULL,*pServNext=NULL; //列表头
LPENUM_SERVICE_STATUS pServStatus=NULL;
DWORD dwBytesNeeded=0,dwServCound=0,dwResume=0,dwRealBytes=0;
BOOL bRet =EnumServicesStatus(hSCM,SERVICE_WIN32,SERVICE_STATE_ALL,NULL,0,&dwBytesNeeded,&dwServCound,&dwResume);
if(!bRet && GetLastError()==ERROR_MORE_DATA){
dwRealBytes=dwBytesNeeded;
pServStatus=new ENUM_SERVICE_STATUS[dwRealBytes+1];
ZeroMemory(pServStatus,dwRealBytes+1);
bRet =EnumServicesStatus(hSCM,SERVICE_WIN32,SERVICE_STATE_ALL,pServStatus,dwRealBytes,&dwBytesNeeded,&dwServCound,&dwResume);
if(!bRet){
CloseServiceHandle(hSCM);
return NULL;
}
}
else{
CloseServiceHandle(hSCM);
return NULL;
}
pServPre=pServNext;
for(DWORD dwIdx=0;dwIdx<dwServCound;dwIdx++){
pServNext=new CServItem;
pServNext->m_strServName=pServStatus[dwIdx].lpServiceName;
pServNext->m_strServDispName=pServStatus[dwIdx].lpDisplayName;
pServNext->m_dwServStatus=pServStatus[dwIdx].ServiceStatus.dwCurrentState;
(pServHeader==NULL)?(pServHeader=pServNext):pServHeader;
(pServPre==NULL)?(pServPre=pServNext):(pServPre->m_pNext=pServNext,pServPre=pServNext);
}
delete[]pServStatus;
return pServHeader;
return NULL;
}
在这一个文件中的m_pHeader值是NULL
CServConfig m_ServCfg;
CServItem*m_pHeader=m_ServCfg.EnumServList(); |
上一篇: VS2019 工程名字写中文,运行程序就报异常错误下一篇: 为什么我的DDK里很多结构体都没有定义
|