This is a fork from "https://github.com/iamacarpet/go-win64api" but with Windows 32 support. For an internal project, this is a set of wrappers for snippets of the Windows API. Tested and developed for Windows 10 32/64, Win8 32/64, Win7 32/64
All functions that return useful data, do so in the form of JSON exportable structs.
These structs are available in the shared library, "github.com/pavelblossom/go-win64api/shared"
package main
import (
"fmt"
wapi "github.com/pavelblossom/go-win64api"
)
func main(){
pr, err := wapi.ProcessList()
if err != nil {
fmt.Printf("Error fetching process list... %s\r\n", err.Error())
}
for _, p := range pr {
fmt.Printf("%8d - %-30s - %-30s - %s\r\n", p.Pid, p.Username, p.Executable, p.Fullpath)
}
}
package main
import (
"fmt"
wapi "github.com/pavel/go-win64api"
)
func main(){
// This check runs best as NT AUTHORITY\SYSTEM
//
// Running as a normal or even elevated user,
// we can't properly detect who is an admin or not.
//
// This is because we require TOKEN_DUPLICATE permission,
// which we don't seem to have otherwise (Win10).
users, err := wapi.ListLoggedInUsers()
if err != nil {
fmt.Printf("Error fetching user session list.\r\n")
return
}
fmt.Printf("Users currently logged in (Admin check doesn't work for AD Accounts):\r\n")
for _, u := range users {
fmt.Printf("\t%-50s - Local User: %-5t - Local Admin: %t\r\n", u.FullUser(), u.LocalUser, u.LocalAdmin)
}
}
package main
import (
"fmt"
wapi "github.com/pavelblossom/go-win64api"
)
func main(){
sw, err := wapi.InstalledSoftwareList()
if err != nil {
fmt.Printf("%s\r\n", err.Error())
}
for _, s := range sw {
fmt.Printf("%-100s - %s - %s\r\n", s.Name(), s.Architecture(), s.Version())
}
}
package main
import (
"fmt"
"time"
wapi "github.com/pavelblossom/go-win64api"
)
func main() {
ret, err := wapi.UpdatesPending()
if err != nil {
fmt.Printf("Error fetching data... %s\r\n", err.Error())
}
fmt.Printf("Number of Updates Available: %d\n", ret.NumUpdates)
fmt.Printf("Updates Pending: %t\n\n", ret.UpdatesReq)
fmt.Printf("%25s | %25s | %s\n", "EVENT DATE", "STATUS", "UPDATE NAME")
for _, v := range ret.UpdateHistory {
fmt.Printf("%25s | %25s | %s\n", v.EventDate.Format(time.RFC822), v.Status, v.UpdateName)
}
}
package main
import (
"fmt"
wapi "github.com/pavelblossom/go-win64api"
)
func main(){
svc, err := wapi.GetServices()
if err != nil {
fmt.Printf("%s\r\n", err.Error())
}
for _, v := range svc {
fmt.Printf("%-50s - %-75s - Status: %-20s - Accept Stop: %-5t, Running Pid: %d\r\n", v.SCName, v.DisplayName, v.StatusText, v.AcceptStop, v.RunningPid)
}
}
err := wapi.StartService(service_name)
err := wapi.StopService(service_name)
package main
import (
"fmt"
"time"
wapi "github.com/pavelblossom/go-win64api"
)
func main(){
users, err := wapi.ListLocalUsers()
if err != nil {
fmt.Printf("Error fetching user list, %s.\r\n", err.Error())
return
}
for _, u := range users {
fmt.Printf("%s (%s)\r\n", u.Username, u.FullName)
fmt.Printf("\tIs Enabled: %t\r\n", u.IsEnabled)
fmt.Printf("\tIs Locked: %t\r\n", u.IsLocked)
fmt.Printf("\tIs Admin: %t\r\n", u.IsAdmin)
fmt.Printf("\tPassword Never Expires: %t\r\n", u.PasswordNeverExpires)
fmt.Printf("\tUser can't change password: %t\r\n", u.NoChangePassword)
fmt.Printf("\tPassword Age: %.0f days\r\n", (u.PasswordAge.Hours()/24))
fmt.Printf("\tLast Logon Time: %s\r\n", u.LastLogon.Format(time.RFC850))
fmt.Printf("\tBad Password Count: %d\r\n", u.BadPasswordCount)
fmt.Printf("\tNumber Of Logons: %d\r\n", u.NumberOfLogons)
}
}
ok, err := wapi.UserAdd(username, fullname, password)
ok, err := wapi.UserDelete(username)
ok, err := wapi.UserUpdateFullname(username, fullname)
ok, err := wapi.SetAdmin(username)
ok, err := wapi.RevokeAdmin(username)
s := true // disable user
s := false // enable user
ok, err := wapi.UserDisabled(username, s)
s := true // User can't change password
s := false // User can change password
ok, err := wapi.UserDisablePasswordChange(username, s)
s := true // Password never expires.
s := false // Enable password expiry.
ok, err := wapi.UserPasswordNoExpires(username, s)
ok, err := wapi.ChangePassword(username, newpassword)
added, err := wapi.FirewallRuleCreate(
"App Rule Name",
"App Rule Long Description.",
"My Rule Group",
"%systemDrive%\\path\\to\\my.exe",
"port number as string",
wapi.NET_FW_IP_PROTOCOL_TCP,
)