Folgendes schlägt fehl, wobei es egal ist, ob mein Prozess im Account des eingeloggten Users läuft oder im System Account - warum?
Mache ich einen Fehler oder ist das vielleicht ein ganz und gar fehlgeschlagener Versuch von Microsoft, ein Sicherheitsloch zu fixen??? :lupe:
Code
Def GetWindowThreadProcessId(2) !"USER32","GetWindowThreadProcessId"
Def GetLastError(0) !"kernel32", "GetLastError"
Def SetLastError(1) !"kernel32", "SetLastError"
DeF OpenProcess(3) !"KERNEL32", "OpenProcess"
Def CloseHandle(1) !"KERNEL32", "CloseHandle"
DEF LookupPrivilegeValue(3) !"advapi32", "LookupPrivilegeValueA" 'LUID (8-Byte Registrierungszahl) von Privileg erhalten
DEF AdjustTokenPrivileges(6) !"advapi32", "AdjustTokenPrivileges" 'Privilegien einstellen
DEF OpenProcessToken(3) !"advapi32", "OpenProcessToken" 'Tokenhandle öffnen
DEF CopyMemory(3) !"kernel32", "RtlMoveMemory" 'kopiert einen Speicherbereich
DEF GetCurrentProcess(0) !"KERNEL32", "GetCurrentProcess" 'Handle auf den aktuellen Prozess holen
Declare CSRSS_ID&, PHandle&, Fehler&, TOKEN_PRIVILEGES#, LUID#
Windowstyle 31
WindowTitle "ID von CSRSS ermitteln und Prozesshandle mit PROCESS_DUP_HANDLE öffnen"
Window 0, 0 - 640, 440
GetWindowThreadProcessId(%Desktop, addr(CSRSS_ID&))
Print "ID des Subsystems meines Desktops: " + Str$(CSRSS_ID&)
Set_Privilege_Status "SeDebugPrivilege",$2
SetLastError(0)
PHandle& = OpenProcess($40, 0, CSRSS_ID&)
Fehler& = GetLastError()
IF PHandle& <> 0
Print "Das Öffnen des Handles war erfolgreich!"
CloseHandle(PHANDLE&)
Else
Print "Es konnte kein Handle geöffnet werden!"
Print "Fehlercode beim Öffnen des Handles: " + Str$(Fehler&)
endif
While 1
Waitinput
wend
Proc Set_Privilege_Status
Parameters Privilege_name$, Aktive&
Declare NewState&, AH_Token_Handle&, LU_SYSTEM$
DIM TOKEN_PRIVILEGES#, 16
DIM LUID#, 8
Clear LUID#, LU_SYSTEM$
LookupPrivilegeValue(ADDR(LU_SYSTEM$), ADDR(Privilege_name$), LUID#)
CLEAR AH_Token_Handle&
LET FEHLER& = OpenProcessToken(GetCurrentProcess(), $20, ADDR(AH_Token_Handle&))
LONG TOKEN_PRIVILEGES#, 0 = 1
LET NewState& = TOKEN_PRIVILEGES#
CopyMemory(NewState& + 4, LUID#, 8)
LET NewState& = Aktive&
Clear Aktive&
IF or(NewState&, $2) = NewState&
LET Aktive& = or(AKTIVE&, $2)
Endif
IF @or(NewState&, $80000000) = NewState&
LET Aktive& = or(AKTIVE&, $80000000)
Endif
LONG TOKEN_PRIVILEGES#, 12 = Aktive&
LET FEHLER& = AdjustTokenPrivileges(AH_Token_Handle&, 0, TOKEN_PRIVILEGES#, 0, 0, 0)
If AH_TOKEN_Handle& <> 0
CLOSEHANDLE(AH_Token_Handle&)
endif
Dispose TOKEN_PRIVILEGES#
Dispose LUID#
endproc
Alles anzeigen
Auch wenn ich CSRSS so anpasse
http://www.postimage.org/image.php?v=aV1GF209
und unter Vista das tue
http://www.postimage.org/image.php?v=aV1GGiPJ
haut's nicht hin .
Warum???