Ecrire dans le registre Windows via Go

Je dois écrire sur le registre Windows via Go, mais je ne parviens pas à trouver le mécanisme pour le faire.

J’ai trouvé que https://github.com/lxn/go-winapi fournit un access en lecture seule au registre dans le fichier advapi32.go . J’ai déposé un rapport de bogue demandant la possibilité d’écrire également dans le Registre pour qu’il devienne une liste de souhaits ou une liste de tâches pour quelqu’un dans le futur.

Je pense que cette capacité n’existe peut-être même pas dans une bibliothèque Go existante et qu’elle doit être créée. Sur la chance que cela existe déjà, je demande ici. S’il n’existe pas mais que vous souhaitez améliorer go-winapi ou une autre bibliothèque similaire, faites-le. Ou si vous connaissez les mécanismes derrière l’écriture dans le registre, partager ces informations pour que je (ou quelqu’un d’autre) puisse les utiliser dans un correctif pour la bibliothèque go-winapi serait certainement apprécié.

Si rien d’autre, je reviendrai ici pour répondre à cette question (si personne d’autre ne le fait) si je suis capable de l’append à go-winapi ou à une bibliothèque similaire.

Trouvé à bitbucket.org/kardianos/service/src/service_windows.go , il y a du code de registre Windows avec le code de gestion du service Windows (bonus!). Voici un exemple de ce code:

var regSetKeyValueExProc = advapi.MustFindProc("RegSetValueExW") func regSetKeyValue(h syscall.Handle, keyName ssortingng, data interface{}) error { var dataPtr, dataLen, dataType uintptr switch v := data.(type) { case uint32: dataPtr, dataLen = uintptr(unsafe.Pointer(&v)), 4 dataType = _REG_DWORD case ssortingng: // The comment on MSDN regarding escaping back-slashes, are c-lang specific. // The API just takes a normal NUL terminated ssortingng, no special escaping required. dataPtr, dataLen = SsortingngToUTF16PtrLen(v) dataType = _REG_SZ } r0, _, e1 := regSetKeyValueExProc.Call( uintptr(h), uintptr(unsafe.Pointer(syscall.SsortingngToUTF16Ptr(keyName))), 0, dataType, dataPtr, dataLen, ) if r0 != 0 { return e1 } return nil } 

Une autre option consiste à utiliser WMI pour lire / écrire le registre, qui est également accessible via Go.

WMIC: Travailler avec le registre décrit comment s’y prendre via l’outil de ligne de commande WMIC sous Windows. Cela peut être adapté pour être utilisé dans n’importe quel environnement de programmation pouvant interagir avec WMI.

Je laisse la réponse de user1391070 comme réponse repérée, mais cela pourrait aider quelqu’un qui a besoin d’aller sur l’itinéraire WMI.