sigar-test 0.7.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/NOTICE +117 -0
- data/README +2 -0
- data/Rakefile +105 -0
- data/bindings/SigarBuild.pm +301 -0
- data/bindings/SigarWrapper.pm +3025 -0
- data/bindings/ruby/extconf.rb +131 -0
- data/bindings/ruby/rbsigar.c +888 -0
- data/include/sigar.h +984 -0
- data/include/sigar_fileinfo.h +157 -0
- data/include/sigar_format.h +65 -0
- data/include/sigar_getline.h +18 -0
- data/include/sigar_log.h +80 -0
- data/include/sigar_private.h +429 -0
- data/include/sigar_ptql.h +53 -0
- data/include/sigar_util.h +197 -0
- data/src/os/aix/aix_sigar.c +2168 -0
- data/src/os/aix/sigar_os.h +73 -0
- data/src/os/darwin/Info.plist.in +27 -0
- data/src/os/darwin/darwin_sigar.c +3718 -0
- data/src/os/darwin/sigar_os.h +80 -0
- data/src/os/hpux/hpux_sigar.c +1361 -0
- data/src/os/hpux/sigar_os.h +49 -0
- data/src/os/linux/linux_sigar.c +2810 -0
- data/src/os/linux/sigar_os.h +82 -0
- data/src/os/solaris/get_mib2.c +321 -0
- data/src/os/solaris/get_mib2.h +127 -0
- data/src/os/solaris/kstats.c +181 -0
- data/src/os/solaris/procfs.c +97 -0
- data/src/os/solaris/sigar_os.h +224 -0
- data/src/os/solaris/solaris_sigar.c +2732 -0
- data/src/os/win32/peb.c +212 -0
- data/src/os/win32/sigar.rc.in +40 -0
- data/src/os/win32/sigar_os.h +685 -0
- data/src/os/win32/sigar_pdh.h +47 -0
- data/src/os/win32/win32_sigar.c +4109 -0
- data/src/sigar.c +2444 -0
- data/src/sigar_cache.c +253 -0
- data/src/sigar_fileinfo.c +815 -0
- data/src/sigar_format.c +696 -0
- data/src/sigar_getline.c +1849 -0
- data/src/sigar_ptql.c +1976 -0
- data/src/sigar_signal.c +216 -0
- data/src/sigar_util.c +1060 -0
- data/src/sigar_version.c.in +22 -0
- data/src/sigar_version_autoconf.c.in +22 -0
- data/version.properties +11 -0
- metadata +91 -0
data/src/os/win32/peb.c
ADDED
@@ -0,0 +1,212 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2004, 2006-2008 Hyperic, Inc.
|
3
|
+
* Copyright (c) 2009 SpringSource, Inc.
|
4
|
+
* Copyright (c) 2009 VMware, Inc.
|
5
|
+
*
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
* you may not use this file except in compliance with the License.
|
8
|
+
* You may obtain a copy of the License at
|
9
|
+
*
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
*
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
* See the License for the specific language governing permissions and
|
16
|
+
* limitations under the License.
|
17
|
+
*/
|
18
|
+
|
19
|
+
/*
|
20
|
+
* functions for getting info from the Process Environment Block
|
21
|
+
*/
|
22
|
+
#define UNICODE
|
23
|
+
#define _UNICODE
|
24
|
+
|
25
|
+
#include "sigar.h"
|
26
|
+
#include "sigar_private.h"
|
27
|
+
#include "sigar_os.h"
|
28
|
+
#include <shellapi.h>
|
29
|
+
|
30
|
+
void dllmod_init_ntdll(sigar_t *sigar);
|
31
|
+
|
32
|
+
#define sigar_NtQueryInformationProcess \
|
33
|
+
sigar->ntdll.query_proc_info.func
|
34
|
+
|
35
|
+
static int sigar_pbi_get(sigar_t *sigar, HANDLE proc, PEB *peb)
|
36
|
+
{
|
37
|
+
int status;
|
38
|
+
PROCESS_BASIC_INFORMATION pbi;
|
39
|
+
DWORD size=sizeof(pbi);
|
40
|
+
|
41
|
+
dllmod_init_ntdll(sigar);
|
42
|
+
|
43
|
+
if (!sigar_NtQueryInformationProcess) {
|
44
|
+
return SIGAR_ENOTIMPL;
|
45
|
+
}
|
46
|
+
|
47
|
+
SIGAR_ZERO(&pbi);
|
48
|
+
status =
|
49
|
+
sigar_NtQueryInformationProcess(proc,
|
50
|
+
ProcessBasicInformation,
|
51
|
+
&pbi,
|
52
|
+
size, NULL);
|
53
|
+
if (status != ERROR_SUCCESS) {
|
54
|
+
return status;
|
55
|
+
}
|
56
|
+
|
57
|
+
if (!pbi.PebBaseAddress) {
|
58
|
+
/* likely we are 32-bit, pid process is 64-bit */
|
59
|
+
return ERROR_DATATYPE_MISMATCH;
|
60
|
+
}
|
61
|
+
|
62
|
+
size = sizeof(*peb);
|
63
|
+
|
64
|
+
if (ReadProcessMemory(proc, pbi.PebBaseAddress, peb, size, NULL)) {
|
65
|
+
return SIGAR_OK;
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
return GetLastError();
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
static int sigar_rtl_get(sigar_t *sigar, HANDLE proc,
|
73
|
+
RTL_USER_PROCESS_PARAMETERS *rtl)
|
74
|
+
{
|
75
|
+
PEB peb;
|
76
|
+
int status = sigar_pbi_get(sigar, proc, &peb);
|
77
|
+
DWORD size=sizeof(*rtl);
|
78
|
+
|
79
|
+
if (status != SIGAR_OK) {
|
80
|
+
return status;
|
81
|
+
}
|
82
|
+
|
83
|
+
if (ReadProcessMemory(proc, peb.ProcessParameters, rtl, size, NULL)) {
|
84
|
+
return SIGAR_OK;
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
return GetLastError();
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
#define rtl_bufsize(buf, uc) \
|
92
|
+
((sizeof(buf) < uc.Length) ? sizeof(buf) : uc.Length)
|
93
|
+
|
94
|
+
int sigar_proc_exe_peb_get(sigar_t *sigar, HANDLE proc,
|
95
|
+
sigar_proc_exe_t *procexe)
|
96
|
+
{
|
97
|
+
int status;
|
98
|
+
WCHAR buf[MAX_PATH+1];
|
99
|
+
RTL_USER_PROCESS_PARAMETERS rtl;
|
100
|
+
DWORD size;
|
101
|
+
|
102
|
+
procexe->name[0] = '\0';
|
103
|
+
procexe->cwd[0] = '\0';
|
104
|
+
|
105
|
+
if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
|
106
|
+
return status;
|
107
|
+
}
|
108
|
+
|
109
|
+
size = rtl_bufsize(buf, rtl.ImagePathName);
|
110
|
+
memset(buf, '\0', sizeof(buf));
|
111
|
+
|
112
|
+
if ((size > 0) &&
|
113
|
+
ReadProcessMemory(proc, rtl.ImagePathName.Buffer, buf, size, NULL))
|
114
|
+
{
|
115
|
+
SIGAR_W2A(buf, procexe->name, sizeof(procexe->name));
|
116
|
+
}
|
117
|
+
|
118
|
+
size = rtl_bufsize(buf, rtl.CurrentDirectoryName);
|
119
|
+
memset(buf, '\0', sizeof(buf));
|
120
|
+
|
121
|
+
if ((size > 0) &&
|
122
|
+
ReadProcessMemory(proc, rtl.CurrentDirectoryName.Buffer, buf, size, NULL))
|
123
|
+
{
|
124
|
+
SIGAR_W2A(buf, procexe->cwd, sizeof(procexe->cwd));
|
125
|
+
}
|
126
|
+
|
127
|
+
return SIGAR_OK;
|
128
|
+
}
|
129
|
+
|
130
|
+
int sigar_parse_proc_args(sigar_t *sigar, WCHAR *buf,
|
131
|
+
sigar_proc_args_t *procargs)
|
132
|
+
{
|
133
|
+
char arg[SIGAR_CMDLINE_MAX];
|
134
|
+
LPWSTR *args;
|
135
|
+
int num, i;
|
136
|
+
|
137
|
+
if (!buf) {
|
138
|
+
buf = GetCommandLine();
|
139
|
+
}
|
140
|
+
|
141
|
+
args = CommandLineToArgvW(buf, &num);
|
142
|
+
|
143
|
+
if (args == NULL) {
|
144
|
+
return SIGAR_OK;
|
145
|
+
}
|
146
|
+
|
147
|
+
for (i=0; i<num; i++) {
|
148
|
+
SIGAR_W2A(args[i], arg, SIGAR_CMDLINE_MAX);
|
149
|
+
SIGAR_PROC_ARGS_GROW(procargs);
|
150
|
+
procargs->data[procargs->number++] = sigar_strdup(arg);
|
151
|
+
}
|
152
|
+
|
153
|
+
GlobalFree(args);
|
154
|
+
|
155
|
+
return SIGAR_OK;
|
156
|
+
}
|
157
|
+
|
158
|
+
int sigar_proc_args_peb_get(sigar_t *sigar, HANDLE proc,
|
159
|
+
sigar_proc_args_t *procargs)
|
160
|
+
{
|
161
|
+
int status;
|
162
|
+
WCHAR buf[SIGAR_CMDLINE_MAX];
|
163
|
+
RTL_USER_PROCESS_PARAMETERS rtl;
|
164
|
+
DWORD size;
|
165
|
+
|
166
|
+
if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
|
167
|
+
return status;
|
168
|
+
}
|
169
|
+
|
170
|
+
size = rtl_bufsize(buf, rtl.CommandLine);
|
171
|
+
if (size <= 0) {
|
172
|
+
return ERROR_DATATYPE_MISMATCH; /* fallback to wmi */
|
173
|
+
}
|
174
|
+
memset(buf, '\0', sizeof(buf));
|
175
|
+
|
176
|
+
if (ReadProcessMemory(proc, rtl.CommandLine.Buffer, buf, size, NULL)) {
|
177
|
+
return sigar_parse_proc_args(sigar, buf, procargs);
|
178
|
+
}
|
179
|
+
else {
|
180
|
+
return GetLastError();
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
int sigar_proc_env_peb_get(sigar_t *sigar, HANDLE proc,
|
185
|
+
WCHAR *buf, DWORD size)
|
186
|
+
{
|
187
|
+
int status;
|
188
|
+
RTL_USER_PROCESS_PARAMETERS rtl;
|
189
|
+
MEMORY_BASIC_INFORMATION info;
|
190
|
+
|
191
|
+
if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
|
192
|
+
return status;
|
193
|
+
}
|
194
|
+
|
195
|
+
memset(buf, '\0', size);
|
196
|
+
/* -2 to ensure \0\0 terminator */
|
197
|
+
size -= 2;
|
198
|
+
|
199
|
+
if (VirtualQueryEx(proc, rtl.Environment, &info, sizeof(info))) {
|
200
|
+
if (size > info.RegionSize) {
|
201
|
+
/* ReadProcessMemory beyond region would fail */
|
202
|
+
size = info.RegionSize;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
if (ReadProcessMemory(proc, rtl.Environment, buf, size, NULL)) {
|
207
|
+
return SIGAR_OK;
|
208
|
+
}
|
209
|
+
else {
|
210
|
+
return GetLastError();
|
211
|
+
}
|
212
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#define SIGAR_VERSION_CSV \
|
2
|
+
@@VERSION_MAJOR@@,@@VERSION_MINOR@@,@@VERSION_MAINT@@,@@VERSION_BUILD@@
|
3
|
+
#define SIGAR_VERSION_STR \
|
4
|
+
"@@VERSION_MAJOR@@.@@VERSION_MINOR@@.@@VERSION_MAINT@@.@@VERSION_BUILD@@"
|
5
|
+
|
6
|
+
#define SIGAR_ARCHLIB "@@ARCHLIB@@"
|
7
|
+
|
8
|
+
1 VERSIONINFO
|
9
|
+
FILEVERSION SIGAR_VERSION_CSV
|
10
|
+
PRODUCTVERSION SIGAR_VERSION_CSV
|
11
|
+
FILEFLAGSMASK 0x3fL
|
12
|
+
FILEFLAGS 0x00L
|
13
|
+
#if defined(WINNT) || defined(WIN64)
|
14
|
+
FILEOS 0x40004L
|
15
|
+
#else
|
16
|
+
FILEOS 0x4L
|
17
|
+
#endif
|
18
|
+
FILETYPE 0x2L
|
19
|
+
FILESUBTYPE 0x0L
|
20
|
+
BEGIN
|
21
|
+
BLOCK "StringFileInfo"
|
22
|
+
BEGIN
|
23
|
+
BLOCK "040904b0"
|
24
|
+
BEGIN
|
25
|
+
VALUE "Comments", "http://sigar.hyperic.com/\0"
|
26
|
+
VALUE "CompanyName", "Hyperic, Inc.\0"
|
27
|
+
VALUE "FileDescription", "System Information Gatherer And Reporter DLL\0"
|
28
|
+
VALUE "FileVersion", SIGAR_VERSION_STR "\0"
|
29
|
+
VALUE "InternalName", "sigar.dll\0"
|
30
|
+
VALUE "LegalCopyright", "Copyright [@@COPYRIGHT_YEAR@@], Hyperic, Inc.\0"
|
31
|
+
VALUE "OriginalFilename", SIGAR_ARCHLIB "\0"
|
32
|
+
VALUE "ProductName", "Hyperic SIGAR\0"
|
33
|
+
VALUE "ProductVersion", SIGAR_VERSION_STR "\0"
|
34
|
+
END
|
35
|
+
END
|
36
|
+
BLOCK "VarFileInfo"
|
37
|
+
BEGIN
|
38
|
+
VALUE "Translation", 0x409, 1200
|
39
|
+
END
|
40
|
+
END
|