Función CreateFileMappingNumaW (memoryapi.h)
Crea o abre un objeto de asignación de archivos con nombre o sin nombre para un archivo especificado y especifica el nodo NUMA para la memoria física.
Sintaxis
HANDLE CreateFileMappingNumaW(
[in] HANDLE hFile,
[in, optional] LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
[in] DWORD flProtect,
[in] DWORD dwMaximumSizeHigh,
[in] DWORD dwMaximumSizeLow,
[in, optional] LPCWSTR lpName,
[in] DWORD nndPreferred
);
Parámetros
[in] hFile
Identificador del archivo desde el que se va a crear un objeto de asignación de archivos.
El archivo debe abrirse con derechos de acceso compatibles con las marcas de protección que especifica el parámetro
Si hFile es INVALID_HANDLE_VALUE, el proceso de llamada también debe especificar un tamaño para el objeto de asignación de archivos en el dwMaximumSizeHigh y parámetros dwMaximumSizeLow. En este escenario, CreateFileMappingNuma crea un objeto de asignación de archivos de un tamaño especificado respaldado por el archivo de paginación del sistema en lugar de un archivo en el sistema de archivos.
[in, optional] lpFileMappingAttributes
Puntero a una estructura de SECURITY_ATTRIBUTES que determina si los procesos secundarios pueden heredar un identificador devuelto. El miembro de
SECURITY_ATTRIBUTES estructura especifica un descriptor de seguridad para un nuevo objeto de asignación de archivos.
Si lpFileMappingAttributes es NULL, el identificador no se puede heredar y el objeto de asignación de archivos obtiene un descriptor de seguridad predeterminado. Las listas de control de acceso (ACL) del descriptor de seguridad predeterminado para un objeto de asignación de archivos proceden del token principal o de suplantación del creador. Para obtener más información, vea seguridad de asignación de archivos y derechos de acceso.
[in] flProtect
Especifica la protección de páginas del objeto de asignación de archivos. Todas las vistas asignadas del objeto deben ser compatibles con esta protección.
Este parámetro puede ser uno de los siguientes valores.
Una aplicación puede especificar uno o varios de los atributos siguientes para el objeto de asignación de archivos si los combina con uno de los valores de protección de página anteriores.
[in] dwMaximumSizeHigh
La DWORD de orden superior del tamaño máximo del objeto de asignación de archivos.
[in] dwMaximumSizeLow
La DWORD de orden bajo del tamaño máximo del objeto de asignación de archivos.
Si este parámetro y el dwMaximumSizeHigh parámetro son 0 (cero), el tamaño máximo del objeto de asignación de archivos es igual al tamaño actual del archivo que identifica el parámetro hFile.
Se produce un error al intentar asignar un archivo con una longitud de 0 (cero) con un código de error de ERROR_FILE_INVALID. Las aplicaciones deben probar los archivos con una longitud de 0 (cero) y rechazar esos archivos.
[in, optional] lpName
Nombre del objeto de asignación de archivos.
Si este parámetro coincide con el nombre de un objeto de asignación de archivos existente, la función solicita acceso al objeto con la protección que especifica el parámetro flProtect.
Si este parámetro es NULL, el objeto de asignación de archivos se crea sin un nombre.
Si el parámetro lpName
El nombre puede tener un prefijo "Global" o "Local" para crear explícitamente el objeto en el espacio de nombres global o de sesión. El resto del nombre puede contener cualquier carácter excepto el carácter de barra diagonal inversa (\). La creación de un objeto de asignación de archivos en el espacio de nombres global requiere el privilegio SeCreateGlobalPrivilege. Para obtener más información, vea espacios de nombres de objeto kernel.
El cambio rápido de usuario se implementa mediante sesiones de Terminal Services. El primer usuario en iniciar sesión usa la sesión 0 (cero), el siguiente usuario para iniciar sesión usa la sesión 1 (una), etc. Los nombres de objeto de kernel deben seguir las instrucciones para que las aplicaciones puedan admitir varios usuarios.
[in] nndPreferred
Nodo NUMA donde debe residir la memoria física.
Valor | Significado |
---|---|
|
No se prefiere ningún nodo NUMA. Esto es lo mismo que llamar a la función |
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es un identificador del objeto de asignación de archivos.
Si el objeto existe antes de la llamada de función, la función devuelve un identificador al objeto existente (con su tamaño actual, no el tamaño especificado) y la función GetLastError devuelve ERROR_ALREADY_EXISTS.
Si se produce un error en la función, el valor devuelto es NULL. Para obtener información de error extendida, llame a la función
Observaciones
Después de crear un objeto de asignación de archivos, el tamaño del archivo no debe superar el tamaño del objeto de asignación de archivos; si lo hace, no todo el contenido del archivo está disponible para compartirlo.
El objeto de asignación de archivos se puede compartir por duplicación, herencia o por nombre. El contenido inicial de las páginas de un objeto de asignación de archivos respaldado por el archivo de página es 0 (cero).
Si una aplicación especifica un tamaño para el objeto de asignación de archivos que es mayor que el tamaño del archivo con nombre real en el disco y si la protección de páginas permite el acceso de escritura (es decir, el parámetro flProtect especifica PAGE_READWRITE o PAGE_EXECUTE_READWRITE), el archivo en el disco aumenta para que coincida con el tamaño especificado del objeto de asignación de archivos. Si el archivo se extiende, no se garantiza que el contenido del archivo entre el extremo anterior del archivo y el nuevo final del archivo sea cero; el comportamiento se define mediante el sistema de archivos.
Si no se puede aumentar el archivo, el resultado es un error al crear el objeto de asignación de archivos y la función GetLastError devuelve ERROR_DISK_FULL.
El identificador que devuelve la función createFileMappingNuma
La creación de un objeto de asignación de archivos crea la posibilidad de asignar una vista del archivo, pero no asigna la vista. La función mapViewOfFileExNuma asigna una vista de un archivo a un espacio de direcciones de proceso.
Con una excepción importante, las vistas de archivo derivadas de un único objeto de asignación de archivos son coherentes o idénticas en un momento específico. Si varios procesos tienen identificadores del mismo objeto de asignación de archivos, ven una vista coherente de los datos cuando asignan una vista del archivo.
La excepción está relacionada con los archivos remotos. Aunque la función createFileMappingNuma
Un archivo asignado y un archivo al que se accede mediante las funciones de entrada y salida (E/S) (ReadFile y WriteFile) no son necesariamente coherentes.
Para cerrar completamente un objeto de asignación de archivos, una aplicación debe desasignar todas las vistas asignadas del objeto de asignación de archivos llamando a la función
Estas funciones se pueden llamar en cualquier orden. La llamada a la función UnmapViewOfFile es necesaria, ya que las vistas asignadas de un objeto de asignación de archivos mantienen identificadores abiertos internos al objeto y un objeto de asignación de archivos no se cierra hasta que se cierran todos los identificadores abiertos.
Al modificar un archivo a través de una vista asignada, es posible que la última marca de tiempo de modificación no se actualice automáticamente. Si es necesario, el autor de la llamada debe usar SetFileTime para establecer la marca de tiempo.
La creación de un objeto de asignación de archivos a partir de una sesión distinta de la sesión cero requiere el privilegio
Use el control de excepciones estructurados para proteger cualquier código que escriba en o lea desde una vista asignada de memoria. Para obtener más información, vea lectura y escritura desde una vista de archivo.
Para tener una asignación con permisos ejecutables, una aplicación debe llamar a la función
En Windows Server 2012, esta función es compatible con las siguientes tecnologías.
Tecnología | Soportado |
---|---|
Protocolo bloque de mensajes del servidor (SMB) 3.0 | Sí |
Conmutación por error transparente (TFO) de SMB 3.0 | Sí |
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) | Sí |
Sistema de archivos de volumen compartido de clúster (CsvFS) | Sí |
Sistema de archivos resistente (ReFS) | Sí |
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows Vista [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2008 [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
memoryapi.h (incluya Windows.h, Memoryapi.h) |
biblioteca de |
onecore.lib |
DLL de |
Kernel32.dll |
Consulte también
funciones de asignación de archivos de