Mit den beiden Tipps Einen Prozess beenden und der API-Funktion CreateToolhelp32Snapshot lässt sich sehr bequem ein Programm entwickeln, das alle ungewünschten Programme schnell beendet. Einige Prozesse weigern sich ab WinNT jedoch mit TerminateProcess beendet zu werden. Damit auch diese hartnäckigen Prozesse beendet werden können, muss das Programm Debugging Privilegien besitzen. Das hilft bei fast allen Prozessen, die sich weigern, beendet zu werden. Einige lassen sich aber trotzdem nicht beenden, so z.B ZoneAlarm, das sich berechtigterweise vor dieser Methode schützt oder System-Prozesse wie z.B smss.exe. Zum Setzen von DebugingPrivilegien verwendet man einfach folgende Methode, die einfach in ein Modul kopiert werden kann: Option Explicit ' Konstanten Private Const SE_DEBUG_NAME = "SeDebugPrivilege" Private Const SE_PRIVILEGE_ENABLED = &H2 Private Const ANYSIZE_ARRAY = 1 Private Const TOKEN_ADJUST_PRIVILEGES = &H20 Private Const TOKEN_QUERY = &H8 ' Typen Private Type LUID LowPart As Long HighPart As Long End Type Private Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES End Type Private Type LARGE_INTEGER LowPart As Long HighPart As Long End Type ' API's Private Declare Function OpenProcessToken Lib "advapi32.dll" ( _ ByVal ProcessHandle As Long, _ ByVal DesiredAccess As Long, _ TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" _ Alias "LookupPrivilegeValueA" ( _ ByVal lpSystemName As String, _ ByVal lpName As String, _ lpLuid As LARGE_INTEGER) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32" ( _ ByVal TokenHandle As Long, _ ByVal DisableAllPrivileges As Long, _ ByRef NewState As TOKEN_PRIVILEGES, _ ByVal BufferLength As Long, _ ByRef PreviousState As Any, _ ByRef ReturnLength As Any) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Public Function EnableDebugPrivNT() As Boolean Dim hToken As Long Dim DebugValue1 As LARGE_INTEGER Dim DebugValue2 As LUID Dim tkp As TOKEN_PRIVILEGES Dim lResult As Long ' Handle des AccessToken ermitteln lResult = OpenProcessToken(GetCurrentProcess, _ TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) If lResult = 0 Then EnableDebugPrivNT = False Exit Function End If ' Debuging Privilegien setzen lResult = LookupPrivilegeValue("", SE_DEBUG_NAME, DebugValue1) If lResult = 0 Then EnableDebugPrivNT = False Exit Function End If DebugValue2.HighPart = DebugValue1.HighPart DebugValue2.LowPart = DebugValue1.LowPart tkp.PrivilegeCount = 1 tkp.Privileges(0).pLuid = DebugValue2 tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED ' Debuging Privilegien aktivieren lResult = AdjustTokenPrivileges(hToken, False, tkp, 0, ByVal 0&, 0) If lResult = 0 Then EnableDebugPrivNT = False Exit Function End If EnableDebugPrivNT = True End Function Dieser Tipp wurde bereits 13.153 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |