'ADVAPI32
Private Declare Function CheckTokenMembership Lib "ADVAPI32" (ByVal TokenHandle As Long, ByVal pSidToCheck As Long, ByRef IsMember As Boolean) As Long
'---------------------------------------------------------------------------------------
' Procedure : IsUserAnAdmin
' Author : Karcrack
' Date : 300710
' Purpose : Check wether the user is in the Administrator Group
' TestedOn : Windows XP SP3
'---------------------------------------------------------------------------------------
'
Private Function IsUserAnAdmin() As Boolean
Dim SID(1) As Currency
'Hardcoded SID
SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Call CheckTokenMembership(0, VarPtr(SID(0)), IsUserAnAdmin)
End Function
Es un pequeño codigo minimalista (como a mi me gusta ::)) que reemplaza a la funcion IsUserAnAdmin@SHELL32, que es simplemente un wrapper a CheckTokenMembership@ADVAPI32
Como podeis comprobar el SID (Security IDentifier) esta hardcodeado... asi que me gustaria que lo probaseis en vuestros PCs, no deberia fallar, pero nunca se sabe :laugh:
Originalmente posteado en:
http://cobein.com/wp/?p=559
Saludos :D
Si me funciona¡! :D
Tengo
Win XP...
Muy buena
Kar! :-* :laugh:
Aunque no entiendo esto :-[ :
Citar 'Hardcoded SID
SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Me podrias explicar un poco¿? :huh:
DoEvents¡! :P
Claro, con mucho gusto :D
Primero, Que es un SID?
http://msdn.microsoft.com/en-us/library/aa379594(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx
En este caso el SID que utilizamos es el de: "Esta en el grupo Administradores?" :xD
Para utilizar el API CheckTokenMembership has de preparar el SID con (por ejemplo) el API ConvertStringSidToSid, estas conversiones son siempre constantes, es decir, tu podrias establecer directamente la estructura sin valerte de estas API de ayuda, a pesar de que Windows no lo recomienda....
El tamaño de la estructura SID es variable, pero en este caso ocuparia 16bytes (Es decir 2x8) cada Currency ocupa 8 bytes, asi que lo que he hecho ha sido definir la estructura en Currencies en vez de con Bytes,Integers y Longs, que es como deberia estar... Al API le da igual como lo haga, porque accede exactamente igual a la informacion, simplemente lo hago para acortar :D
Espero haber sido claro, no se me da muy eso de redactar a mi :laugh: :laugh:
Saludos ;)
Cita de: *PsYkE1* en 30 Julio 2010, 16:31 PM
Aunque no entiendo esto :-[ :
Citar 'Hardcoded SID
SID(0) = 36028797018964.0193@: SID(1) = 233646220.9056@
Me podrias explicar un poco¿? :huh:
Es la variable en memoria donde esta el flag si es admin o no?:..... .FAIL! :xD
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
:¬¬
Cita de: Karcrack en 30 Julio 2010, 16:40 PM
Claro, con mucho gusto :D
Primero, Que es un SID?
http://msdn.microsoft.com/en-us/library/aa379594(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx
En este caso el SID que utilizamos es el de: "Esta en el grupo Administradores?" :xD
Para utilizar el API CheckTokenMembership has de preparar el SID con (por ejemplo) el API ConvertStringSidToSid, estas conversiones son siempre constantes, es decir, tu podrias establecer directamente la estructura sin valerte de estas API de ayuda, a pesar de que Windows no lo recomienda....
El tamaño de la estructura SID es variable, pero en este caso ocuparia 16bytes (Es decir 2x8) cada Currency ocupa 8 bytes, asi que lo que he hecho ha sido definir la estructura en Currencies en vez de con Bytes,Integers y Longs, que es como deberia estar... Al API le da igual como lo haga, porque accede exactamente igual a la informacion, simplemente lo hago para acortar :D
Espero haber sido claro, no se me da muy eso de redactar a mi :laugh: :laugh:
Saludos ;)
Gracias tio! ;-)
Lo voy a mirar! ;)
DoEvents¡! :P
Ya ha sido probado en W$ 7 x86/x64
Resultado: Va de lujo :P