• windows c++ 输出所有服务列表,并判断是否是开机启动项



    #include
    #include
    #include

    int main() {
        SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
        if (hSCManager == NULL) {
            std::cout << "无法打开服务控制管理器。错误代码:" << GetLastError() << std::endl;
            return 1;
        }

        DWORD dwBytesNeeded;
        DWORD dwServicesReturned;
        DWORD dwResumeHandle = 0;

        // 获取服务状态信息所需的缓冲区大小
        EnumServicesStatusEx(hSCManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, &dwBytesNeeded, &dwServicesReturned, &dwResumeHandle, NULL);

        // 分配缓冲区
        LPENUM_SERVICE_STATUS_PROCESS lpServices = (LPENUM_SERVICE_STATUS_PROCESS) new BYTE[dwBytesNeeded];

        // 获取服务状态信息
        if (!EnumServicesStatusEx(hSCManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,
            (LPBYTE)lpServices, dwBytesNeeded, &dwBytesNeeded, &dwServicesReturned, &dwResumeHandle, NULL)) {
            std::cout << "无法枚举服务状态。错误代码:" << GetLastError() << std::endl;
            delete[] lpServices;
            return 1;
        }

        std::cout << "所有的服务列表:" << std::endl;

        // 遍历服务并输出服务名和启动类型
        for (DWORD i = 0; i < dwServicesReturned; i++) {
            std::wcout << "服务名:" << lpServices[i].lpServiceName << std::endl;
            std::cout << "是否为自动启动:" << ((lpServices[i].ServiceStatusProcess.dwServiceType & SERVICE_AUTO_START) ? "是" : "否") << std::endl;
            std::cout << std::endl;
        }

        // 释放资源
        delete[] lpServices;
        CloseServiceHandle(hSCManager);
        getchar();
        return 0;
    }

  • 相关阅读:
    程序员公司保密协议
    图像处理基本概念、GAN
    dreamweaver网页设计作业制作 学生个人网页单页 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品简单页面
    【GEE】6、在 Google 地球引擎中构建各种遥感指数
    Shell变量作用范围
    用gdb调试有问题的程序:练习使用gcc编译器和gdb调试器
    SPI机制
    QCC 音频输入输出
    【概率论笔记】正态分布专题
    6、Raft协议
  • 原文地址:https://blog.csdn.net/jijie_ming/article/details/134060030