如图,初学,不知道如何解决,最好的话说一下解决一般MFC编程的方法,论题说题也没关系
用管理员权限运行程序。
其次用GetLastError查看一下出错时的errorcode。
getlasterror返回什么?估计是你权限不够
这里有个参考程序:
#include<iostream.h>
#include<windows.h>
#include<stdio.h>
#include<winsvc.h>
void main(int argc,char ** argv){
LPENUM_SERVICE_STATUS st;
st=(LPENUM_SERVICE_STATUS)LocalAlloc(LPTR,64*1024);
DWORD ret=0;
DWORD size=0;
HANDLE sc=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
EnumServicesStatus(sc,SERVICE_WIN32,SERVICE_STATE_ALL, (LPENUM_SERVICE_STATUS)st,1024*64,&size,&ret,NULL);
for(int i=0;i<ret;i++){
printf("%-20s%-50s",st[i].lpServiceName,st[i].lpDisplayName);
switch(st[i].ServiceStatus.dwCurrentState){
case(SERVICE_RUNNING):
cout<<"running"<<endl;
break;
case(SERVICE_STOPPED):
cout<<"stopped"<<endl;
break;
}
}
}
问题已经排除了,是dwBufsize的问题,EnumServicesStatus的dwBufsize的位置改为1024*64是可以的,难道是传的dwBufsize的类型不对?