mirror of
https://github.com/DynamoRIO/dynamorio.git
synced 2026-10-12 02:02:04 +00:00
Removes core/ from the include dirs for libutil, to simplify using drfrontendlib with drcontainers at the same time without hitting a conflict between drcontainers/hashtable.h and core/hashtable.h.
219 lines
7.0 KiB
C
219 lines
7.0 KiB
C
/* **********************************************************
|
|
* Copyright (c) 2003-2008 VMware, Inc. All rights reserved.
|
|
* **********************************************************/
|
|
|
|
/*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* * Neither the name of VMware, Inc. nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
|
* DAMAGE.
|
|
*/
|
|
|
|
/*
|
|
*
|
|
* processes.h
|
|
*
|
|
*/
|
|
|
|
#ifndef _DETERMINA_PROCESSES_H_
|
|
#define _DETERMINA_PROCESSES_H_
|
|
|
|
#include "config.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "dr_stats.h" // from src tree
|
|
|
|
/* dup KPRIORITY and VM_COUNTERS from src/win32/ntdll.h, in order
|
|
* to have process_info_s self-contained.
|
|
* (so that, eg, src/ module is not necessary to build nodemgr.) */
|
|
#ifndef _NTDLL_H_
|
|
|
|
typedef LONG KPRIORITY;
|
|
|
|
/* format of data returned by QueryInformationProcess ProcessVmCounters */
|
|
typedef struct _VM_COUNTERS {
|
|
SIZE_T PeakVirtualSize;
|
|
SIZE_T VirtualSize;
|
|
ULONG PageFaultCount;
|
|
SIZE_T PeakWorkingSetSize;
|
|
SIZE_T WorkingSetSize;
|
|
SIZE_T QuotaPeakPagedPoolUsage;
|
|
SIZE_T QuotaPagedPoolUsage;
|
|
SIZE_T QuotaPeakNonPagedPoolUsage;
|
|
SIZE_T QuotaNonPagedPoolUsage;
|
|
SIZE_T PagefileUsage;
|
|
SIZE_T PeakPagefileUsage;
|
|
} VM_COUNTERS;
|
|
|
|
#endif
|
|
|
|
typedef struct process_info_s {
|
|
ULONG ThreadCount;
|
|
LARGE_INTEGER CreateTime;
|
|
LARGE_INTEGER UserTime;
|
|
LARGE_INTEGER KernelTime;
|
|
WCHAR *ProcessName;
|
|
KPRIORITY BasePriority;
|
|
ULONG ProcessID;
|
|
ULONG InheritedFromProcessID;
|
|
ULONG HandleCount;
|
|
VM_COUNTERS VmCounters;
|
|
} process_info_t;
|
|
|
|
typedef struct module_info_s {
|
|
PVOID BaseAddress;
|
|
PVOID EntryPoint;
|
|
ULONG SizeOfImage;
|
|
// strings are NULL terminated, non persistent and in this address space
|
|
WCHAR *FullDllName; // dll name with path (i.e. "c:\win\sys32\foo.dll")
|
|
WCHAR *BaseDllName; // just dll name (i.e. "foo.dll")
|
|
SHORT LoadCount;
|
|
SHORT TlsIndex;
|
|
ULONG TimeDateStamp;
|
|
process_id_t ProcessID; // ID of Process this module is loaded into
|
|
} module_info_t;
|
|
|
|
/* for process and dll callback routines; the callback should
|
|
* return FALSE to abort the walk */
|
|
typedef BOOL (*processwalk_callback)(process_info_t *pi, void **param);
|
|
|
|
typedef BOOL (*dllwalk_callback)(module_info_t *mi, void **param);
|
|
|
|
/*
|
|
* generic process information methods
|
|
*/
|
|
|
|
DWORD
|
|
dll_walk_proc(process_id_t ProcessID, dllwalk_callback dwcb, void **param);
|
|
|
|
DWORD
|
|
dll_walk_all(dllwalk_callback dwcb, void **param);
|
|
|
|
DWORD
|
|
process_walk(processwalk_callback pwcb, void **param);
|
|
|
|
DWORD
|
|
get_process_name_and_cmdline(process_id_t pid, WCHAR *name_buf, int name_len,
|
|
WCHAR *cmdline_buf, int cmdline_len);
|
|
|
|
DWORD
|
|
get_process_name(process_id_t pid, WCHAR *buf, int len);
|
|
|
|
DWORD
|
|
get_process_cmdline(process_id_t pid, WCHAR *buf, int len);
|
|
|
|
/*
|
|
* heavy-duty kill
|
|
*/
|
|
|
|
DWORD
|
|
terminate_process(process_id_t pid);
|
|
|
|
DWORD
|
|
terminate_process_by_exe(WCHAR *exename);
|
|
|
|
/*
|
|
* DR process status / drmarker functions
|
|
*/
|
|
|
|
int
|
|
under_dynamorio(process_id_t ProcessID);
|
|
|
|
int
|
|
under_dynamorio_ex(process_id_t ProcessID, DWORD *build_num);
|
|
|
|
/* pending_restart is required OUT parameter.
|
|
* status is optional OUT parameter -- if not NULL, will have the status
|
|
* of the process after successful return.
|
|
* process_cfg is optional OUT parameter -- if not NULL, will have a pointer
|
|
* to the config group in the config for this process, if available.
|
|
* for internal convenience, may pass NULL for config, in which case
|
|
* status is the only well-defined output parameter. */
|
|
DWORD
|
|
check_status_and_pending_restart(ConfigGroup *config, process_id_t pid,
|
|
BOOL *pending_restart, int *status,
|
|
ConfigGroup **process_cfg);
|
|
|
|
/* pending_restart is required OUT parameter */
|
|
DWORD
|
|
is_anything_pending_restart(ConfigGroup *c, BOOL *pending_restart);
|
|
|
|
/* hotpatch status: the returned pointer must be freed with
|
|
* free_hotp_status_table below. */
|
|
DWORD
|
|
get_hotp_status(process_id_t pid, hotp_policy_status_table_t **hotp_status);
|
|
|
|
/* if a hotp_status table was requested, it must be freed. */
|
|
void
|
|
free_hotp_status_table(hotp_policy_status_table_t *hotp_status);
|
|
|
|
dr_statistics_t *
|
|
get_dynamorio_stats(process_id_t pid);
|
|
|
|
void
|
|
free_dynamorio_stats(dr_statistics_t *stats);
|
|
|
|
/*
|
|
* Detach and nudge functions
|
|
*/
|
|
|
|
/* Loads the specified dll in process pid and waits on the loading thread, does
|
|
* not free the dll once the loading thread exits. Usual usage is for the
|
|
* loaded dll to do something in its DllMain. If you do not want the dll to
|
|
* stay loaded its DllMain should return false. To unload a dll from a process
|
|
* later, inject another dll whose dll main unloads that dll and then returns
|
|
* false. If loading_thread != NULL returns a handle to the loading thread (dll
|
|
* could call FreeLibraryAndExitThread on itself in its dll main to return a
|
|
* value out via the exit code). inject_dll provides no way to pass arguments
|
|
* in to the dll. */
|
|
DWORD
|
|
inject_dll(process_id_t pid, const WCHAR *dll_name, BOOL allow_upgraded_perms,
|
|
DWORD timeout_ms, PHANDLE loading_thread);
|
|
/* pending_restart is required OUT parameter */
|
|
DWORD
|
|
detach_all_not_in_config_group(ConfigGroup *c, DWORD timeout_ms);
|
|
|
|
/* generic nudge DR, action mask determines which actions will be executed */
|
|
DWORD
|
|
generic_nudge(process_id_t pid, BOOL allow_upgraded_perms, DWORD action_mask,
|
|
client_id_t id /* optional */, uint64 client_arg /* optional */,
|
|
DWORD timeout_ms);
|
|
|
|
/* generic nudge DR, action mask determines which actions will be executed,
|
|
* timeout_ms is the maximum time for a single process nudge
|
|
* delay_ms is pause between processing each process, 0 no pause
|
|
*/
|
|
DWORD
|
|
generic_nudge_all(DWORD action_mask, uint64 client_arg /* optional */, DWORD timeout_ms,
|
|
DWORD delay_ms);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //_NM_PROCESSES_H_
|