Función NtCreateSection (ntifs.h)

La rutina NtCreateSection crea un objeto de sección**.

Sintaxis

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateSection(
  [out]          PHANDLE            SectionHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PLARGE_INTEGER     MaximumSize,
  [in]           ULONG              SectionPageProtection,
  [in]           ULONG              AllocationAttributes,
  [in, optional] HANDLE             FileHandle
);

Parámetros

[out] SectionHandle

Puntero a una variable HANDLE que recibe un identificador para el objeto section.

[in] DesiredAccess

Especifica un valor ACCESS_MASK que determina el acceso solicitado al objeto . Además de los derechos de acceso definidos para todos los tipos de objetos, el autor de la llamada puede especificar cualquiera de los siguientes derechos de acceso, que son específicos de los objetos de sección:

Marca DesiredAccess Permite al autor de la llamada hacer esto
SECTION_EXTEND_SIZE Amplíe dinámicamente el tamaño de la sección.
SECTION_MAP_EXECUTE Ejecute vistas de la sección.
SECTION_MAP_READ Lee las vistas de la sección.
SECTION_MAP_WRITE Escriba vistas de la sección.
SECTION_QUERY Consulte el objeto de sección para obtener información sobre la sección. Los controladores deben establecer esta marca.
SECTION_ALL_ACCESS Todas las marcas anteriores combinadas con STANDARD_RIGHTS_REQUIRED.

[in, optional] ObjectAttributes

Puntero a una estructura de OBJECT_ATTRIBUTES que especifica el nombre de objeto y otros atributos. Use InitializeObjectAttributes para inicializar esta estructura. Si el autor de la llamada no se ejecuta en un contexto de subproceso del sistema, debe establecer el atributo OBJ_KERNEL_HANDLE cuando llama a InitializeObjectAttributes.

[in, optional] MaximumSize

Especifica el tamaño máximo, en bytes, de la sección . NtCreateSection redondea este valor hasta el múltiplo más cercano de PAGE_SIZE. Si el archivo de paginación respalda la sección, MaximumSize especifica el tamaño real de la sección. Si un archivo normal respalda la sección, MaximumSize especifica el tamaño máximo al que se puede extender o asignar el archivo.

[in] SectionPageProtection

Especifica la protección que se va a colocar en cada página de la sección . Use uno de los cuatro valores siguientes: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE o PAGE_WRITECOPY. Para obtener una descripción de estos valores, consulte CreateFileMapping.

[in] AllocationAttributes

Especifica una máscara de bits de marcas SEC_XXX que determina los atributos de asignación de la sección. Para obtener una descripción de estas marcas, consulte CreateFileMapping.

[in, optional] FileHandle

Opcionalmente, especifica un identificador para un objeto de archivo abierto. Si el valor de FileHandle es NULL, el archivo de paginación respalda la sección. De lo contrario, el archivo especificado respalda la sección.

Valor devuelto

NtCreateSection devuelve STATUS_SUCCESS si se ha realizado correctamente o el código de error NTSTATUS adecuado en caso de error. Entre los posibles códigos de estado de error se incluyen los siguientes:

Código devuelto Descripción
STATUS_FILE_LOCK_CONFLICT El archivo especificado por el parámetro FileHandle está bloqueado.
STATUS_INVALID_FILE_FOR_SECTION El archivo especificado por FileHandle no admite secciones.
STATUS_INVALID_PAGE_PROTECTION El valor especificado para el parámetro SectionPageProtection no es válido.
STATUS_MAPPED_FILE_SIZE_ZERO El tamaño del archivo especificado por FileHandle es cero y MaximumSize es cero.
STATUS_SECTION_TOO_BIG El valor de MaximumSize es demasiado grande. Esto ocurre cuando MaximumSize es mayor que el máximo definido por el sistema para las secciones, o si MaximumSize es mayor que el archivo especificado y la sección no se puede escribir.

Comentarios

Una vez que el identificador al que apunta SectionHandle ya no está en uso, el controlador debe llamar a NtClose para cerrarlo.

Si el autor de la llamada no se está ejecutando en un contexto de subproceso del sistema, debe asegurarse de que los identificadores que cree sean identificadores privados. De lo contrario, el proceso puede acceder al identificador en cuyo contexto se ejecuta el controlador. Para obtener más información, vea Identificadores de objeto.

Para obtener más información sobre cómo configurar secciones asignadas y vistas de memoria, vea Secciones y vistas.

Nota

Si la llamada a esta función se produce en modo de usuario, debe usar el nombre "NtCreateSection" en lugar de "ZwCreateSection".

En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Servicios del sistema nativo de Windows se pueden comportar de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000.
Plataforma de destino Universal
Encabezado ntifs.h (include Wdm.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Consulte también

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection