Função NtCreateSectionEx (ntifs.h)

NtCreateSectionEx cria um objeto de seção** e abre um identificador para o objeto com o acesso desejado especificado. É uma versão estendida do NtCreateSection que cria um objeto de seção especificando para indicar que essa é, na verdade, uma seção AWE (Address Windowing Extensions).

Sintaxe

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

Parâmetros

[out] SectionHandle

Ponteiro para uma variável HANDLE que recebe um identificador para o objeto de seção.

[out] DesiredAccess

Especifica um valor ACCESS_MASK que determina o acesso solicitado ao objeto . Além dos direitos de acesso definidos para todos os tipos de objetos, o chamador pode especificar qualquer um dos seguintes direitos de acesso, que são específicos para objetos de seção:

Sinalizador DesiredAccess Permite que o chamador faça isso
SECTION_EXTEND_SIZE Estenda dinamicamente o tamanho da seção.
SECTION_MAP_EXECUTE Execute exibições da seção.
SECTION_MAP_READ Ler exibições da seção.
SECTION_MAP_WRITE Escreva exibições da seção.
SECTION_QUERY Consulte o objeto section para obter informações sobre a seção. Os drivers devem definir esse sinalizador.
SECTION_ALL_ACCESS Todos os sinalizadores anteriores combinados com STANDARD_RIGHTS_REQUIRED.

[in, optional] ObjectAttributes

Ponteiro para uma estrutura OBJECT_ATTRIBUTES que especifica o nome do objeto e outros atributos. Use InitializeObjectAttributes para inicializar essa estrutura. Se o chamador não estiver em execução em um contexto de thread do sistema, ele deverá definir o atributo OBJ_KERNEL_HANDLE quando chamar InitializeObjectAttributes.

[in, optional] MaximumSize

Especifica o tamanho máximo, em bytes, da seção . NtCreateSection arredonda esse valor para cima até o múltiplo mais próximo de PAGE_SIZE. Se a seção for apoiada pelo arquivo de paginação, MaximumSize especificará o tamanho real da seção. Se a seção for apoiada por um arquivo comum, MaximumSize especificará o tamanho máximo para o qual o arquivo pode ser estendido ou mapeado.

[in] SectionPageProtection

Especifica a proteção a ser colocada em cada página da seção. Use um dos quatro valores a seguir: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE ou PAGE_WRITECOPY. Para obter uma descrição desses valores, consulte CreateFileMapping.

[in] AllocationAttributes

Especifica uma máscara de bits de sinalizadores SEC_XXX que determina os atributos de alocação da seção. Para obter uma descrição desses sinalizadores, consulte CreateFileMapping.

[in, optional] FileHandle

Opcionalmente, especifica um identificador para um objeto de arquivo aberto. Se o valor de FileHandle for NULL, a seção será apoiada pelo arquivo de paginação. Caso contrário, a seção será apoiada pelo arquivo especificado.

[in/out] ExtendedParameters

Um ponteiro para uma matriz de estruturas MEM_EXTENDED_PARAMETER contém os parâmetros estendidos para criar a seção.

ExtendedParameterCount

O tamanho da matriz para a qual ExtendedParameters aponta.

Retornar valor

NtCreateSectionEx retorna STATUS_SUCCESS em caso de êxito ou o código de erro NTSTATUS apropriado em caso de falha. Possíveis códigos de status de erro incluem o seguinte:

Código de retorno Descrição
STATUS_FILE_LOCK_CONFLICT O arquivo especificado pelo parâmetro FileHandle está bloqueado.
STATUS_INVALID_FILE_FOR_SECTION O arquivo especificado por FileHandle não dá suporte a seções.
STATUS_INVALID_PAGE_PROTECTION O valor especificado para o parâmetro SectionPageProtection é inválido.
STATUS_MAPPED_FILE_SIZE_ZERO O tamanho do arquivo especificado por FileHandle é zero e MaximumSize é zero.
STATUS_SECTION_TOO_BIG O valor de MaximumSize é muito grande. Isso ocorre quando MaximumSize é maior que o máximo definido pelo sistema para seções ou se MaximumSize é maior que o arquivo especificado e a seção não é gravável.

Comentários

Depois que o identificador apontado por SectionHandle não estiver mais em uso, o driver deverá chamar NtClose para fechá-lo.

Se o chamador não estiver em execução em um contexto de thread do sistema, ele deverá garantir que todos os identificadores que ele cria sejam identificadores privados. Caso contrário, o identificador pode ser acessado pelo processo em cujo contexto o driver está em execução. Para obter mais informações, consulte Identificadores de objeto.

Para obter mais informações sobre como configurar seções mapeadas e exibições de memória, consulte Seções e exibições.

Observação

Se a chamada para essa função ocorrer no modo de usuário, você deverá usar o nome "NtCreateSectionEx" em vez de "ZwCreateSectionEx".

Para chamadas de drivers de modo kernel, as versões NtXxx e ZwXxx de uma rotina do Windows Native System Services podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Using Nt and Zw Versions of the Native System Services Routines.

ExtendedParameters será um parâmetro estendido baseado em pilha se o nó NUMA preferencial tiver sido especificado.

Somente uma instância de um parâmetro estendido pode ser especificada.

Converta em um número de nó numa baseado em 1 que é esperado downstream dessa API.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1803
Cabeçalho ntifs.h
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe

Confira também

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection