Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Canread
Gopsutil
提交
5126ce48
G
Gopsutil
项目概览
Canread
/
Gopsutil
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gopsutil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5126ce48
编写于
4月 28, 2014
作者:
W
WAKAYAMA Shirou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change to use (modified version of ) github.com/AllenDang/w32 on windows
上级
ed92078b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
48 addition
and
37 deletion
+48
-37
common_windows.go
common_windows.go
+4
-1
cpu_windows.go
cpu_windows.go
+0
-5
disk_windows.go
disk_windows.go
+1
-1
host_windows.go
host_windows.go
+2
-2
mem_windows.go
mem_windows.go
+1
-1
process_windows.go
process_windows.go
+40
-27
未找到文件。
common_windows.go
浏览文件 @
5126ce48
...
...
@@ -7,8 +7,11 @@ import (
)
var
(
mod
K
ernel32
=
syscall
.
NewLazyDLL
(
"kernel32.dll"
)
mod
k
ernel32
=
syscall
.
NewLazyDLL
(
"kernel32.dll"
)
modNt
=
syscall
.
NewLazyDLL
(
"ntdll.dll"
)
procGetSystemTimes
=
modkernel32
.
NewProc
(
"GetSystemTimes"
)
procNtQuerySystemInformation
=
modNt
.
NewProc
(
"NtQuerySystemInformation"
)
)
type
FILETIME
struct
{
...
...
cpu_windows.go
浏览文件 @
5126ce48
...
...
@@ -7,11 +7,6 @@ import (
"unsafe"
)
var
(
modkernel32
=
syscall
.
NewLazyDLL
(
"kernel32.dll"
)
procGetSystemTimes
=
modkernel32
.
NewProc
(
"GetSystemTimes"
)
)
func
Cpu_times
()
([]
CPU_TimesStat
,
error
)
{
ret
:=
make
([]
CPU_TimesStat
,
0
)
...
...
disk_windows.go
浏览文件 @
5126ce48
...
...
@@ -12,7 +12,7 @@ var (
procGetDiskFreeSpaceExW
=
modkernel32
.
NewProc
(
"GetDiskFreeSpaceExW"
)
procGetLogicalDriveStringsW
=
modkernel32
.
NewProc
(
"GetLogicalDriveStringsW"
)
procGetDriveType
=
modkernel32
.
NewProc
(
"GetDriveTypeW"
)
provGetVolumeInformation
=
mod
K
ernel32
.
NewProc
(
"GetVolumeInformationW"
)
provGetVolumeInformation
=
mod
k
ernel32
.
NewProc
(
"GetVolumeInformationW"
)
)
var
(
...
...
host_windows.go
浏览文件 @
5126ce48
...
...
@@ -10,8 +10,8 @@ import (
)
var
(
procGetSystemTimeAsFileTime
=
mod
K
ernel32
.
NewProc
(
"GetSystemTimeAsFileTime"
)
procGetTickCount
=
mod
K
ernel32
.
NewProc
(
"GetTickCount"
)
procGetSystemTimeAsFileTime
=
mod
k
ernel32
.
NewProc
(
"GetSystemTimeAsFileTime"
)
procGetTickCount
=
mod
k
ernel32
.
NewProc
(
"GetTickCount"
)
)
func
HostInfo
()
(
HostInfoStat
,
error
)
{
...
...
mem_windows.go
浏览文件 @
5126ce48
...
...
@@ -8,7 +8,7 @@ import (
)
var
(
procGlobalMemoryStatusEx
=
mod
K
ernel32
.
NewProc
(
"GlobalMemoryStatusEx"
)
procGlobalMemoryStatusEx
=
mod
k
ernel32
.
NewProc
(
"GlobalMemoryStatusEx"
)
)
type
MEMORYSTATUSEX
struct
{
...
...
process_windows.go
浏览文件 @
5126ce48
...
...
@@ -3,17 +3,12 @@
package
gopsutil
import
(
"errors"
"fmt"
"syscall"
"unsafe"
)
var
(
procCloseHandle
=
modKernel32
.
NewProc
(
"CloseHandle"
)
procCreateToolhelp32Snapshot
=
modKernel32
.
NewProc
(
"CreateToolhelp32Snapshot"
)
procProcess32First
=
modKernel32
.
NewProc
(
"Process32FirstW"
)
procProcess32Next
=
modKernel32
.
NewProc
(
"Process32NextW"
)
procNtQuerySystemInformation
=
modNt
.
NewProc
(
"NtQuerySystemInformation"
)
"github.com/shirou/w32"
)
const
(
...
...
@@ -57,6 +52,7 @@ type Memory_mapsStat struct {
}
func
Pids
()
([]
int32
,
error
)
{
ret
:=
make
([]
int32
,
0
)
procs
,
err
:=
processes
()
...
...
@@ -199,37 +195,54 @@ func copy_params(pe32 *PROCESSENTRY32, p *Process) error {
return
nil
}
func
printModuleInfo
(
me32
*
w32
.
MODULEENTRY32
)
{
fmt
.
Printf
(
"Exe: %s
\n
"
,
syscall
.
UTF16ToString
(
me32
.
SzExePath
[
:
]))
}
func
printProcessInfo
(
pid
uint32
)
error
{
snap
:=
w32
.
CreateToolhelp32Snapshot
(
w32
.
TH32CS_SNAPMODULE
,
pid
)
if
snap
==
0
{
return
errors
.
New
(
"snapshot could not be created"
)
}
defer
w32
.
CloseHandle
(
snap
)
var
me32
w32
.
MODULEENTRY32
me32
.
Size
=
uint32
(
unsafe
.
Sizeof
(
me32
))
if
!
w32
.
Module32First
(
snap
,
&
me32
)
{
return
errors
.
New
(
"module information retrieval failed"
)
}
fmt
.
Printf
(
"pid:%d
\n
"
,
pid
)
printModuleInfo
(
&
me32
)
for
w32
.
Module32Next
(
snap
,
&
me32
)
{
printModuleInfo
(
&
me32
)
}
return
nil
}
// Get processes
// This is borrowed from go-ps
func
processes
()
([]
*
Process
,
error
)
{
handle
,
_
,
_
:=
procCreateToolhelp32Snapshot
.
Call
(
0x00000002
,
0
)
if
handle
<
0
{
ps
:=
make
([]
uint32
,
255
)
var
read
uint32
=
0
if
w32
.
EnumProcesses
(
ps
,
uint32
(
len
(
ps
)),
&
read
)
==
false
{
println
(
"could not read processes"
)
return
nil
,
syscall
.
GetLastError
()
}
defer
procCloseHandle
.
Call
(
handle
)
var
entry
PROCESSENTRY32
entry
.
DwSize
=
uint32
(
unsafe
.
Sizeof
(
entry
))
ret
,
_
,
_
:=
procProcess32First
.
Call
(
handle
,
uintptr
(
unsafe
.
Pointer
(
&
entry
)))
if
ret
==
0
{
return
nil
,
fmt
.
Errorf
(
"Error retrieving process info."
)
}
results
:=
make
([]
*
Process
,
0
)
for
{
pid
:=
int32
(
entry
.
Th32ProcessID
)
p
,
err
:=
NewProcess
(
pid
)
for
_
,
pid
:=
range
ps
[
:
read
/
4
]
{
if
pid
==
0
{
continue
}
p
,
err
:=
NewProcess
(
int32
(
pid
))
if
err
!=
nil
{
break
}
results
=
append
(
results
,
p
)
ret
,
_
,
_
:=
procProcess32Next
.
Call
(
handle
,
uintptr
(
unsafe
.
Pointer
(
&
entry
)))
if
ret
==
0
{
break
}
// printProcessInfo(pid)
}
return
results
,
nil
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录