AdjustTokenPrivileges - Error 998
-
Hallo zusammen, habe gerade erst mit ASM angefangen, also lacht bitte nicht, wenn ihr den Code seht
Folgendes Problem; ich möchte meiner Anwendung das SeDebugPrivilege-Privileg geben.
Die Funktion AdjustTokenPrivileges liefert jedoch über GetLastError() den Fehler 998, also "Invalid access to memory location."Hier der Code:
seDBG DB "SeDebugPrivilege", 0 hID DD ? tkp TOKEN_PRIVILEGES <> hToken DD ? invoke GetCurrentProcess mov hID, EAX invoke OpenProcessToken, hID, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, OFFSET hToken cmp EAX, 0 jle Err invoke LookupPrivilegeValue, NULL, OFFSET seDBG, OFFSET tkp.Privileges[0].Luid cmp EAX, 0 jle Err mov tkp.PrivilegeCount, 1 mov tkp.Privileges[0].Attributes, SE_PRIVILEGE_ENABLED invoke SetLastError, 0 invoke AdjustTokenPrivileges, OFFSET hToken, 0, OFFSET tkp, 0, 0, 0 cmp EAX, 0 jle Err ;Tritt ein ret
Hoffe ihr könnt mir helfen, habe Google schon durch
-
GastASM schrieb:
nvoke AdjustTokenPrivileges, OFFSET hToken, 0, OFFSET tkp, 0, 0, 0
-
Und etwas genauer?
Wie gesagt, ich hab gerade erst mit Assembler angefangen...
-
Edit:
Wenn ich OFFSET weg lasse, bekomme ich den selben Fehler an der gleichen Stelle...
-
Niemand?...
-
Du brauchst Administrator Rechte damit du das debug-Privileg setzten kannst:
include masm32rt.inc ... SetDebugPrivilege proc LOCAL hToken:HANDLE LOCAL tp:TOKEN_PRIVILEGES LOCAL luid:LUID mov edx,rv(GetCurrentProcess) .if rv(OpenProcessToken,edx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ADDR hToken) .if rv(LookupPrivilegeValue,0,"SeDebugPrivilege",ADDR luid) mov tp.PrivilegeCount,1 m2m tp.Privileges.Luid.LowPart,luid.LowPart m2m tp.Privileges.Luid.HighPart,luid.HighPart mov tp.Privileges.Attributes,SE_PRIVILEGE_ENABLED .if rv(AdjustTokenPrivileges,hToken,FALSE,ADDR tp,SIZEOF TOKEN_PRIVILEGES,0,0) .if rv(GetLastError) != ERROR_NOT_ALL_ASSIGNED invoke CloseHandle,hToken mov eax,1 ret .endif .endif .endif invoke CloseHandle,hToken .endif xor eax,eax ret SetDebugPrivilege endp
-
Hey, danke, hab´s aber gerade selber hinbekommen, aber jetzt wird´s echt lustig:
Was ist der Unterschied:
.DATA tkp TOKEN_PRIVILEGES <> hToken DWORD ? seDBG DB "SeDebugPrivilege", 0 .CODE ;...
.DATA seDBG DB "SeDebugPrivilege", 0 tkp TOKEN_PRIVILEGES <> hToken DWORD ? .CODE ;...
Letzteres funktioniert nicht, "AdjustTokenPrivileges" gibt No_Access (998) zurück !
Gibt es da eine logische Erklärung ???
-
GastASM schrieb:
Gibt es da eine logische Erklärung ???
ja, das aligment. Einige API-Strukturen erwarten ein aligment von 4.
Ansonsten würde ich dir empfehlen von den globalen Variablen Abstand zu nehmen. Auch das cmp+jcc-Gefummel kann man sich in Rahmen der WinAPI-Programmierung sparen und MASMs Hochsprachenkonstrukte verwendet.