Função FsRtlCreateSectionForDataScan (ntifs.h)

A rotina FsRtlCreateSectionForDataScan cria um objeto de seção. Use essa rotina com extrema cautela. (Consulte a seção Comentários a seguir.)

Sintaxe

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

Parâmetros

[out] SectionHandle

Ponteiro para uma variável alocada pelo chamador que recebe um identificador opaco para o objeto de seção.

[out] SectionObject

Ponteiro para uma variável alocada pelo chamador que recebe um ponteiro opaco para o objeto de seção.

[out, optional] SectionFileSize

Ponteiro para uma variável alocada pelo chamador que recebe o tamanho, em bytes, do arquivo no momento em que o objeto de seção foi criado. Esse parâmetro é opcional e pode ser NULL.

[in] FileObject

Objeto file para um arquivo aberto. O objeto de seção será apoiado pelo arquivo especificado. Esse parâmetro é necessário e não pode ser NULL.

[in] DesiredAccess

Especifica o acesso desejado para o objeto de seção como um ou mais dos sinalizadores de ACCESS_MASK a seguir.

Sinalizador DesiredAccess Permite que o chamador
SECTION_MAP_READ Ler exibições da seção.
SECTION_MAP_WRITE Gravar exibições da seção.
SECTION_QUERY Consulte o objeto de seção para obter informações sobre a seção. Os drivers devem definir esse sinalizador.
SECTION_ALL_ACCESS Todas as ações definidas pelos sinalizadores anteriores, bem como as definidas por STANDARD_RIGHTS_REQUIRED. (Para obter mais informações sobre STANDARD_RIGHTS_REQUIRED, consulte ACCESS_MASK.)

[in, optional] ObjectAttributes

Ponteiro para uma estrutura OBJECT_ATTRIBUTES que especifica o nome do objeto e outros atributos. Use a macro InitializeObjectAttributes para inicializar essa estrutura. Como FsRtlCreateSectionForDataScan insere esse objeto na tabela de identificador de processo, o chamador deve especificar o atributo OBJ_KERNEL_HANDLE ao chamar InitializeObjectAttributes.

[in, optional] MaximumSize

Esse parâmetro é reservado para uso futuro.

[in] SectionPageProtection

Especifica a proteção a ser colocada em cada página na seção. Especifique um dos valores a seguir. Esse parâmetro é necessário e não pode ser zero.

Sinalizador Significado
PAGE_READONLY Habilita o acesso somente leitura à região confirmada das páginas. Uma tentativa de gravar na região confirmada resulta em uma violação de acesso. Se o sistema diferenciar o acesso somente leitura e executar o acesso, uma tentativa de executar código na região confirmada resultará em uma violação de acesso.
PAGE_READWRITE Habilita o acesso de leitura e gravação à região confirmada das páginas.

[in] AllocationAttributes

Bitmasks dos sinalizadores SEC_XXX determinam os atributos de alocação da seção. Especifique um ou mais dos valores a seguir. Esse parâmetro é necessário e não pode ser zero.

Sinalizador Significado
SEC_COMMIT Aloca armazenamento físico na memória ou no arquivo de paginação no disco para todas as páginas de uma seção. Essa é a configuração padrão. Observe que esse sinalizador é necessário e não pode ser omitido.
SEC_FILE O arquivo especificado pelo parâmetro FileObject é um arquivo mapeado.

[in] Flags

Esse parâmetro é reservado para uso futuro.

Retornar valor

FsRtlCreateSectionForDataScan retorna STATUS_SUCCESS ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_END_OF_FILE
O tamanho do arquivo especificado pelo parâmetro FileObject é zero. Este é um código de erro.
STATUS_FILE_LOCK_CONFLICT
O arquivo especificado pelo parâmetro FileObject está bloqueado. Este é um código de erro.
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan encontrou uma falha de alocação de pool. Este é um código de erro.
STATUS_INVALID_FILE_FOR_SECTION
O arquivo especificado pelo parâmetro FileObject não dá suporte a seções. Este é um código de erro.
STATUS_INVALID_PARAMETER_8
O valor especificado para o parâmetro SectionPageProtection é inválido. Este é um código de erro.
STATUS_INVALID_PARAMETER_9
O chamador especificou um valor inválido para o parâmetro AllocationAttributes. Este é um código de erro.
STATUS_PRIVILEGE_NOT_HELD

O chamador não tinha o privilégio necessário para criar um objeto de seção com o acesso especificado no parâmetro DesiredAccess. Este é um código de erro.

Comentários

Importante A rotina FsRtlCreateSectionForDataScan só deve ser usada nos casos em que um identificador para o objeto de arquivo especificado no parâmetro FileObject ainda não foi criado (normalmente durante o processamento de uma operação pós-criação). Se o driver tiver um identificador para o objeto de arquivo ou puder obter um identificador para o objeto de arquivo, o driver deverá usar a rotina ZwCreateSection .
 
Depois que o objeto de seção criado por essa rotina não for mais necessário, feche o identificador do objeto de seção (SectionHandle) chamando a rotina ZwClose e desreferenciando o próprio objeto de seção (SectionObject) chamando a rotina ObDereferenceObject .

Para obter mais informações sobre como criar seções mapeadas e exibições de memória, consulte Objetos de seção e exibições. Consulte também a documentação da rotina CreateFileMapping no SDK do Microsoft Windows.

Requisitos

Requisito Valor
Cliente mínimo com suporte Pacote cumulativo de atualizações para Windows 2000 Service Pack 4 (SP4); Rollup do Gerenciador de Filtros para Windows XP Service Pack 2 (SP2).
Servidor mínimo com suporte Microsoft Windows Server 2003 SP1
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira também

ACCESS_MASK

CcPurgeCacheSection

MmFlushImageSection

MmForceSectionClosed

ZwCreateSection