Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: neo_from_cs_matrix en 5 Marzo 2012, 08:04 am



Título: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 08:04 am

en c esto es

Código:
AdjustTokenPrivileges(hToken, 0, tkp, 0, (TOKEN_PRIVILEGES) 0, 0)

necesito en vb como hacerlo, osea esta linea es el problema con el parametro 5
Código:
Call AdjustTokenPrivileges(hToken, 0, tkp, 0, 0, 0)

:/


Título: Re: cast parametro null
Publicado por: MCKSys Argentina en 5 Marzo 2012, 18:24 pm
Segun: http://msdn.microsoft.com/en-us/library/windows/desktop/aa375202(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/aa375202(v=vs.85).aspx)

Código:
BOOL WINAPI AdjustTokenPrivileges(
  __in       HANDLE TokenHandle,
  __in       BOOL DisableAllPrivileges,
  __in_opt   PTOKEN_PRIVILEGES NewState,
  __in       DWORD BufferLength,
  __out_opt  PTOKEN_PRIVILEGES PreviousState,
  __out_opt  PDWORD ReturnLength
);

Como ves, PreviousState es un puntero a una estructura TOKEN_PRIVILEGES. Como es de entrada/salida, no puedes pasar 0. Lo que puedes hacer es llenar un estructura con 0 o nulls y pasarsela a la API.

Aunque la MSDN dice que SI se puede pasar null... es raro  :P


Título: Re: cast parametro null
Publicado por: raul338 en 5 Marzo 2012, 19:51 pm
es que en realidad es depende de como este declarada la API, si el ultimo parametro es ByRef... estas jodido x'D

Tenes que poner como ByVal ReturnLength As Long, Si lo llamas en otras ocasiones con el tipo de datos, tenes que pasarlos usando VarPtr


Título: Re: cast parametro null
Publicado por: BlackZeroX en 5 Marzo 2012, 20:01 pm
.
Si declaras la API como en la MSDN tendrías que usar así los parámetros, ¿como tienes declarada la API?. Todo depende de la declaración API...

Código
  1.  
  2.    if ( not AdjustTokenPrivileges(hToken, FALSE, byval varptr(tkp), LenB(TOKEN_PRIVILEGES), &H0&,  &H0& ) ) then
  3.    ...
  4.    end if
  5.  
  6.  

Sangrientas Lunas!¡.


Título: Re: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 22:41 pm

declarado de esta forma
Código:
Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
(ByVal TokenHandle As Long, _
ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, _
ByVal BufferLength As Long, _
PreviousState As TOKEN_PRIVILEGES, _
ReturnLength As Long) As Long

el tema es que yo tengo el code en c pero lo estoy convirtiendo a vb,
la linea de c dice

Código:
AdjustTokenPrivileges(hToken, 0, tkp, 0, (TOKEN_PRIVILEGES) 0, 0)

entonces yo lo que preguntaba era como castiar el "previousstate" de forma
qe me permita pasarle 0 (null).

Código:
Call AdjustTokenPrivileges(hToken, 0, tkp, 0, 0, 0)


pregunto...
deberia hacerlo asi ?

Código:
Call AdjustTokenPrivileges(hToken, 0, tkp, 0, &H0&, 0)


les agradezco que me digan como hago, y el tema del casteo en el parametro me vendria bien saberlo porque ando con visual basic estos dias XD




Título: Re: cast parametro null
Publicado por: MCKSys Argentina en 5 Marzo 2012, 22:59 pm
Completa la estructura con ceros/nulls y pasasela a la API...


Título: Re: cast parametro null
Publicado por: raul338 en 5 Marzo 2012, 23:11 pm
las ultimas 2 lineas de la declaración, pásala a
Código
  1. ByVal PreviousState As Long, _
  2. ByVal ReturnLength As Long) As Long

0 = &H0 :P (la diferencia es que en la izquierda es la notación decimal y la derecha es hexadecimal)



Título: Re: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 23:22 pm

Citar
las ultimas 2 lineas de la declaración, pásala a
Código
ByVal PreviousState As Long, _
ByVal ReturnLength As Long) As Long

0 = &H0  (la diferencia es que en la izquierda es la notación decimal y la derecha es hexadecimal)
grax

Código:
Private Type LUID
    UsedPart As Long
    IgnoredForNowHigh32BitPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
    vLuid As LUID
    Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(1) As LUID_AND_ATTRIBUTES
    Attributes As Long
End Type

los longs los pongo a cero pero los otros campos como los pongo a cero :/



Título: Re: cast parametro null
Publicado por: x64core en 5 Marzo 2012, 23:26 pm
si te referis a los campos de las estructuras se establecen automaticamente a 0


Título: Re: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 23:29 pm
no me estaba refiriendo a un post arriba, de otro usuario

Citar
Completa la estructura con ceros/nulls y pasasela a la API...


Título: Re: cast parametro null
Publicado por: x64core en 5 Marzo 2012, 23:36 pm
Creo que se referia que en lugar de pasar una estructura pasaras 0 :P no... :B


Título: Re: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 23:51 pm
si eso es lo que queria hacer en primer lugar


Título: Re: cast parametro null
Publicado por: x64core en 5 Marzo 2012, 23:55 pm
no podes, si en la documentacion de la API dice que se requiere una estructura tal se necesita una estructura, sino la API
no va a funcionar a menos que diga que podas pasarle un 0  :rolleyes:


Título: Re: cast parametro null
Publicado por: neo_from_cs_matrix en 5 Marzo 2012, 23:58 pm
lo dice, de hecho en c lo tengo asi al code pasando 0
pero a lo sumo se debe poder hacer como dijo raul338,
cambiar la declaracion y asi si pasar 0


Título: Re: cast parametro null
Publicado por: Karcrack en 6 Marzo 2012, 02:44 am
Aunque en la declaración de la función el parámetro esté establecido como ByRef puedes forzar que se pase como ByVal haciendo la llamada de esta forma:
Código
  1. Call AdjustTokenPrivileges(hToken, 0, tkp, 0, ByVal 0&, ByVal 0&)

Saludos