wmi收集系统信息 发送到服务器打印

复制代码
#include "WMIManager.h"
#include <vector>
#include <string>
#include <boost/thread/thread.hpp>  
#include <boost/array.hpp>
#include <boost/asio.hpp>
 
/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
  
技术交流群
群号码:324164944
  
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/
 
using namespace DEF;
using boost::asio::ip::tcp;
 
void WMIManager::Transfer()
{
    tcp::resolver resolver(io_);
    tcp::resolver::query query("127.0.0.1", "8893");
    tcp::resolver::iterator iterator = resolver.resolve(query);
    try {
        tcp::socket s(io_);
        boost::asio::connect(s, iterator);
 
        while (1)
        {
            std::unique_lock<std::mutex>  lck(mtx_);
            while (!ready_) // 如果标志位不为 true, 则等待...
                cv_.wait(lck);
            while (!strVec_.empty())
            {
                std::cout << strVec_.back() << std::endl;
                size_t n = boost::asio::write(s, boost::asio::buffer((strVec_.back()).c_str(), (strVec_.back()).size()+1));
                strVec_.pop_back();
            }
            ready_ = false;
        }
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << "\n";
    }
 
     
}
 
 
bool WMIManager::Start()
{
    if (false == wmiInfo_.Init(L"ROOT\\CIMV2"))
    {
        return false;
    }
    boost::thread t(&WMIManager::Transfer,this);
    t_.async_wait(boost::bind(&WMIManager::Loop,this,
        boost::asio::placeholders::error, &t_, &wmiInfo_));
 
    io_.run();
    t.join();
    return true;
}
 
void WMIManager::Loop(const boost::system::error_code&  e,
    boost::asio::deadline_timer* t, WMIInfo* wmiInfo)
{
    if ( wmiInfo->QueryWin32Process(L"WQL", L"SELECT * FROM Win32_Process", strVec_) )
    {
        //  transfer std::vector<std::string> 
    }
    t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
    t->async_wait(boost::bind(&WMIManager::Loop, this, 
        boost::asio::placeholders::error, t, wmiInfo));
}
View Code
复制代码

代码片段

具体见

http://www.oschina.net/code/snippet_614253_56135

posted on   itdef  阅读(216)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示