Partilhar via


Função MmLockPagableDataSection (wdm.h)

A rotina MmLockPagableDataSection bloqueia uma seção inteira dos dados do driver no espaço do sistema.

Sintaxe

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Parâmetros

[in] AddressWithinSection

Especifica o endereço simbólico de um item de dados na seção pageable.

Valor de retorno

MmLockPagableDataSection retorna um valor opaco que identifica a seção. Esse valor deve ser passado posteriormente para MmLockPagableSectionByHandle ou para MmUnlockPagableImageSection.

Observações

Os drivers podem usar essa rotina, MmLockPagableSectionByHandle e MmUnlockPagableImageSection para tornar seus dados privados que normalmente são pagináveis bloqueados na memória.

Os dados poderão ser bloqueados se:

  • Normalmente, os dados são acessados em <= APC_LEVEL, mas podem precisar ser acessados em níveis IRQL mais altos por curtos períodos.

  • O driver usa os dados com pouca frequência e previsivelmente.

Por exemplo, os drivers para dispositivos de mixer usam seções de dados pagináveis. Como o driver usa dados suficientes para fazer com que a criação de uma seção de dados pagináveis valha a pena e o driver sabe quando os dados são necessários, esse driver usa MmLockPagableDataSection, MmLockPagableSectionByHandle e MmUnlockPagableImageSection para colocar uma seção de dados no espaço do sistema quando necessário e disponibilizá-la para ser paginada quando não necessário.

Uma única chamada para MmLockPagableDataSection faz com que toda a seção, que contém os dados referenciados, seja bloqueada no espaço do sistema.

É uma operação cara para bloquear uma seção. Se uma seção de dados pagináveis for bloqueada em mais de um lugar por um driver, use MmLockPagableDataSection para a primeira solicitação. Faça solicitações de bloqueio subsequentes chamando MmLockPagableSectionByHandle, passando o identificador retornado por MmLockPagableDataSection. O bloqueio por identificador melhora significativamente o desempenho do driver. Uma seção bloqueada é desbloqueada chamando MmUnlockPagableImageSection.

O gerenciador de memória mantém uma contagem de referência na seção. Uma seção de dados pagináveis só está disponível para ser paginada quando a contagem de referências for zero. Cada solicitação de bloqueio incrementa a contagem; cada solicitação de desbloqueio diminui a contagem. Um driver deve desbloquear uma seção quantas vezes bloquear uma seção para garantir que essa seção esteja disponível para ser paginada quando a seção não for necessária. Um identificador é sempre válido, independentemente da contagem. Se a contagem em um identificador for zero e uma chamada for feita para MmLockPagableSectionByHandle, a contagem será definida como uma e, se a seção tiver sido excluída, ela será paginada.

Os dados em uma seção de dados pagináveis são marcados por uma diretiva do compilador. Para criar uma seção de dados paginável, use #pragma data_seg ("PAGE"), no início do módulo de dados e #pragma data_seg () no final do módulo. A palavra-chave PAGE diferencia maiúsculas de minúsculas, ou seja, page deve ser maiúscula.

Observe que também há um #pragma data_seg("INIT") usado para tornar os dados descartados após a inicialização do sistema. Exceto pelo uso de INIT em vez de PAGE, a sintaxe é a mesma. No entanto, o resultado não é; O uso da diretiva PAGE torna a seção de dados paginável. Quando a diretiva INIT é usada, os dados na seção são descartados assim que o driver retorna de sua rotina de entrada de driver ou sua rotina de reinicialização se o driver tiver um.

Para obter mais informações sobre dados de paginação, consulte Tornando os drivers pagináveis.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <=APC_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Consulte também

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection