Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Benutzerdefiniertes Update mit Windows SteadyState

Mitglied: SarekHL

SarekHL (Level 3) - Jetzt verbinden

30.10.2013, aktualisiert 17:15 Uhr, 1919 Aufrufe, 2 Kommentare

Hallo zusammen,

kennt sich hier noch jemand mit SteadyState aus? Das war das Programm von Microsoft, mit dem man unter Windows XP einen PC in den "Kiosk-Modus" versetzen konnte, und mit dem auch ein Festplattenschutz à la HD-Guard, Drive.Keeper usw. möglich war.

Wenn man so einen Festplattenschutz aktiv hat, ist natürlich das Problem, daß Software-Updates (z.B. von Anti-Virus-Programmen) nicht möglich waren bzw. nach dem nächsten Neustart wieder entfernt wurden. SteadyState konnte die Windows-Updates von Haus aus einspielen, für andere Updates konnte man ein Update-Script erstellen und dieses durch SteadyState aufrufen lassen. Dazu startete SteadyState den Rechner zu einem bestimmten Zeitpunkt neu (nur bis zum Anmeldemaske), spielte dann die Updates ein und übernahme die Änderungen dauerhaft.

Ich habe nun einen Präsentationsrechner unter Windows XP laufen, der mit SteadyState geschützt wird. Auf diesem Rechner soll nun auch Avira Professional Security installiert werden. Der Rechner selbst ist zwar durch den Festplattenschutz schon weitgehend gegen Malware geschützt, aber zur Laufzeit könnte natürlich durchaus ein Wurm den Rechner befallen und von dort aus andere Rechner im Netzwerk attackieren.

Nun habe ich ein Update-Script (in VB6) geschrieben und dies als EXE-Datei compiliert, auf dem Rechner hinterlegt und in SteadyState eingebunden, so daß es täglich um 6 Uhr aufgerufen wird. Das Script ruft die Update-Funktion von Avira als Administrator auf und wartet dann, bis die update.exe wieder beendet ist:


Formularmodul
01.
Private Sub Form_Load()
02.

03.

04.
Dim AdminName As String
05.
Dim AdminPassword As String
06.
Dim AdminDomain As String
07.
Dim ExecCommand As String
08.
Dim ExecDirectory As String
09.
Dim ExecOptions As String
10.
Dim CheckEXE As String
11.

12.
AdminName = "Administrator"
13.
AdminPassword = "anzeige"
14.
AdminDomain = "Display"
15.
ExecDirectory = "c:\programme\avira\antivir desktop\"
16.
ExecCommand = "avcenter.exe"
17.
ExecOptions = "/STARTSILENTUPDATE"
18.
CheckEXE = "update.exe"
19.

20.

21.
' Kontrolleintrag ins Log schreiben
22.
Open "d:\avira.log" For Append As 1
23.
Print #1, Format(Now(), "yyyy.mm.dd-HH:MM:SS") & ";Programm gestartet"
24.
Close 1
25.

26.

27.
' Aufruf des Avira Updates als Administrator
28.
Dummy = W2KRunAsUser(AdminName, AdminPassword, AdminDomain, Chr(34) & ExecDirectory & ExecCommand & Chr(34) & " " & ExecOptions, ExecDirectory)
29.

30.

31.
' Kontrolleintrag ins Log schreiben
32.
Open "d:\avira.log" For Append As 1
33.
Print #1, Format(Now(), "yyyy.mm.dd-HH:MM:SS") & ";Aufruf "
34.
Close 1
35.

36.

37.
' Warten bis avcenter.exe die update.exe aufgerufen hat
38.
Do
39.
DoEvents
40.
Loop Until IsEXERunning(CheckEXE) = -1
41.

42.

43.
' Kontrolleintrag ins Log schreiben
44.
Open "d:\avira.log" For Append As 1
45.
Print #1, Format(Now(), "yyyy.mm.dd-HH:MM:SS") & ";update.exe läuft"
46.
Close 1
47.

48.

49.
' Warten bis update.exe durchgelaufen ist
50.
Do
51.
DoEvents
52.
Loop Until IsEXERunning(CheckEXE) <> -1
53.

54.

55.
' Kontrolleintrag ins Log schreiben
56.
Open "d:\avira.log" For Append As 1
57.
Print #1, Format(Now(), "yyyy.mm.dd-HH:MM:SS") & ";Update finished"
58.
Close 1
59.

60.

61.
' Fünf Minuten zuwarten
62.
Start = Timer
63.
Do While Timer < Start + 300
64.
DoEvents
65.
Loop
66.

67.

68.
' Kontrolleintrag ins Log schreiben
69.
Open "d:\avira.log" For Append As 1
70.
Print #1, Format(Now(), "yyyy.mm.dd-HH:MM:SS") & ";Pause finished"
71.
Close 1
72.

73.

74.
' Programm schließen
75.
Dim oForm As Form
76.
For Each oForm In VB.Forms
77.
    Unload oForm
78.
  Next
79.
  
80.

81.
End Sub

Modul "Funktionen"
01.
' zunächst die benötigten API-Deklarationen
02.
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" _
03.
  Alias "CreateToolhelp32Snapshot" ( _
04.
  ByVal lFlgas As Long, _
05.
  ByVal lProcessID As Long) As Long
06.
 
07.
Private Declare Function ProcessFirst Lib "Kernel32" _
08.
  Alias "Process32First" ( _
09.
  ByVal hSnapshot As Long, _
10.
  uProcess As PROCESSENTRY32) As Long
11.
 
12.
Private Declare Function ProcessNext Lib "Kernel32" _
13.
  Alias "Process32Next" ( _
14.
  ByVal hSnapshot As Long, _
15.
  uProcess As PROCESSENTRY32) As Long
16.
 
17.
Private Declare Function LogonUser Lib "advapi32.dll" Alias _
18.
        "LogonUserA" _
19.
        (ByVal lpszUsername As String, _
20.
        ByVal lpszDomain As String, _
21.
        ByVal lpszPassword As String, _
22.
        ByVal dwLogonType As Long, _
23.
        ByVal dwLogonProvider As Long, _
24.
        phToken As Long) As Long
25.

26.
Private Declare Function CreateProcessAsUser Lib "advapi32.dll" _
27.
        Alias "CreateProcessAsUserA" _
28.
        (ByVal hToken As Long, _
29.
        ByVal lpApplicationName As Long, _
30.
        ByVal lpCommandLine As String, _
31.
        ByVal lpProcessAttributes As Long, _
32.
        ByVal lpThreadAttributes As Long, _
33.
        ByVal bInheritHandles As Long, _
34.
        ByVal dwCreationFlags As Long, _
35.
        ByVal lpEnvironment As Long, _
36.
        ByVal lpCurrentDirectory As String, _
37.
        lpStartupInfo As STARTUPINFO, _
38.
        lpProcessInformation As PROCESS_INFORMATION) As Long
39.

40.
Private Declare Function CreateProcessWithLogonW Lib "advapi32.dll" _
41.
        (ByVal lpUsername As String, _
42.
        ByVal lpDomain As String, _
43.
        ByVal lpPassword As String, _
44.
        ByVal dwLogonFlags As Long, _
45.
        ByVal lpApplicationName As Long, _
46.
        ByVal lpCommandLine As String, _
47.
        ByVal dwCreationFlags As Long, _
48.
        ByVal lpEnvironment As Long, _
49.
        ByVal lpCurrentDirectory As String, _
50.
        ByRef lpStartupInfo As STARTUPINFO, _
51.
        ByRef lpProcessInformation As PROCESS_INFORMATION) As Long
52.
      
53.
Private Declare Function CloseHandle Lib "kernel32.dll" _
54.
        (ByVal hObject As Long) As Long
55.
                             
56.
Private Declare Function SetErrorMode Lib "kernel32.dll" _
57.
        (ByVal uMode As Long) As Long
58.
        
59.
Private Declare Function GetVersionExA Lib "kernel32.dll" _
60.
    (lpVersionInformation As OSVERSIONINFO) As Integer
61.

62.

63.
Private Type PROCESSENTRY32
64.
  dwSize As Long
65.
  cntUsage As Long
66.
  th32ProcessID As Long
67.
  th32DefaultHeapID As Long
68.
  th32ModuleID As Long
69.
  cntThreads As Long
70.
  th32ParentProcessID As Long
71.
  pcPriClassBase As Long
72.
  dwflags As Long
73.
  szexeFile As String * MAX_PATH
74.
End Type
75.

76.
Private Type STARTUPINFO
77.
    cb As Long
78.
    lpReserved As Long ' !!! must be Long for Unicode string
79.
    lpDesktop As Long  ' !!! must be Long for Unicode string
80.
    lpTitle As Long    ' !!! must be Long for Unicode string
81.
    dwX As Long
82.
    dwY As Long
83.
    dwXSize As Long
84.
    dwYSize As Long
85.
    dwXCountChars As Long
86.
    dwYCountChars As Long
87.
    dwFillAttribute As Long
88.
    dwflags As Long
89.
    wShowWindow As Integer
90.
    cbReserved2 As Integer
91.
    lpReserved2 As Long
92.
    hStdInput As Long
93.
    hStdOutput As Long
94.
    hStdError As Long
95.
End Type
96.

97.
Private Type PROCESS_INFORMATION
98.
    hProcess As Long
99.
    hThread As Long
100.
    dwProcessId As Long
101.
    dwThreadId As Long
102.
End Type
103.

104.
Private Type OSVERSIONINFO
105.
    dwOSVersionInfoSize As Long
106.
    dwMajorVersion As Long
107.
    dwMinorVersion As Long
108.
    dwBuildNumber As Long
109.
    dwPlatformId As Long
110.
    szCSDVersion As String * 128
111.
End Type
112.
                             
113.

114.
Private Const TH32CS_SNAPPROCESS As Long = 2&
115.
Private Const MAX_PATH As Long = 260
116.
 
117.
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
118.

119.
Private Const LOGON_WITH_PROFILE = &H1
120.
Private Const LOGON_NETCREDENTIALS_ONLY = &H2
121.

122.
Private Const LOGON32_LOGON_INTERACTIVE = 2
123.
Private Const LOGON32_PROVIDER_DEFAULT = 0
124.
   
125.
Private Const VER_PLATFORM_WIN32_NT = &H2
126.

127.
'  CreateProcessAsUser() requires that the caller has the following permissions
128.
'  Permission                        Display Name
129.
'  ---------------------------------------------------------------
130.
'  SE_ASSIGNPRIMARYTOKEN_NAME       Replace a process level token
131.
'  SE_INCREASE_QUOTA_NAME           Increase quotas
132.
  
133.

134.
Public Function W2KRunAsUser(ByVal UserName As String, _
135.
        ByVal Password As String, _
136.
        ByVal DomainName As String, _
137.
        ByVal CommandLine As String, _
138.
        ByVal CurrentDirectory As String) As Long
139.
 
140.
    Dim si As STARTUPINFO
141.
    Dim pi As PROCESS_INFORMATION
142.
 
143.
    Dim wUser As String
144.
    Dim wDomain As String
145.
    Dim wPassword As String
146.
    Dim wCommandLine As String
147.
    Dim wCurrentDir As String
148.
 
149.
    Dim Result As Long
150.
 
151.
    si.cb = Len(si)
152.
 
153.
    wUser = StrConv(UserName + Chr$(0), vbUnicode)
154.
    wDomain = StrConv(DomainName + Chr$(0), vbUnicode)
155.
    wPassword = StrConv(Password + Chr$(0), vbUnicode)
156.
    wCommandLine = StrConv(CommandLine + Chr$(0), vbUnicode)
157.
    wCurrentDir = StrConv(CurrentDirectory + Chr$(0), vbUnicode)
158.
 
159.
    Result = CreateProcessWithLogonW(wUser, wDomain, wPassword, _
160.
          LOGON_WITH_PROFILE, 0&, wCommandLine, _
161.
          CREATE_DEFAULT_ERROR_MODE, 0&, wCurrentDir, si, pi)
162.
    ' CreateProcessWithLogonW() does not
163.
    If Result <> 0 Then   'Result ist bool Wert.
164.
        CloseHandle pi.hThread
165.
        CloseHandle pi.hProcess
166.
        W2KRunAsUser = 0
167.
    Else
168.
        W2KRunAsUser = Err.LastDllError
169.
        MsgBox "CreateProcessWithLogonW() failed with error " & _
170.
          Err.LastDllError, vbExclamation
171.
    End If
172.
 
173.
End Function
174.

175.

176.
' Prüft, ob eine EXE-Datei bereits ausgeführt wird
177.
Public Function IsEXERunning(ByVal sFilename As String) As Long
178.
 
179.
  Dim lSnapshot As Long
180.
  Dim uProcess As PROCESSENTRY32
181.
  Dim nResult As Long
182.
 
183.
  ' "Snapshot" des aktuellen Prozess ermitteln
184.
  lSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
185.
  If lSnapshot <> 0 Then
186.
    uProcess.dwSize = Len(uProcess)
187.
 
188.
    ' Ersten Prozess ermitteln
189.
    nResult = ProcessFirst(lSnapshot, uProcess)
190.
 
191.
    Do Until nResult = 0
192.
      ' Prozessliste durchlaufen
193.
      If InStr(LCase$(uProcess.szexeFile), LCase$(sFilename)) > 0 Then
194.
        ' Jepp - EXE gefunden
195.
        IsEXERunning = True
196.
        Exit Do
197.
      End If
198.
 
199.
      ' nächster Prozess
200.
      nResult = ProcessNext(lSnapshot, uProcess)
201.
    Loop
202.
 
203.
    ' Handle schliessen
204.
    CloseHandle lSnapshot
205.
  End If
206.
End Function

Das klappt hervorragend, wenn ich an dem PC angemeldet bin und das Programm manuell starte. Das Update wird dann ordnungsgemäß durchgeführt, ist aber natürlich beim nächsten Reboot wieder weg.

Beim Aufruf über SteadyState schlägt das Script aber fehl. Da ich an verschiedenen Stellen eine Kontrollzeile in eine Protokolldatei (auf eine nicht durch den Festplattenschutz geschützte Partition) schreiben lasse, weiß ich auch wo, nämlich beim Aufruf der Funktion W2KRunAsUser. Die Kontrollzeile, die direkt nach diesem Aufruf geschrieben werden sollte, fehlt bereits.


Hat jemand eine Idee, warum das nicht klappt?



Danke im Voraus,
Sarek
Mitglied: DerWoWusste
30.10.2013 um 20:02 Uhr
Moin.

Kann es wohl sein, dass das ausführende Konto (vermutlich System) gar nicht für runas genutzt werden kann?
Lass die Impersonation doch einmal weg und führ es einfach aus, ohne den Admin anzugeben.

BItte antworte auch noch in dem Update-Thread https://www.administrator.de/forum/konzept-f%c3%bcr-updates-von-firefox- ...
Bitte warten ..
Mitglied: SarekHL
30.10.2013, aktualisiert um 21:15 Uhr
Zitat von DerWoWusste:
Kann es wohl sein, dass das ausführende Konto (vermutlich System) gar nicht für runas genutzt werden kann?
Lass die Impersonation doch einmal weg und führ es einfach aus, ohne den Admin anzugeben.

Das habe ich mir vorhin auch schon überlegt. Ich habe das Programm inzwischen angepaßt und verwende jetzt einen normalen Shell-Aufruf. Ich kann aber veraussichtlich erst am Freitag ausprobieren, ob es klappt

Edit: Ich konnte es doch via VPN und RDP jetzt noch testen. Es funktioniert ;)



Da bin ich noch nicht weiter zu gekommen, und da das eher ein allgemeines und nicht dringend anstehendes Thema ist, muß das leider erst mal warten.
Bitte warten ..
Ähnliche Inhalte
Windows Tools

Windows Datenträgerverwaltung buggy! (Windows Vista bis Windows 10)

Erfahrungsbericht von LochkartenstanzerWindows Tools

Moin, Ich habe eine Testkiste mit diversen Windows-Versionen + Ubuntu im Multiboot drauf. Gestern habe ich an den Partitionen ...

Windows 10

Windows Store, Windows 10 Deaktivieren

gelöst Frage von HanutaWindows 1011 Kommentare

Hallo Zusammen, habe einen Reg-Wert: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft mit dem Schlüssel: RemoveWindowsStore DWORD-Wert (32)Bit Wert: 1 Leider wird der Windows Store ...

Windows Server

Windows 2008R2 SMB - Windows 10

Frage von schakaL-Windows Server4 Kommentare

Hallo miteinander, ich habe ein Problem mit dem Zugriff von Windows 10 auf einen Windows Server 2008R2 via Namen/IP, ...

Windows 7

Windows 7 Upgrade - Windows 10

gelöst Frage von MasterofblindWindows 74 Kommentare

Hallo Zusammen, wie würdet ihr eine Migration von ca. 150 PC's mit Windows 7 auf Windows 10 vorbereiten / ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 1 TagDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 1 TagSicherheit1 Kommentar

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 2 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 3 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
Microsoft Office
Sharepoint 2016 mag keine Umlaute in .docx-Titeln
gelöst Frage von DerWoWussteMicrosoft Office14 Kommentare

Moin Kollegen. Nutzt hier jemand Sharepoint? Könnt Ihr, unabhängig von der Sharepointversion, bitte einen Test machen? Ladet ein .docx ...

Basic
VBS soll alle Ordner auswählen, die im Startmenu angezeigt werden
Frage von Senseless-CreatureBasic12 Kommentare

Guten Morgen - gibt es eine Möglichkeit, per VBS das Startmenu in Win10 zu modifizieren? Ich beherrsche VBS mittlerweile ...

Virtualisierung
Physikalischen Linux-Rechner (Debian) in VM umziehen
Frage von fbronkoVirtualisierung10 Kommentare

Moin, ich möchte zu Testzwecken einen physikalisch vorhandenen Linux-Rechner auf Debian-Basis in eine VM umziehen. Ich habe mittlerweile schon ...

Video & Streaming
GO PRO 7 Black 4K 60 FPS MP4 HEVC(H.265) Codier Probleme
gelöst Frage von REN0XXVideo & Streaming10 Kommentare

Mahlzeit, ich habe mir Letztens Die GoPro Hero Black 7 gekauft, da diese nun auch 4K und 60FPS unterstützt ...