golang.org/x/sys@v0.9.0/windows/svc/eventlog/install.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build windows 6 // +build windows 7 8 package eventlog 9 10 import ( 11 "errors" 12 13 "golang.org/x/sys/windows" 14 "golang.org/x/sys/windows/registry" 15 ) 16 17 const ( 18 // Log levels. 19 Info = windows.EVENTLOG_INFORMATION_TYPE 20 Warning = windows.EVENTLOG_WARNING_TYPE 21 Error = windows.EVENTLOG_ERROR_TYPE 22 ) 23 24 const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` 25 26 // Install modifies PC registry to allow logging with an event source src. 27 // It adds all required keys and values to the event log registry key. 28 // Install uses msgFile as the event message file. If useExpandKey is true, 29 // the event message file is installed as REG_EXPAND_SZ value, 30 // otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and 31 // log.Info to specify events supported by the new event source. 32 func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error { 33 appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY) 34 if err != nil { 35 return err 36 } 37 defer appkey.Close() 38 39 sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE) 40 if err != nil { 41 return err 42 } 43 defer sk.Close() 44 if alreadyExist { 45 return errors.New(addKeyName + `\` + src + " registry key already exists") 46 } 47 48 err = sk.SetDWordValue("CustomSource", 1) 49 if err != nil { 50 return err 51 } 52 if useExpandKey { 53 err = sk.SetExpandStringValue("EventMessageFile", msgFile) 54 } else { 55 err = sk.SetStringValue("EventMessageFile", msgFile) 56 } 57 if err != nil { 58 return err 59 } 60 err = sk.SetDWordValue("TypesSupported", eventsSupported) 61 if err != nil { 62 return err 63 } 64 return nil 65 } 66 67 // InstallAsEventCreate is the same as Install, but uses 68 // %SystemRoot%\System32\EventCreate.exe as the event message file. 69 func InstallAsEventCreate(src string, eventsSupported uint32) error { 70 return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported) 71 } 72 73 // Remove deletes all registry elements installed by the correspondent Install. 74 func Remove(src string) error { 75 appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE) 76 if err != nil { 77 return err 78 } 79 defer appkey.Close() 80 return registry.DeleteKey(appkey, src) 81 }