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 |