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 |