common

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2023 License: BSD-3-Clause Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ERROR_SUCCESS        = 0
	ERROR_FILE_NOT_FOUND = 2
	DRIVE_REMOVABLE      = 2
	DRIVE_FIXED          = 3
	HKEY_LOCAL_MACHINE   = 0x80000002
	RRF_RT_REG_SZ        = 0x00000002
	RRF_RT_REG_DWORD     = 0x00000010
	PDH_FMT_LONG         = 0x00000100
	PDH_FMT_DOUBLE       = 0x00000200
	PDH_FMT_LARGE        = 0x00000400
	PDH_INVALID_DATA     = 0xc0000bc6
	PDH_INVALID_HANDLE   = 0xC0000bbc
	PDH_NO_DATA          = 0x800007d5

	STATUS_BUFFER_OVERFLOW      = 0x80000005
	STATUS_BUFFER_TOO_SMALL     = 0xC0000023
	STATUS_INFO_LENGTH_MISMATCH = 0xC0000004
)

windows system const

View Source
const (
	ProcessBasicInformation = 0
	ProcessWow64Information = 26
	ProcessQueryInformation = windows.PROCESS_DUP_HANDLE | windows.PROCESS_QUERY_INFORMATION

	SystemExtendedHandleInformationClass = 64
)

Variables

View Source
var (
	Timeout    = 3 * time.Second
	ErrTimeout = errors.New("command timed out")
)
View Source
var (
	Modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
	ModNt       = windows.NewLazySystemDLL("ntdll.dll")
	ModPdh      = windows.NewLazySystemDLL("pdh.dll")
	ModPsapi    = windows.NewLazySystemDLL("psapi.dll")

	ProcGetSystemTimes                   = Modkernel32.NewProc("GetSystemTimes")
	ProcNtQuerySystemInformation         = ModNt.NewProc("NtQuerySystemInformation")
	ProcRtlGetNativeSystemInformation    = ModNt.NewProc("RtlGetNativeSystemInformation")
	ProcRtlNtStatusToDosError            = ModNt.NewProc("RtlNtStatusToDosError")
	ProcNtQueryInformationProcess        = ModNt.NewProc("NtQueryInformationProcess")
	ProcNtReadVirtualMemory              = ModNt.NewProc("NtReadVirtualMemory")
	ProcNtWow64QueryInformationProcess64 = ModNt.NewProc("NtWow64QueryInformationProcess64")
	ProcNtWow64ReadVirtualMemory64       = ModNt.NewProc("NtWow64ReadVirtualMemory64")

	PdhOpenQuery                = ModPdh.NewProc("PdhOpenQuery")
	PdhAddEnglishCounterW       = ModPdh.NewProc("PdhAddEnglishCounterW")
	PdhCollectQueryData         = ModPdh.NewProc("PdhCollectQueryData")
	PdhGetFormattedCounterValue = ModPdh.NewProc("PdhGetFormattedCounterValue")
	PdhCloseQuery               = ModPdh.NewProc("PdhCloseQuery")
)
View Source
var BigEndian bigEndian

BigEndian is the big-endian implementation of ByteOrder.

View Source
var ErrNotImplementedError = errors.New("not implemented yet")
View Source
var LittleEndian littleEndian

LittleEndian is the little-endian implementation of ByteOrder.

Functions

func BytePtrToString

func BytePtrToString(p *uint8) string

borrowed from net/interface_windows.go

func ByteToString

func ByteToString(orig []byte) string

func ConvertDOSPath

func ConvertDOSPath(p string) string

Convert paths using native DOS format like:

"\Device\HarddiskVolume1\Windows\systemew\file.txt"

into:

"C:\Windows\systemew\file.txt"

func CreateQuery

func CreateQuery() (windows.Handle, error)

CreateQuery with a PdhOpenQuery call copied from https://github.com/mackerelio/mackerel-agent/

func GetCounterValue

func GetCounterValue(counter windows.Handle) (float64, error)

GetCounterValue get counter value from handle adapted from https://github.com/mackerelio/mackerel-agent/

func GetEnv

func GetEnv(key string, dfault string, combineWith ...string) string

GetEnv retrieves the environment variable key. If it does not exist it returns the default.

func GetEnvWithContext

func GetEnvWithContext(ctx context.Context, key string, dfault string, combineWith ...string) string

GetEnvWithContext retrieves the environment variable key. If it does not exist it returns the default. The context may optionally contain a map superseding os.EnvKey.

func HexToUint32

func HexToUint32(hex string) uint32

Parse Hex to uint32 without error

func HostDev

func HostDev(combineWith ...string) string

func HostDevWithContext

func HostDevWithContext(ctx context.Context, combineWith ...string) string

func HostEtc

func HostEtc(combineWith ...string) string

func HostEtcWithContext

func HostEtcWithContext(ctx context.Context, combineWith ...string) string

func HostProc

func HostProc(combineWith ...string) string

func HostProcMountInfoWithContext

func HostProcMountInfoWithContext(ctx context.Context, combineWith ...string) string

func HostProcWithContext

func HostProcWithContext(ctx context.Context, combineWith ...string) string

func HostRoot

func HostRoot(combineWith ...string) string

func HostRootWithContext

func HostRootWithContext(ctx context.Context, combineWith ...string) string

func HostRun

func HostRun(combineWith ...string) string

func HostRunWithContext

func HostRunWithContext(ctx context.Context, combineWith ...string) string

func HostSys

func HostSys(combineWith ...string) string

func HostSysWithContext

func HostSysWithContext(ctx context.Context, combineWith ...string) string

func HostVar

func HostVar(combineWith ...string) string

func HostVarWithContext

func HostVarWithContext(ctx context.Context, combineWith ...string) string

func IntContains

func IntContains(target []int, src int) bool

IntContains checks the src in any int of the target int slice.

func IntToString

func IntToString(orig []int8) string

func IsLittleEndian

func IsLittleEndian() bool

IsLittleEndian checks if the current platform uses little-endian. copied from https://github.com/ntrrg/ntgo/blob/v0.8.0/runtime/infrastructure.go#L16 (MIT License)

func PathExists

func PathExists(filename string) bool

func PathExistsWithContents

func PathExistsWithContents(filename string) bool

PathExistsWithContents returns the filename exists and it is not empty

func Read

func Read(r io.Reader, order ByteOrder, data interface{}) error

Read reads structured binary data from r into data. Data must be a pointer to a fixed-size value or a slice of fixed-size values. Bytes read from r are decoded using the specified byte order and written to successive fields of the data. When reading into structs, the field data for fields with blank (_) field names is skipped; i.e., blank field names may be used for padding. When reading into a struct, all non-blank fields must be exported.

func ReadFile

func ReadFile(filename string) (string, error)

ReadFile reads contents from a file

func ReadInts

func ReadInts(filename string) ([]int64, error)

ReadInts reads contents from single line file and returns them as []int32.

func ReadLine

func ReadLine(filename string, prefix string) (string, error)

ReadLine reads a file and returns the first occurrence of a line that is prefixed with prefix.

func ReadLines

func ReadLines(filename string) ([]string, error)

ReadLines reads contents from a file and splits them by new lines. A convenience wrapper to ReadLinesOffsetN(filename, 0, -1).

func ReadLinesOffsetN

func ReadLinesOffsetN(filename string, offset uint, n int) ([]string, error)

ReadLinesOffsetN reads contents from file and splits them by new line. The offset tells at which line number to start. The count determines the number of lines to read (starting from offset): n >= 0: at most n lines n < 0: whole file

func Size

func Size(v interface{}) int

Size returns how many bytes Write would generate to encode the value v, which must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. If v is neither of these, Size returns -1.

func Sleep

func Sleep(ctx context.Context, interval time.Duration) error

Sleep awaits for provided interval. Can be interrupted by context cancelation.

func StringsContains

func StringsContains(target []string, src string) bool

StringsContains checks the src in any string of the target string slice

func StringsHas

func StringsHas(target []string, src string) bool

StringsHas checks the target string slice contains src or not

func UintToString

func UintToString(orig []uint8) string

func WMIQueryWithContext

func WMIQueryWithContext(ctx context.Context, query string, dst interface{}, connectServerArgs ...interface{}) error

WMIQueryWithContext - wraps wmi.Query with a timed-out context to avoid hanging

func Write

func Write(w io.Writer, order ByteOrder, data interface{}) error

Write writes the binary representation of data into w. Data must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.

Types

type ByteOrder

type ByteOrder interface {
	Uint16([]byte) uint16
	Uint32([]byte) uint32
	Uint64([]byte) uint64
	PutUint16([]byte, uint16)
	PutUint32([]byte, uint32)
	PutUint64([]byte, uint64)
	String() string
}

A ByteOrder specifies how to convert byte sequences into 16-, 32-, or 64-bit unsigned integers.

type CounterInfo

type CounterInfo struct {
	PostName    string
	CounterName string
	Counter     windows.Handle
}

CounterInfo struct is used to track a windows performance counter copied from https://github.com/mackerelio/mackerel-agent/

func CreateCounter

func CreateCounter(query windows.Handle, pname, cname string) (*CounterInfo, error)

CreateCounter with a PdhAddEnglishCounterW call

type FILETIME

type FILETIME struct {
	DwLowDateTime  uint32
	DwHighDateTime uint32
}

type FakeInvoke

type FakeInvoke struct {
	Suffix string // Suffix species expected file name suffix such as "fail"
	Error  error  // If Error specified, return the error.
}

func (FakeInvoke) Command

func (i FakeInvoke) Command(name string, arg ...string) ([]byte, error)

Command in FakeInvoke returns from expected file if exists.

func (FakeInvoke) CommandWithContext

func (i FakeInvoke) CommandWithContext(ctx context.Context, name string, arg ...string) ([]byte, error)

type Invoke

type Invoke struct{}

func (Invoke) Command

func (i Invoke) Command(name string, arg ...string) ([]byte, error)

func (Invoke) CommandWithContext

func (i Invoke) CommandWithContext(ctx context.Context, name string, arg ...string) ([]byte, error)

type Invoker

type Invoker interface {
	Command(string, ...string) ([]byte, error)
	CommandWithContext(context.Context, string, ...string) ([]byte, error)
}

type NtStatus

type NtStatus uint32

func CallWithExpandingBuffer

func CallWithExpandingBuffer(fn func() NtStatus, buf *[]byte, resultLength *uint32) NtStatus

CallWithExpandingBuffer https://github.com/hillu/go-ntdll

func NtQuerySystemInformation

func NtQuerySystemInformation(
	SystemInformationClass uint32,
	SystemInformation *byte,
	SystemInformationLength uint32,
	ReturnLength *uint32,
) NtStatus

func (NtStatus) Error

func (s NtStatus) Error() error

func (NtStatus) IsError

func (s NtStatus) IsError() bool

type PDH_FMT_COUNTERVALUE_DOUBLE

type PDH_FMT_COUNTERVALUE_DOUBLE struct {
	CStatus     uint32
	DoubleValue float64
}

for double values

type PDH_FMT_COUNTERVALUE_LARGE

type PDH_FMT_COUNTERVALUE_LARGE struct {
	CStatus    uint32
	LargeValue int64
}

for 64 bit integer values

type PDH_FMT_COUNTERVALUE_LONG

type PDH_FMT_COUNTERVALUE_LONG struct {
	CStatus   uint32
	LongValue int32
	// contains filtered or unexported fields
}

for long values

type SystemExtendedHandleInformation

type SystemExtendedHandleInformation struct {
	NumberOfHandles uintptr
	Reserved        uintptr
	Handles         [1]SystemExtendedHandleTableEntryInformation
}

type SystemExtendedHandleTableEntryInformation

type SystemExtendedHandleTableEntryInformation struct {
	Object                uintptr
	UniqueProcessId       uintptr
	HandleValue           uintptr
	GrantedAccess         uint32
	CreatorBackTraceIndex uint16
	ObjectTypeIndex       uint16
	HandleAttributes      uint32
	Reserved              uint32
}

type Warnings

type Warnings struct {
	List    []error
	Verbose bool
}

func (*Warnings) Add

func (w *Warnings) Add(err error)

func (*Warnings) Error

func (w *Warnings) Error() string

func (*Warnings) Reference

func (w *Warnings) Reference() error

type Win32PerformanceCounter

type Win32PerformanceCounter struct {
	PostName    string
	CounterName string
	Query       windows.Handle
	Counter     windows.Handle
}

func NewWin32PerformanceCounter

func NewWin32PerformanceCounter(postName, counterName string) (*Win32PerformanceCounter, error)

func ProcessorQueueLengthCounter

func ProcessorQueueLengthCounter() (*Win32PerformanceCounter, error)

func (*Win32PerformanceCounter) GetValue

func (w *Win32PerformanceCounter) GetValue() (float64, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL