Add PROCESSENTRY32
diff --git a/kernel32.go b/kernel32.go
index e7af4ed..891ec15 100644
--- a/kernel32.go
+++ b/kernel32.go
@@ -36,6 +36,8 @@
 	procCreateToolhelp32Snapshot   = modkernel32.NewProc("CreateToolhelp32Snapshot")
 	procModule32First              = modkernel32.NewProc("Module32FirstW")
 	procModule32Next               = modkernel32.NewProc("Module32NextW")
+	procProcess32First             = modkernel32.NewProc("Process32FirstW")
+	procProcess32Next              = modkernel32.NewProc("Process32NextW")
 	procGetSystemTimes             = modkernel32.NewProc("GetSystemTimes")
 	procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo")
 	procSetConsoleTextAttribute    = modkernel32.NewProc("SetConsoleTextAttribute")
@@ -247,7 +249,21 @@
 
 	return ret != 0
 }
+func Process32First(snapshot HANDLE, pe *PROCESSENTRY32) bool {
+	ret, _, _ := procProcess32First.Call(
+		uintptr(snapshot),
+		uintptr(unsafe.Pointer(pe)))
 
+	return ret != 0
+}
+
+func Process32Next(snapshot HANDLE, pe *PROCESSENTRY32) bool {
+	ret, _, _ := procProcess32Next.Call(
+		uintptr(snapshot),
+		uintptr(unsafe.Pointer(pe)))
+
+	return ret != 0
+}
 func GetSystemTimes(lpIdleTime, lpKernelTime, lpUserTime *FILETIME) bool {
 	ret, _, _ := procGetSystemTimes.Call(
 		uintptr(unsafe.Pointer(lpIdleTime)),
diff --git a/typedef.go b/typedef.go
index cf57e70..65f5111 100644
--- a/typedef.go
+++ b/typedef.go
@@ -655,6 +655,18 @@
 	DwCheckPoint              uint32
 	DwWaitHint                uint32
 }
+type PROCESSENTRY32 struct {
+	DwSize              uint32
+	CntUsage            uint32
+	Th32ProcessID       uint32
+	Th32DefaultHeapID   uintptr
+	Th32ModuleID        uint32
+	CntThreads          uint32
+	Th32ParentProcessID uint32
+	PcPriClassBase      int32
+	DwFlags             uint32
+	SzExeFile           [MAX_PATH]uint16
+}
 
 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx
 type MODULEENTRY32 struct {