Initial commit with project setup and basic structure established.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package instance
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
|
||||
"tea.chunkbyte.com/kato/go-worm/lib/config"
|
||||
)
|
||||
|
||||
type Guard struct {
|
||||
handle windows.Handle
|
||||
}
|
||||
|
||||
func Acquire() (*Guard, error) {
|
||||
name, err := windows.UTF16PtrFromString(config.MutexName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
h, err := windows.CreateMutex(nil, false, name)
|
||||
if h == 0 {
|
||||
return nil, err
|
||||
}
|
||||
if errors.Is(err, windows.ERROR_ALREADY_EXISTS) {
|
||||
windows.CloseHandle(h)
|
||||
return nil, errors.New("agent already running")
|
||||
}
|
||||
return &Guard{handle: h}, nil
|
||||
}
|
||||
|
||||
func (g *Guard) Close() {
|
||||
if g == nil || g.handle == 0 {
|
||||
return
|
||||
}
|
||||
windows.CloseHandle(g.handle)
|
||||
g.handle = 0
|
||||
}
|
||||
Reference in New Issue
Block a user