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)
:/
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)
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
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
.
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...
if ( not AdjustTokenPrivileges(hToken, FALSE, byval varptr(tkp), LenB(TOKEN_PRIVILEGES), &H0&, &H0& ) ) then
...
end if
Sangrientas Lunas!¡.
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
Completa la estructura con ceros/nulls y pasasela a la API...
las ultimas 2 lineas de la declaración, pásala a
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)
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 :/
si te referis a los campos de las estructuras se establecen automaticamente a 0
no me estaba refiriendo a un post arriba, de otro usuario
Citar
Completa la estructura con ceros/nulls y pasasela a la API...
Creo que se referia que en lugar de pasar una estructura pasaras 0 :P no... :B
si eso es lo que queria hacer en primer lugar
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:
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
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:
Call AdjustTokenPrivileges(hToken, 0, tkp, 0, ByVal 0&, ByVal 0&)
Saludos