11 2 PROGRAMACIÓN EN WINDOWS 2000

55
Examinaremos la interfaz de programación y el registro, una pequeña base de datos en la memoria. * 11.2 PROGRAMACIÓN EN WINDOWS 2000

Transcript of 11 2 PROGRAMACIÓN EN WINDOWS 2000

Examinaremos la interfaz de programación y el registro, una pequeña base de datos en la memoria.  

*11.2 PROGRAMACIÓN EN WINDOWS 2000

• Windows 2000 cuenta con un conjunto de llamadas al sistema que puede ejecutar.

• Sin embargo. Microsoft nunca ha publicado la lista de llamadas al sistema y además las cambia de una versión a la siguiente. Más bien, lo que ha definido un conjunto de llamadas a funciones denominado interfaz de programación de aplicaciones (API: Application Programming Interface) Win32.

• Las API son procedimientos de biblioteca que efectúan llamadas al sistema para realizar el trabajo o. en algunos casos, realizan el trabajo ahí mismo, en el espacio de usuarios.

• Las llamadas de la API Win32 existentes no cambian al cambiar la versión de Windows, aunque con frecuencia se añaden nuevas.

*11.2.1 La interfaz de programación de aplicaciones Win32

Windows 2000 añade una buena cantidad de funcionalidad a Win32, así que cuenta con llamadas adicionales en la API que no están incluidas en versiones anteriores de Win32 y que no funcionan en versiones más antiguas de Windows. 

La filosofía de Win32 consiste en proporcionar una interfaz exhaustiva, e incluir muchas funciones (procedimientos) que no son (ni deberían ser) llamadas al sistema. 

*Muchas llamadas de la API Win32 crean objetos de kernel incluidos archivos, procesos. Subprocesos. Canalizaciones, etc.

*Toda llamada que crea un objeto devuelve un resultado llamado identificador (handle) a su invocador.

*Este puede utilizarse para ejecutar operaciones con el objeto.

*Los identificadores son específicos para el proceso que creó el objeto, no obstante, es posible copiar un identificador y pasarlo a otros procesos empleando un mecanismo protegido.

*Cada objeto tiene un descriptor de seguridad que indica quién está y quién no está autorizado para realizar algún tipo de operaciones con el objeto.

*No todas las estructuras de datos creadas por el sistema son objetos. Y no todos los objetos son objetos del kernel.

*Los verdaderos objetos de kernel son:*Los que deben nombrarse, protegerse o compartirse de alguna manera.

*Los que tienen un tipo definido por el sistema.*Los que tienen operaciones bien definidas que se ejecutan con él y ocupa espacio en la memoria del kernel.

*Aunque los usuarios pueden realizar las operaciones (emitiendo llamadas Win32), no pueden tener acceso a los datos de manera directa

*Se dice que Windows 2000 está orientado a objetos porque la única forma de manipular objetos es invocando operaciones con sus identificadores o emitiendo llamadas a la API Win32. *Por otra parte el sistema carece de algunas propiedades básicas de los sistemas orientados a objetos, como herencia y polimorfismo.

*Win32 proporciona más de 60 llamadas para crear y destruir archivos y directorios, abrir y cerrar archivos, leer y escribir archivos, solicitar y establecer atributos de archivos, y muchas cosas más.

*Otra área en la que Win32 proporciona llamadas es la seguridad. Cada proceso tiene un ID (identificador) y cada objeto puede tener una lista de control de acceso que indica cuáles usuarios pueden tener acceso a él y qué operaciones pueden efectuar con él.

*Las llamadas al sistema relacionadas con procesos, Subprocesos, Sincronización, administración de memoria, E/S de archivos y seguridad no son algo nuevo. Otros sistemas operativos también las tienen, aunque en general no por centenares, como en Win32.

*Sin embargo, lo que en realidad distingue a Win32 son los miles y miles de llamadas para la interfaz gráfica...

* Hay llamadas para crear, destruir, administrar y usar ventanas, menús, barras de herramientas, barras de estado, barras de desplazamiento, cuadros de diálogo. Iconos y muchos olios elementos que aparecen en la pantalla.

* Hay llamadas para dibujar formas geométricas, Rellenar administrar las paletas de color que usan, manejar fuentes (tipos de letra) y colocar iconos en la pantalla.

* Por último, hay llamadas para manejar el teclado, el ratón y otros dispositivos de entrada. Así como audio, impresión y otros dispositivos de salida.

* *En pocas palabras, la API Win32 (sobre todo la parte de la GUI) es inmensa

*Aunque la. API Win32 está disponible en Windows 98, no todas las versiones de Windows implementan todas las llamadas, y a veces también hay diferencias menores.*Por ejemplo, Windows 98 no tiene seguridad, así que las llamadas de la API relacionadas con seguridad, solo devuelven códigos de error.*Los nombres de archivo de Windows 2000 emplean caracteres Unicode, que no se maneja en Windows 98.*Y los nombres de archivo de Windows 98 no distinguen entre mayúsculas y minúsculas, mientras que en Windows 2000 sí.

*11.2.2 EI Registro

*Windows necesita mantenerse al tanto de una gran cantidad dc información acerca del hardware, el software y los usuarios. *En Windows 3.x esta información se almacenaba en cientos de archivos .ini (de iniciación) dispersos por todo el disco. *A partir de Windows 95. Casi toda la información necesaria para arrancar y configurar el sistema y adaptarlo al usuario actual se reunió en una gran base de datos central llamada Registro (registry).

*Si bien muchas partes de Windows 2000 son complicadas y sin orden aparente, el Registro es una de las peores, y la extraña nomenclatura no ayuda en nada.

*La idea en la que se basa es muy sencilla

*El registro consiste en una colección de directorios, cada uno contiene subdirectorios o entradas. Es una especie de sistema de archivos para archivos muy pequeños, que tiene directorios y entradas(los archivos).

*La confusión principia con el hecho de que Microsoft llama clave a un directorio, cosa que no es. Además, todos los directorios del nivel más alto comienzan con la cadena HKEY, que significa Identificador de clave”. Los subdirectorios suelen tener nombres escogidos con un criterio más lógico, aunque no siempre es así.

*En la base de la jerarquía están las entradas, llamadas valores, que contienen la información. Cada valor tiene 3 partes: un nombre, un tipo y los datos.

*El nombre no es más que una cadena en Unicode, a menudo Default, s si el directorio solo contiene un valor.

*El tipo es uno de 11 tipos estándar. Los más comunes son cadena Unicode, lista de cadenas Unicode, entero de 32 bits, número binario de longitud arbitraria, y enlace simbólico a un directorio o entrada en algún otro lugar del registro.

*En el nivel más alto, el registro de windows2000 tiene 6 claves, llamadas claves raíz.

*Para ver esta lista en un sistema Windows 2000, puede usar uno de los editores de registros (Regedit o regedt32), con ellos también pueden modificarse los valores del registro. No se recomienda a aficionados alterar las claves ni los valores si es que planean volver a arranar el sistema.

*La primera clave(es decir directorio), HKEY_LOCAL_MACHINE, tal vez sea la más importante porque contiene toda la información acerca del sistema local.

*Tiene 5 subclaves:* La subclave HARDWARE contiene muchas subclaves que describen el hardware e indican cual controlador controla cual dispositivo.

* La subclave SAM (Security Account Manager) contiene los nombres de usuario, grupos, contraseñas, y otra información de cuentas y seguridad necesaria para iniciar sesión.

* La subclave SECURITY contiene información general de la directiva de seguridad(longitud mínima de contraseñas, cuantos intentos fallidos se toleran , etc.)

* La subclave SOFTWARE s donde los fabricantes de software almacenan preferencias entre otras cosas (En el Registro también se almacena información específica para usuarios, pero bajo HKEY_USERS)

* La subclave SYSTEM contiene sobre todo información acerca del arranque del sistema.

*La siguiente clave de nivel más alto es HKEY_USERS, que contiene los perfiles de todos los usuarios. Aquí se almacenan todas las preferencias específicas para cada usuario.

*La siguiente clave del nivel más alto. HKEY_PERFORMANCE_DATA, que ofrece una ventana hacia el sistema operativo, también permite el acceso a contadores de desempeño del sistema.*Las siguientes tres claves del nivel más alto no existen en realidad.

*Todas son enlaces simbólicos a algún otro lugar del Registro.

*La clave HKEY_CLASSES_ROOT es la más interesante: apunta al directorio que maneja objetos COM (Modelo de Objetos Componentes: Component Object Model) y las asociaciones entre extensiones de archivo y programas.

*La clave HKEY_CURRENT_CONFIG se enlaza con la configuración de hardware vigente. Esta clave apunta a la configuración actual.

*De forma similar, HKEY_CURRENT_USER apunta al usuario actual, con el fin dc que sus preferencias puedan hallarse rápido.

*Ninguna de las tres últimas claves añade algo en realidad, pues la información de todos modos está disponible en otros lugares.

*Así, a pesar que REGEDIT y REGEDIT32 mencionan cinco claves de nivel superior, en realidad sólo hay tres directorios de nivel superior.

*El programador de Win32 tiene acceso pleno al Registro. Hay llamadas para crear y eliminar claves, buscar valores dentro de claves y más. En la siguiente figura se presentan algunas de las más útiles.

*Cuando se apaga el sistema, la mayor parte de la información del Registro se almacena en el disco, en archivos llamados subárboles (hives). Casi todos ellos están en \winnt\system32\config.

*Cuando se actualizan, se preparan en forma automática copias de seguridad, y las escrituras se efectúan empleando transacciones atómicas para evitar la corrupción, en caso de que el sistema falle durante la escritura.

*La pérdida del Registro requeriría reinstalar todo el software.

* 11.5 ADMINISTRACIÓN DE MEMORIA

*Windows 2000 tiene sistema de memoria virtual muy avanzado. Hay varias funciones de Win32 para utilizarlo y una parte del ejecutivo junto con seis subprocesos de kernel dedicados para administrarlo.

*Los procesos que inician durante la fase de arranque. Los que están arriba de la línea siempre se inician. Los que están debajo son ejemplos de servicios que podrían iniciarse.

Proceso Descripción

Proceso inactivo o nulosistema smss.exe csrss.exe winlogon.exe lass.exe services.exe

No es realmente un proceso, alberga el subproceso inactivoCrea smss.exe y archivos de paginación; lee Registros; abre DLLsPrimer proceso real; asigna valores iniciales; crea csrss y winlogonProceso del subsistema Win32Demonio de inicio de sesiónAdministrador de autenticaciónExamina el Registro e inicia servicios

Servidor de impresor Servidor de archivos Demonio telnet Proc. de correo electrónico recibido Proc. De fax recibido Solucionador de DNS Registro de sucesos Adm. De Plug-and-Play

Permite a trabajos remotos usar la impresoraAtiende solicitudes de archivos localesPermite inicios de sesión remotosAcepta y guarda correo electrónico que llegaAcepta e imprime faxes que lleganServidor del sistema de nombres de dominio de InternetAsienta diversos eventos del sistemaSupervisa el hardware para detectar dispositivos

*Conceptos Fundamentales

*En Windows 2000, cada proceso de usuario tiene su propio espacio de direcciones virtual. Las direcciones virtuales son de 32 bits, así que cada proceso tiene 4 GB de espacio de direcciones virtual. *Los 2 GB inferiores, menos aproximadamente 256 MB, están disponibles para el código y los datos del proceso; los 2 GB superiores se hacen corresponder con la memoria kernel en forma protegida. El espacio de direcciones virtual se pagina por demanda, con un tamaño de página fijo (4KB en el Pentium).

*Organizacion del espacio de dirrecciones virtual para 3 procesos de usuario. Las partes blancas son privadas para cada proceso, las areas sombreadas se comparten entre todos los procesos

*Por lo general, los 64 KB más bajos y más altos del espacio de direcciones virtual de cada proceso no tienen correspondencia. Se tomó esta decisión en forma intencional porque ayuda a atrapar errores de programación. *Los apuntadores no válidos suelen ser 0 o -1, así que un intento por usarlos en Windows 2000 causará una interrupción de sistema inmediata, en lugar de leer basura o, peor aún, escribir en una posición de memoria incorrecta. Sin embargo, cuando se están ejecutando programas MS-DOS antiguos en modo de emulación, pueden hacerse corresponder en esta área.

*El código y los datos privados del usuario inician en los 64 KB y se extienden casi hasta los 2 GB.

*El último fragmento de los 2 GB inferiores contiene algunos contadores y temporizadores del sistema que todos los usuarios comparten bajo un régimen de sólo lectura.

* El hecho de que sean visibles aquí permite a los procesos acceso a ellos sin el gasto adicional de una llamada al sistema.

*Los 2 GB superiores contienen el sistema operativo, incluidos el código, los datos y las reservas paginada y no paginada (que se usa para objetos, etcétera). Todos los procesos de usuario comparten los 2 GB superiores, con excepción de las tablas de páginas, que son exclusivas de cada proceso. Los procesos en modo de usuario no pueden escribir en los 2 GB altos de la memoria, y ni siquiera leerlos.

*El motivo para colocar aquí el sistema operativo es que cuando un sub proceso efectúa una llamada al sistema, salta por una interrupción de sistema al modo de kernel y sigue ejecutándose sin perder su identidad.

*Al hacer visible todo el sistema operativo y todas sus estructuras de datos (así como todo el proceso de usuario) dentro del espacio de direcciones de un subproceso cuando ingresa en el modo de kernel, se elimina la necesidad de modificar el mapa de memoria o de desalojar el caché cuando el subproceso ingresa en el kernel.

*Lo único que hay que hacer es cambiar a la pila de kernel del subproceso.

*Lo que se sacrifica aquí es espacio de direcciones privado del proceso, a cambio de que las llamadas al sistema sean más rápidas. Para los grandes servidores de bases de datos 2GB podrían ser poco, y es por ello que en Advanced Sever y Datacenter Server se ofrece la opción de un espacio de usuario de 3 GB.

*Una página virtual dada puede estar en uno de tres estados: libre, reservada o comprometida. *Una página libre no está usando en la actualidad y cualquier referencia a ella causa un fallo de página.*Una vez que se establece correspondencia entre el código o los datos y una página, se dice que la página está comprometida. *Una página virtual también puede estar en estado reservado, lo que significa que no está disponible para hacerse corresponder mientras no se retire en forma explícita la reservación. *Además del atributo libre, comprometida o reservada, las páginas tienen otros atributos, como ser o no legibles, escribibles y ejecutables.

*Windows 2000, al igual que muchas versiones de UNIX, permite establecer correspondencia en forma directa entre archivos y regiones de los espacios de direcciones virtuales (es decir, series de páginas consecutivas).

* Cuando se ha establecido correspondencia entre un archivo y el espacio de direcciones, dicho archivo puede leerse o escribirse empleando referencias ordinarias a la memoria. Los archivos con correspondencia en memoria se implementan igual que otras páginas comprometidas.

*Por ello, mientras un archivo tiene correspondencia en memoria, la versión que está en la memoria podría no ser idéntica a la que está en el disco (debido a escrituras recientes en el espacio de direcciones virtual).

*Sin embargo, cuando se elimina la correspondencia del archivo o se escribe en forma explícita en el disco, la versión de disco se actualiza.

*Windows 2000 permite de manera explícita establecer correspondencia entre dos o más procesos y la misma [arte de un archivo al mismo tiempo, tal vez en diferentes direcciones virtuales.

*Vale señalar que presenta un problema si dos programas comparten un archivo DLL y uno de ellos modifica los datos estadísticos del archivo. Si no se toman medidas especiales, el otro verá los datos modificados, lo cual quizá no es lo que se desea. El problema se resuelve estableciendo correspondencias de todas las páginas como de sólo lectura pero en realidad sí pueden escribirse.*Está técnica se denomina copiar al escribir

* Llamadas al sistema para administración de memoria

*La API Win32 incluye varias funciones que permiten a un proceso administrar en forma explícita su memoria virtual

*Todas ellas operan en una región que consiste en una sola página, o bien, en una secuencia de dos o más páginas que son consecutivas en el espacio de direcciones virtual.

*Las primeras cuatro funciones de la API sirven para asignar, liberar, proteger y determinar la situación de regiones de; espacio de direcciones virtual.

*Las siguientes dos funciones permiten a un proceso fijar páginas en la memoria para que no se intercambien a disco, y cancelar tal propiedad.

*El sistema operativo impone un límite para evitar que los procesos se vuelvan demasiado codiciosos.

*Windows 2000 también cuanta con funciones API que permiten a un proceso tener acceso a la memoria virtual de otro proceso sobre el cual se le ha otorgado control.

*Las últimas cuatro funciones API que se muestran sirven para administrar archivos con correspondencia en memoria.

*CreateFileMapping. Esta función devuelve un identificador para el objeto de correspondencia de archivo y, de forma opcional, introduce un nombre para ese identificador en el sistema de archivos.

*Las dos funciones que siguen eliminan y establecen correspondencias de archivos, respectivamente.

*Un proceso puede usar la última función para establecer correspondencia entre un archivo con el que otro proceso ya tiene correspondencia.

*Así, dos o más procesos pueden compartir regiones de sus espacios de direcciones. Esta técnica les permite escribir en regiones limitadas de sus respectivas memorias.

* Implementación de administración de memoria

*Windows 2000 maneja un solo espacio de direcciones lineal de 4 GB.*No se maneja segmentación en ninguna de sus modalidades. En teoría, el tamaño de página puede ser cualquier potencia de dos, hasta 64 KB. En Pentium el tamaño es fijo, de 4 KB; en Itanium puede ser de 8 o 16 KB. Además, el sistema operativo en sí puede usar páginas de 4 MB para reducir el espacio que ocupa su tabla de páginas.*A diferencia del calendarizador, el administrador de memoria trabaja en forma exclusiva con procesos y no se ocupa de los subprocesos.*Un descriptor de dirección virtual (VAD; Virtual Address

Descriptor) que indica el intervalo de direcciones a las que se les ha aplicado correspondencia, el archivo que se usará como almacén de respaldo, y el desplazamiento de la correspondencia de éste, así como el código de protección.

* Manejo de fallos de página

*Windows 2000 no utiliza ninguna forma de pre paginación. Cuando se inicia un proceso, ninguna de sus páginas está en la memoria. Todas ellas se traen en forma dinámica del disco conforme se generan fallos de página.* En cada fallo de página se genera una interrupción de sistema para saltar al kernel. El kernel construye un descriptor que indica lo que sucedió y lo pasa al componente del ejecutivo que administra la memoria. *El administrador de memoria verifica que sea válido. Si la página solicitada está dentro de una región comprometida o reservada, el administrador de memoria busca su dirección en la lista de VADs, halla (o crea) la tabla de páginas y busca la entrada pertinente.

*Los bits más importantes de la entra de tabla de páginas, en lo que concierne al algoritmo de paginación, son los bits A y D.*Hay cinco categorías de fallos de página:* La página a la que se hizo referencia no está comprometida.* Hubo una violación de la protección.* Se ha escrito una página compartida.* La pila necesita crecer.* La página a la que se hizo referencia está comprometida pero no tiene correspondencia.

*Los primeros casos son errores fatales.*El tercer caso tiene los mismos síntomas que el segundo (un intento por escribir en una página de sólo lectura), pero el tratamiento es distinto. La solución es copiar la página en un nuevo marco de página físico y aplicarle correspondencia de lectura/escritura. Así es como funciona el copiado al escribir.*El cuarto caso requiere asignar un nuevo marco de página y aplicarle correspondencia en memoria. Sin embargo, las reglas de seguridad exigen que la página esté llena de ceros, para evitar que el proceso pueda averiguar algo acerca del dueño anterior de la página.*El quinto caso es un fallo de página normal. Se localiza la página y se le aplica correspondencia en memoria.

* El algoritmo de reemplazo de páginas

*El reemplazo de páginas funciona como sigue. El verdadero algoritmo de reemplazo de páginas es el que decide cuáles páginas se quitarán a los procesos y se colocarán en la lista libre (en realidad hay cuatro listas libres, pero por el momento es suponer que sólo hay una)*Windows 2000 libera páginas. Cada proceso tiene un conjunto de trabajo.*El conjunto de trabajo de un proceso dado se describe con dos parámetros: el tamaño mínimo y el máximo, Estos límites no son estrictos.

*El mínimo inicial predeterminado está dentro del intervalo de 20 a 50 y el máximo inicial predeterminado está dentro del intervalo de 45 a 345, dependiendo de la cantidad total de RAM. El administrador del sistema puede modificar estos límites.

*Si se presenta un fallo de página y el conjunto de trabajo es más pequeño que el mínimo, se añade la página. En cambio, si se presenta un fallo de página y el conjunto de trabajo es más grande que el máximo, se expulsa una página del conjunto de trabajo (pero no de la memoria).

*Esto implica que Windows 2000 utiliza un algoritmo local para evitar que un proceso perjudique a otros acaparando memoria. No obstante, el sistema trata de afinar su funcionamiento hasta cierto punto.

* Administración de memoria física

*En realidad hay cuatro listas libres. Cada página en la memoria esta en uno o más conjuntos de trabajo, o bien, exactamente en una de estas cuatro listas.

*Las lista de reserva (limpia) y modificada contiene páginas que hace poco se expulsaron de un conjunto de trabajo, todavía están en la memoria y asociadas con el proceso que las estaba usando. La diferencia es que las páginas limpias tienen una copia válida en disco y por tanto, pueden abandonarse cuando se desee, mientras que las páginas modificadas no tienen una copia válida en el disco.

*La lista libre consiste en páginas limpias que ya no están asociadas con ningún proceso.

* Las páginas de la lista de página en cero no están asociadas con ningún proceso y además ya se han llenado de ceros.

*Una quinta lista contienen páginas de RAM, físicamente defectuosa que pudieran existir para asegurarse de que no se usen nunca.

(1)Cuando el administrador de conjunto de trabajo quita una página de un conjunto de trabajo, esta se coloca al fondo de la lista de reserva o de la modificada, dependiendo de su estado de limpieza.(2) Las páginas de ambas listas siguen siendo válidas, de modo que sí se presenta un fallo de página y se necesita una de estas páginas, se saca de la lista y se vuelve a colocar en el conjunto de trabajo.(3) Cuando termina un proceso ya no puede generar fallo así que se colocan en la lista libre.Cada 4 segundos se ejecuta el subproceso intercambiador, este busca procesos que no hayan tenido ningún subproceso activo durante cierto número de segundos. Si encuentra procesos así, anula la fijación de sus pilas de kernel y sus páginas se pasan a la lista de reserva o modificada. (1).

*(4) Otro subproceso demonio el escritor de página con correspondencia y el escritor de página modificada, se activan en forma periódica para ver si hay suficientes páginas limpias. Si no hay suficiente, toman páginas de la parte superior de la lista modificada, las escribe en disco y luego la pasan a la lista de reserva.*(5) Si un proceso elimina la correspondencia de una página, esta deja de estar asociada con un proceso y puede colocarse en la lista libre.*(6) Si un fallo de página requiere un marco de página para contener la página que va a leerse, el marco se toma de la lista libre. No importa si la página contiene información confidencial porque va a sobrescribirse en su totalidad.*(7) Cuando crece una pila se necesita un marco de página vacío y las reglas de seguridad exigen que esta página este llena de ceros. Por este motivo se ejecuta el subproceso de páginas en ceros, este borra las páginas que están en la lista libre y las pasa a la lista de páginas en cero. Siempre que la CPU esta inactiva y hay páginas libres, más vale borrarlas para que una páginas en ceros es más útil que una página libre.

*En general. Windows 2000 resuelve conflictos aplicando heurísticas complejas, haciendo conjeturas, considerando precedentes históricos, usando métodos prácticos y basándose en parámetros controlados por el administrador. El código es tan complejo que los diseñadores se resisten a tocar cualquier parte de él por temor a descomponer algo del sistema, el cual ya nadie entiende en realidad.

* 11.8 SEGURIDAD EN WINDOWS 2000

*Aunque Windows 2000 no se diseñó en forma específica para que cumpliera con C2 (requisitos dc seguridad C2 del Departamento de Defensa de Estados Unidos (DoD 5200.28-STD)), hereda muchas propiedades dc seguridad de NT, incluidas las siguientes:

*Inicio de sesión seguro con medidas anti falsificación.

* Controles de acceso a discreción.

* Controles de acceso privilegiado.

* Protección del espacio de direcciones por proceso.

*Las páginas nuevas deben ponerse en cero antes de hacer que tengan correspondencia en memoria.

 *Auditoria dc seguridad.

*Inicio de sesión seguro significa que el administrador del sistema puede obligar a todos los usuarios a usar una contraseña para iniciar sesión.

*Los controles de acceso a discreción permiten al dueño de un archivo u otro objeto especificar quién puede usarlo y cómo.

*Los controles de acceso privilegiado permiten al administrador del sistema (súper usuario) sobrescribirlos si es necesario.

*La acción del espacio de direcciones tan sólo significa que cada proceso tiene su propio espacio de direcciones virtual protegido, al que no tiene acceso ningún proceso no autorizado.

*El siguiente requisito implica que, cuando crece una pila. Las páginas que tienen correspondencia en memoria se han llenado con ceros para que los procesos no puedan leer la información vieja que el dueño anterior de la página haya puesto.

*La auditora de seguridad permite al administrador generar un registro de ciertos sucesos relacionados con la seguridad.

* 11.8.1 Conceptos fundamentales

*Cada usuario (y grupo) de Windows 2000 se identifica con un Identificador de seguridad (SID: Security ID). Los SIDs son números binarios que tienen un encabezado corto seguido de un componente aleatorio largo. Se pretende que cada SID sea único a nivel mundial.

*Cada proceso tiene una ficha de acceso que especifica el SID y otras propiedades.

*El encabezado contiene cierta información administrativa.*El campo tiempo o fecha de vencimiento indica cuando dejara de ser válida la ficha, pero en la actualidad no se usa.*Los campos grupos especifican los grupos a los que pertenece el proceso: esto se requiere para cumplir con POSIX

*La lista de control de acceso a dirección DACL (discretionary ACL) predeterminada es la lista que se asigna a los objetos creados por el proceso, si no se especifica alguna otra ACL.

*El SID de usuario identifica al dueño del proceso.

*Los SID restringidos son para permitir que procesos no confiables participen en trabajos junto con procesos confiables pero con menos capacidad para causar daños.

*Los privilegios que aparecen, si los hay, confieren al proceso facultades especiales como el derecho a apagar la maquina o el acceso a archivos a los que de otra manera se negaría. Los privilegios deciden las facultades del súper usuario en varios derechos que pueden asignarse a los procesos en forma individual.

*En síntesis, la ficha de acceso dice quien posee el proceso y que valores predeterminados y facultades tiene asociados.

* Llamadas a la API para seguridad

*Casi todo el mecanismo de control de acceso de Windows 2000 se basa en descriptores de seguridad.

*El patrón usual es que, cuando un proceso crea un objeto, proporciona un descriptor de seguridad como uno de los parámetros de las llamadas CreateProcess, CreateFile u otras que crean objetos.

*Entonces ese descriptor de seguridad se convierte en el que está asociado con el objeto.

*Si no se proporciona un descriptor de seguridad en la llamada de creación del objeto, se usara la seguridad predeterminada que está en la ficha de acceso del invocador.

*Para crear un descriptor de seguridad, primero se le asigna memoria y luego se le dan valores iniciales con InitializeSecurityDescriptor. Esta llamada llena del encabezado. Si se desconoce el SID del dueño, puede consultarse por nombre empleando LookupAccountSid y luego insertarse en el descriptor de seguridad.*Lo mismo se hace con el SID de grupo, si lo hay. Regularmente estos SIDs serán el de invocador y el de uno de los grupos del invocador, respectivamente, pero el admin del sistema puede incluir cualquiera.

*Muchas de las llamadas de la APIWin32 en materia de seguridad tienen que ver con la administración de descriptores de seguridad.

*Ahora pueden asignarse valores iniciales a la DACL (o SACL) del descriptor de seguridad con Initialize ACL.

*Pueden añadirse entradas a una ACL con AddAccessAllowedAce y AddAccesDeniedAce. Estas pueden repetirse para añadir tantas entradas ACE como sea necesario.

*Puede usarse DeteleteAce para eliminar una entrada de una ACL existente.

*Cuando la ACL esta lista, puede usarse SetSecurityDescriptorDacl para asociarla con el descriptor de seguridad. Por ultimo cuando se crea el objeto, el descriptor de seguridad recién acuñado puede pasarse como parámetro para que se asocie con el objeto.

* 11.8.3 Implementación de la seguridad

*La seguridad en Windows 2000 se implementa con varios componentes.*Ei inicio de sesiones corre por cuenta de winlogon y la validación, por cuenta de Lsass y msgina.dll.*El resultado de un inicio de sesión exitoso es un nuevo Shell con su correspondiente ficha de acceso. Este proceso emplea las claves SECURITY y SAM dcl Registro. *La primera establece la directiva de segundad general y la segunda contiene la información de segundad para los usuarios individuales.

*Una vez que un usuario ha iniciado sesión, se efectúan operaciones de segundad. Cada llamada OpenXXX requiere el nombre del objeto que se abrirá y el conjunto de derechos requeridos, el administrador de seguridad, verifica si el invocador tiene todos los derechos requeridos.

*Esto lo hace examinando la ficha de acceso del invocador y la DACL asociada.

*La lista de entradas de la ACL se examina en orden. Tan pronto como se encuentra una entrada que coincide con el SID del invocador o de uno de sus grupos.

*El acceso que se indique allí se tomará como definitivo. Si están disponibles todos los derechos que necesita el invocador. La apertura tiene éxito: de lo contrario, fracasa.

*Las DACLs pueden tener entradas Deny además de entradas Allow. Por este motivo, se acostumbra colocar en la ACL las entradas que niegan acceso antes que las que lo permiten, para que un usuario al que se ha negado cl acceso en forma específica no pueda colarse por una puerta trasera.

*Una vez que se abre un objeto. Se devuelve al invocador un identificador para ese objeto.*En llamadas subsiguientes, lo único que se verifica es si la operación que se está intentando pertenece al conjunto de operaciones solicitadas durante la apertura, para evitar que un invocador abra un archivo para leer y luego trate de escribir en él.