Как получить все запущенные процессы в сети - PullRequest
0 голосов
/ 29 марта 2020

Как получить рабочие процессы любого компьютера, который подключен к локальной сети?

Я знаю, как получить рабочие процессы на моем компьютере, но я не могу найти, как получить рабочие процессы на другом компьютере .

Это мой код:

#include <windows.h>
#include <TlHelp32.h>

PROCESSENTRY32 exe;
HANDLE connector;

connector = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
exe.dwSize = sizeof(PROCESSENTRY32);

if (Process32First(connector, &exe) == true)
    while (Process32Next(connector, &exe) == true)
    {
        UnicodeString info = "Name: " + String(exe.szExeFile) + " -> PID: " + exe.th32ProcessID;
        ListBox1->Items->Add(info);
    }

CloseHandle(connector);

1 Ответ

1 голос
/ 30 марта 2020

Вы можете использовать класс WMI Win32_Process, чтобы получить список процессов удаленного компьютера. Пример:

#include <windows.h>
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
#pragma warning(disable : 4996)
using namespace std;

int main()
{
    HRESULT hres;
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    hres = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_DEFAULT,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE,
        NULL
    );

    IWbemLocator* pLoc = NULL;
    hres = CoCreateInstance(
        CLSID_WbemLocator,
        0,
        CLSCTX_INPROC_SERVER,
        IID_IWbemLocator, (LPVOID*)&pLoc);

    IWbemServices* pSvc = NULL;
    hres = pLoc->ConnectServer(
        _bstr_t(L"\\\\servername\\Root\\CIMV2"), // Object path of WMI namespace
        BSTR(L"Domain\\Administrator"),
        BSTR(L"password"),
        0,
        NULL,
        0,
        0,
        &pSvc
    );


    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(BSTR(L"WQL"), BSTR(L"SELECT * FROM Win32_Process"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);

    IWbemClassObject* pclsObj = NULL;
    ULONG uReturn = 0;
    UINT32 LockStatus = 0;
    while (pEnumerator)
    {
        hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
        if (0 == uReturn || FAILED(hres))
            break;
        VARIANT vtProp;

        hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);// String
        if (!FAILED(hres))
        {
            if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY))
                wcout << "Name : " << ((vtProp.vt == VT_NULL) ? "NULL" : "EMPTY") << endl;
            else
                wcout << "Name : " << vtProp.bstrVal << endl;
        }
        VariantClear(&vtProp);

        hres = pclsObj->Get(L"ProcessId", 0, &vtProp, 0, 0);// Uint32
        if (!FAILED(hres))
        {
            if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY))
                wcout << "ProcessId : " << ((vtProp.vt == VT_NULL) ? "NULL" : "EMPTY") << endl;
            else
                wcout << "ProcessId : " << vtProp.uintVal << endl;
        }
        VariantClear(&vtProp);
        pclsObj->Release();
    }
    pEnumerator->Release();
    pLoc->Release();
    pSvc->Release();
    CoUninitialize();
    return 0;
}

Для этого вам необходимо настроить параметры брандмауэра и DCOM: Подключение к WMI на удаленном компьютере

Или с помощью cmd: tasklist :

tasklist /s servername /u username /p password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...