GOOGLE ADS

Montag, 18. April 2022

Benutzername und Passwort für einen bestehenden Windows-Dienst in Java über Advapi32 (JNA API) ändern

Ich habe versucht, die Konfiguration für einen vorhandenen Windows-Dienst über die JNA-API zu ändern, insbesondere über die com.sun.jna.platform.win32.Advapi32Klasse, konnte aber nicht genügend Dokumentation dafür finden.

Dasselbe kann durch Ausführen des Befehls ‚sc' in Windows CMD erreicht werden:

sc config "MyServiceName" obj="domain\windowsuser" password= "userpassword"

Bisher habe ich beim Herausfinden von Java-Code (work in progress) Folgendes erreicht:

private static void printAllServices(String username, String password) {
boolean success = false;
SC_HANDLE serviceManager = openServiceControlManager(null, Winsvc.SC_MANAGER_ALL_ACCESS);
if (serviceManager!= null) {
SC_HANDLE service = Advapi32.INSTANCE.OpenService(serviceManager, "MyServiceName",
WinNT.GENERIC_EXECUTE);
if (service!= null) {
SERVICE_STATUS serviceStatus = new SERVICE_STATUS();
success = Advapi32.INSTANCE.ControlService(service, Winsvc.SERVICE_CHANGE_CONFIG, serviceStatus);
Advapi32.INSTANCE.CloseServiceHandle(service);
}
Advapi32.INSTANCE.CloseServiceHandle(serviceManager);
}
}
private static SC_HANDLE openServiceControlManager(String machine, int access) {
return Advapi32.INSTANCE.OpenSCManager(machine, null, access);
}

Mein Ziel ist es, den Benutzernamen/das Passwort zu ändern, unter dem ein vorhandener Windows-Dienst über die Java-API ausgeführt wird (jedoch nicht durch direktes Ausführen des Befehls ‚sc', sondern über die JNA-API).

Jedes Licht in die richtige Richtung (oder Dokumentationsreferenz) wäre hilfreich.


Lösung des Problems

Da es unter Advapi32 keine JNA-API zu geben scheint, wurde eine script.exe aufgerufen (mit Übergabe der erforderlichen Argumente), die C#-Code enthält, der DllImport von „advapi32.dll" durchführt und APIs unter folgenden Importen verwendet

using System.Runtime.InteropServices;
using System.ComponentModel;

Als Referenz: https://www.morgantechspace.com/2015/03/csharp-change-service-account-username-and-password.html

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...