zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python中常见的文件对象内建函数
    数字整除
    Bag标签之校验
    开源硬件交流@上海新车间
    POJ 题目2774 Long Long Message(后缀数组,求最长公共子串长度)
    Linux以下的两种文件锁
    敏捷自己主动化单元測试 (从前台 JavaScript 至后台 Java)
    浅谈关于collection接口及相关容器类(一)
    上传文件 | 下载文件
    几年前再用exjts4,如今extjs5发布了,技术更新快,每次给人惊喜
  • 原文地址:https://www.cnblogs.com/itdef/p/5492269.html
Copyright © 2011-2022 走看看