Duda con unos valores hexadecimales de la msdn

Tus experiencias con la informática, o fuera de la informática
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Duda con unos valores hexadecimales de la msdn

Mensaje por Jonny »

Pongo este post en "Chat", porque aunque podría tratarse con AutoIt, como veréis no se puede...

Resulta, que estoy mirando en la MSDN el tema de los hilos. En concreto, los descriptores de seguridad de estos:

http://msdn.microsoft.com/en-us/library ... s.85).aspx

Son valores hexadecimales, pero si os fijáis llevan una "L" al final:
DELETE (0x00010000L) Required to delete the object.
READ_CONTROL (0x00020000L) Required to read information in the security descriptor for the object, not including the information in the SACL. To read or write the SACL, you must request the ACCESS_SYSTEM_SECURITY access right. For more information, see SACL Access Right.
SYNCHRONIZE (0x00100000L) The right to use the object for synchronization. This enables a thread to wait until the object is in the signaled state.
WRITE_DAC (0x00040000L) Required to modify the DACL in the security descriptor for the object.
WRITE_OWNER (0x00080000L) Required to change the owner in the security descriptor for the object.
¿Qué significa esa "L"?.

Imagino, que para pasar uno de esos valores a las APIS no deberé poner esa "L" ¿o sí?...

Y bueno, ya que estamos con este tema, a ver si sabéis si para indicar más de un descriptor de seguridad puede hacerse de una vez, con una operación bit and por ejemplo.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Duda con unos valores hexadecimales de la msdn

Mensaje por Ximorro »

(Tenías el post publicado dos veces, te he borrado el otro)

Esa L es el tipo, eso seguro, lo que no tengo tan claro es de qué tamaño.
Eso se usa en C para decir al compilador que son literales enteras de tipo long, para que sepa cuánta memoria debe reservar, en principio un entero con sigo de 32bits (se pone una u para que sea sin signo)

El problema es que los tipos en C eran variables, sorprendentemente dependían del procesador, así un "int" en un viejo AT era de 16 bits, pero luego si compilabas en una CPU de 32bits pues era de 32bits, "int" significaba "el entero del procesador".
Así que long era del doble de int, significara eso lo que significara.

Supongo que eso después se ha estandarizado porque si no es un cachondeo, pero no lo veo...
Si se ha estandarizado no sé cómo especifica la API de Windows ese tipo, mira a ver si lo encuentras porque yo así rápido no lo he visto.
Sólo he encontrado el LONG de VB que es de 64bits, pero no sé si corresponderá con éste.

Esos valores que tienes ahí son de 32bits, aún así la L podría indicar constante de 64bits, para no tener que poner todo el número, pues por ejemplo el primero realmente sería:
0x0000000000010000
Un poco más difícil de leer y de ver el tamaño...

Editado:
La L especifica en C un entero con signo de 32bits.

Respecto a los tipos de literales enteras de C, mira, precisamente la MSDN da el trozo de gramática que las genera, esto te servirá para lo del compilador:
http://msdn.microsoft.com/en-us/library/00a1awxf.aspx

Ahí se puede ver que los long se especifican con L y los de 64bits como LL o i64, por ejemplo.

También he encontrado los "tipos Windows", un hallazgo interesante:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Entonces LONG es un entero con signo de 32bits, que corresponde con esa declaración de literal en C (en Autoit eso no se pone, AutoIt no tiene tipos)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Duda con unos valores hexadecimales de la msdn

Mensaje por Jonny »

Ximorro dijo: (Tenías el post publicado dos veces, te he borrado el otro)
Sorry, es que al enviar el post se me puso una página de phpBB, así que volví a enviarlo, pensando que no se habría creado...

Interesantes los links, gracias, porque si ya da faena los tipos de dato de C/C++, los derivados de Microsoft...

En Autoit, no se indican, por supuesto. ¿Pero para enviarlos a una DLL sí, no?.

A ver si aprendo eso de los descriptores de seguridad, que no me queda muy claro como funcionan... Porque eso me parecían valores hexadecimales, pero he leído que lo que piden las APIS son punteros a descriptores de seguridad, que estos pueden crearse (los descriptores)...

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Duda con unos valores hexadecimales de la msdn

Mensaje por Ximorro »

Cuando usas una DLL ya pones el tipo en los parámetros de DLLCall.
El entero largo con signo es sencillamente "long", de todas maneras esas valores aunque los indiquen como long seguramente serán unsigned para las DLL. Pero eso a ti te da lo mismo, tú mira cómo es la llamada a la DLL y usa eso en AutoIt, si fuera un unsigned pues usas "DWROD" (equivalente a "ULONG" y "UINT") y ya está, da igual cómo estén definidas las constantes, tú pásale a la DLL lo que te pide.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Duda con unos valores hexadecimales de la msdn

Mensaje por Jonny »

Ah, vale. Me refería, a si sería necesario indicar el tipo de dato como dices, y además la "L" esa, pero vaya, es cierto, no debe pasarse porque ya indicas el tipo de dato.

La leche, que de tipos de datos tiene Windows, no sabía que hubieran tantos... Que bien me va a ir ese link de la MSDN que has pasado ;).

Por cierto, He estado mirando el tipo "SIZE_T" que lo he visto en varios sitios, que pensaba que sería un derivado de int, long... y ¿parece que es un puntero?...

Thanks.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Duda con unos valores hexadecimales de la msdn

Mensaje por Ximorro »

No, no es que no debas porque pones el tipo en el parámetro, ¡no debes porque eso no es Autoit! y sencillamente te va a dar error.
REPITO: "Eso se usa en C para...."

Hombre, hay tantos tipos de datos porque también han puesto las estructuras, así salen mogollón...

No, no es un puntero, SIZE_T "es el máximo número de bytes a que un puntero puede apuntar", así que es el tamaño máximo de un objeto, y por lo tanto se usa en las funciones que reservan memoria (no puedes reservar más memoria de la que un puntero puede direccionar), el operador sizeof() (tamaño máximo de un objeto limitado por este tipo), etc.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder