mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-08 19:29:17 +08:00

* MF-216 - Integrate Bashflux into monorepo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename clients -> things Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix FormatResLog Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Initialize Channels commands in channels.go Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Mv bashflux to cmd/ repertory Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Mv API commands files to bashflux repertory Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Initialize Users commands in users.go Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Initialize Version command in version.go Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Initialize Messages command in messages.go Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm bashflux .gitignore and mv commands to root .gitignore Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename API commands vars Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix certificates paths Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm test logs Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Remove get channels cmd without arguments Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix connect and disconnect commands Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix messages endpoint Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm useless comments and dead code Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use contentTypeSenml var Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename cmdCobra -> cmd Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm else statments Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename SetServerAddr function vars Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename conf parameters Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename main with proper name Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix Update channel comment Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix README Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm .DS_Store from .gitignore Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename hhtp_client.go -> http.go Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm DeleteAllChannels and DeleteAllThings funcs Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix BF users usage log Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Improve bashflux logs Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Share types in funcs Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix BF version cmd Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Set certs paths via env variables Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix package Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm not direct dependencies from Gopkg.toml Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix README Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add def prefix to certificates paths Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * User thiings service for version cmd Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename GetReqResp -> SendRequest Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix version help Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Return directly the pointer in NewVersionCmd Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Define endpoints names as consts and be consistent with naming Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use Spintf for string concatenation Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix README Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix version endpoint Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix serverAddr Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>
99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
// +build windows
|
|
// +build !go1.4
|
|
|
|
package mousetrap
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
const (
|
|
// defined by the Win32 API
|
|
th32cs_snapprocess uintptr = 0x2
|
|
)
|
|
|
|
var (
|
|
kernel = syscall.MustLoadDLL("kernel32.dll")
|
|
CreateToolhelp32Snapshot = kernel.MustFindProc("CreateToolhelp32Snapshot")
|
|
Process32First = kernel.MustFindProc("Process32FirstW")
|
|
Process32Next = kernel.MustFindProc("Process32NextW")
|
|
)
|
|
|
|
// ProcessEntry32 structure defined by the Win32 API
|
|
type processEntry32 struct {
|
|
dwSize uint32
|
|
cntUsage uint32
|
|
th32ProcessID uint32
|
|
th32DefaultHeapID int
|
|
th32ModuleID uint32
|
|
cntThreads uint32
|
|
th32ParentProcessID uint32
|
|
pcPriClassBase int32
|
|
dwFlags uint32
|
|
szExeFile [syscall.MAX_PATH]uint16
|
|
}
|
|
|
|
func getProcessEntry(pid int) (pe *processEntry32, err error) {
|
|
snapshot, _, e1 := CreateToolhelp32Snapshot.Call(th32cs_snapprocess, uintptr(0))
|
|
if snapshot == uintptr(syscall.InvalidHandle) {
|
|
err = fmt.Errorf("CreateToolhelp32Snapshot: %v", e1)
|
|
return
|
|
}
|
|
defer syscall.CloseHandle(syscall.Handle(snapshot))
|
|
|
|
var processEntry processEntry32
|
|
processEntry.dwSize = uint32(unsafe.Sizeof(processEntry))
|
|
ok, _, e1 := Process32First.Call(snapshot, uintptr(unsafe.Pointer(&processEntry)))
|
|
if ok == 0 {
|
|
err = fmt.Errorf("Process32First: %v", e1)
|
|
return
|
|
}
|
|
|
|
for {
|
|
if processEntry.th32ProcessID == uint32(pid) {
|
|
pe = &processEntry
|
|
return
|
|
}
|
|
|
|
ok, _, e1 = Process32Next.Call(snapshot, uintptr(unsafe.Pointer(&processEntry)))
|
|
if ok == 0 {
|
|
err = fmt.Errorf("Process32Next: %v", e1)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func getppid() (pid int, err error) {
|
|
pe, err := getProcessEntry(os.Getpid())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
pid = int(pe.th32ParentProcessID)
|
|
return
|
|
}
|
|
|
|
// StartedByExplorer returns true if the program was invoked by the user double-clicking
|
|
// on the executable from explorer.exe
|
|
//
|
|
// It is conservative and returns false if any of the internal calls fail.
|
|
// It does not guarantee that the program was run from a terminal. It only can tell you
|
|
// whether it was launched from explorer.exe
|
|
func StartedByExplorer() bool {
|
|
ppid, err := getppid()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
pe, err := getProcessEntry(ppid)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
name := syscall.UTF16ToString(pe.szExeFile[:])
|
|
return name == "explorer.exe"
|
|
}
|