Estructura FCB

La estructura del bloque de control de archivos (FCB) apunta al campo FsContext en el objeto de archivo. Todas las operaciones que comparten un FCB hacen referencia al mismo archivo. Desafortunadamente, los servidores SMB se implementan hoy en día de forma que un nombre puede ser un alias, de modo que dos nombres diferentes podrían ser el mismo archivo. El FCB es el punto focal de las operaciones de archivo. Puesto que las operaciones en el mismo FCB se encuentran realmente en el mismo archivo, la sincronización se basa en el FCB en lugar de en algún objeto de nivel superior.

Cada vez que se crea una estructura FCB, también se crea una estructura de SRV_OPEN y FOBX correspondiente. Se puede asociar más de una estructura SRV_OPEN a una estructura FCB determinada y más de una estructura FOBX está asociada a una estructura SRV_OPEN determinada. En la mayoría de los casos, el que SRV_OPEN estructura está asociado a un FCB, y el número de estructuras FOBX asociadas a una estructura de SRV_OPEN determinada es 1. Para mejorar la localidad espacial y el comportamiento de paginación en tales casos, la asignación de una estructura FCB también implica una asignación para una estructura SRV_OPEN asociada y FOBX.

RDBSS intenta asignar las estructuras FCB, SRV_OPEN y FOBX asociadas en la memoria para mejorar el comportamiento de paginación. RDBSS no asigna las estructuras FCB y NET_ROOT juntas porque las estructuras de NET_ROOT no se paginan, pero las estructuras FCB normalmente se paginan (a menos que sean archivos de paginación).

La estructura FCB corresponde a todos los archivos y directorios abiertos. La estructura FCB se divide en las dos partes siguientes:

  • Una parte no paginada asignada en un grupo no paginado

  • Un elemento paginado

La primera es la NON_PAGED_FCB y la más adelante se conoce como FCB.

El FCB contiene un puntero a la parte NON_PAGED_FCB correspondiente. Un backpointer se mantiene desde el NON_PAGED_FCB al FCB con fines de depuración en compilaciones comprobadas.

El NON_PAGED_FCB contiene una estructura de punteros especiales usados por el Administrador de memoria y el Administrador de caché para manipular objetos de sección. Tenga en cuenta que los valores de estos punteros se establecen normalmente fuera del sistema de archivos.

Una estructura FCB contiene lo siguiente:

  • Estructura de FSRTL_COMMON_HEADER

  • Un recuento de firmas y referencias

  • Un nombre e información de tabla asociada

  • Un backpointer a la estructura de NET_ROOT asociada

  • Lista de estructuras de SRV_OPEN asociadas

  • El objeto de dispositivo

  • Cualquier almacenamiento adicional solicitado por el minidirector de red o el creador de la estructura FCB