cast parametro null

Iniciado por neo_from_cs_matrix, 5 Marzo 2012, 08:04 AM

0 Miembros y 1 Visitante están viendo este tema.

neo_from_cs_matrix


en c esto es

AdjustTokenPrivileges(hToken, 0, tkp, 0, (TOKEN_PRIVILEGES) 0, 0)

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

:/

MCKSys Argentina

Segun: http://msdn.microsoft.com/en-us/library/windows/desktop/aa375202(v=vs.85).aspx


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
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


raul338

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

BlackZeroX

.
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 (vb) [Seleccionar]


   if ( not AdjustTokenPrivileges(hToken, FALSE, byval varptr(tkp), LenB(TOKEN_PRIVILEGES), &H0&,  &H0& ) ) then
   ...
   end if



Sangrientas Lunas!¡.
The Dark Shadow is my passion.

neo_from_cs_matrix


declarado de esta forma

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


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).

Call AdjustTokenPrivileges(hToken, 0, tkp, 0, 0, 0)


pregunto...
deberia hacerlo asi ?

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



MCKSys Argentina

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

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


raul338

las ultimas 2 lineas de la declaración, pásala a
Código (vb) [Seleccionar]
ByVal PreviousState As Long, _
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)


neo_from_cs_matrix


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


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 :/


x64core

si te referis a los campos de las estructuras se establecen automaticamente a 0

neo_from_cs_matrix

no me estaba refiriendo a un post arriba, de otro usuario

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