Пример #1
0
Файл: peb.c Проект: 40a/sigar
int sigar_proc_args_peb_get(sigar_t *sigar, HANDLE proc,
                            sigar_proc_args_t *procargs)
{
    int status;
    WCHAR buf[SIGAR_CMDLINE_MAX];
    RTL_USER_PROCESS_PARAMETERS rtl;
    DWORD size;

    if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
        return status;
    }

    size = rtl_bufsize(buf, rtl.CommandLine);
    if (size <= 0) {
        return ERROR_DATATYPE_MISMATCH; /* fallback to wmi */
    }
    memset(buf, '\0', sizeof(buf));

    if (ReadProcessMemory(proc, rtl.CommandLine.Buffer, buf, size, NULL)) {
        return sigar_parse_proc_args(sigar, buf, procargs);
    }
    else {
        return GetLastError();
    }
}
Пример #2
0
int sigar_proc_args_wmi_get(sigar_t * sigar, sigar_pid_t pid, sigar_proc_args_t * procargs)
{
	TCHAR buf[SIGAR_CMDLINE_MAX];
	int status;

	if ((status = wmi_get_proc_command_line(sigar, pid, buf))) {
		goto out;
	} else {
		status = sigar_parse_proc_args(sigar, buf, procargs);
	}

out:
	return status;
}
Пример #3
0
extern "C" int sigar_proc_args_wmi_get(sigar_t *sigar, sigar_pid_t pid,
                                       sigar_proc_args_t *procargs)
{
    int status;
    TCHAR buf[SIGAR_CMDLINE_MAX];
    WMI *wmi = new WMI();

    if (FAILED(wmi->Open())) {
        return wmi->GetLastError();
    }

    if (FAILED(wmi->GetProcCommandLine((DWORD)pid, buf))) {
        status = wmi->GetLastError();
    }
    else {
        status = sigar_parse_proc_args(sigar, buf, procargs);
    }

    wmi->Close();
    delete wmi;

    return status;
}