Função MmProbeAndLockPages (wdm.h)

A rotina MmProbeAndLockPages investiga as páginas de memória virtual especificadas, as torna residentes e as bloqueia na memória (por exemplo, uma transferência de DMA). Isso garante que as páginas não possam ser liberadas e realocadas enquanto um driver de dispositivo (ou hardware) ainda as estiver usando.

Sintaxe

void MmProbeAndLockPages(
  [in, out] PMDL            MemoryDescriptorList,
  [in]      KPROCESSOR_MODE AccessMode,
  [in]      LOCK_OPERATION  Operation
);

Parâmetros

[in, out] MemoryDescriptorList

Um ponteiro para um MDL que especifica um buffer de memória virtual. Se a rotina bloquear com êxito as páginas na memória, o MDL será atualizado para descrever as páginas físicas subjacentes.

[in] AccessMode

O modo de acesso no qual investigar os argumentos, KernelMode ou UserMode.

[in] Operation

O tipo de operação para o qual o chamador deseja que os direitos de acesso são investigados e as páginas bloqueadas. Defina esse parâmetro como IoReadAccess, IoWriteAccess ou IoModifyAccess. IoReadAccess indica que o driver pode examinar o conteúdo do buffer, mas não pode alterar o conteúdo. IoWriteAccess e IoModifyAccess, que são equivalentes, indicam que o driver tem acesso de leitura e gravação ao buffer.

Retornar valor

Nenhum

Comentários

O driver de nível mais alto em uma cadeia de drivers em camadas que usam E/S direta chama essa rotina. Os drivers que usam E/S em buffer nunca chamam MmProbeAndLockPages.

MmProbeAndLockPages executa as seguintes operações:

  1. Se o intervalo de memória especificado for paginado em um repositório de backup (disco, rede e assim por diante), MmProbeAndLockPages o tornará residente.
  2. Em seguida, a rotina confirma que as páginas permitem a operação especificada pelo parâmetro Operation .
  3. Se o intervalo de memória permitir a operação especificada, a rotina bloqueará as páginas na memória para que elas não possam ser paginadas. Use a rotina MmUnlockPages para desbloquear as páginas.
  4. Por fim, a rotina atualiza a matriz PFN ( número de quadro de página ) no MDL para descrever as páginas físicas bloqueadas.
Uma chamada bem-sucedida para MmProbeAndLockPages bloqueia as páginas em um MDL e define a estrutura MDL como o estado bloqueado. Cada chamada deve ser correspondida por uma chamada correspondente a MmUnlockPages que desbloqueia as páginas e define o MDL como o estado desbloqueado. Depois que uma chamada MmProbeAndLockPages define um MDL para o estado bloqueado, uma segunda chamada para MmProbeAndLockPages para bloquear o mesmo MDL não é permitida até que MmUnlockPages seja chamado pela primeira vez para desbloquear o MDL.

Se dois ou mais MDLs descreverem a mesma página física, a página poderá ser bloqueada várias vezes, uma vez para cada MDL. A página é desbloqueada quando o último MDL é definido como o estado desbloqueado.

Uma rotina como MmBuildMdlForNonPagedPool ou IoBuildPartialMdl atualiza um MDL para descrever páginas que não podem ser publicadas ou já bloqueadas. Uma chamada para MmProbeAndLockPages ou MmUnlockPages para bloquear ou desbloquear tal MDL não é permitida.

As chamadas para MmProbeAndLockPages devem ser colocadas em um bloco try/except . Se as páginas não derem suporte à operação especificada, a rotina gerará o STATUS_ACCESS_VIOLATION ou outras exceções. Para obter mais informações, consulte Tratamento de exceções.

Os chamadores de MmProbeAndLockPages devem estar em execução em IRQL <= APC_LEVEL para endereços pagináveis ou em IRQL <= DISPATCH_LEVEL para endereços não pagináveis.

Essa rotina não fornece nenhuma garantia sobre o endereço virtual que descreve essas páginas (ou seja, o endereço virtual pode ser não mapeado, reutilizado e assim por diante). No entanto, as páginas físicas têm a garantia de serem bloqueadas no retorno bem-sucedido.

Para evitar falhas de página, use o VirtualLock para bloquear o endereço virtual para que ele não seja cortado, a menos que o aplicativo o desbloqueie ou o libere explicitamente chamando VirtualFree ou UnmapViewOfFile.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consulte a seção Observações.
Regras de conformidade de DDI HwStorPortProhibitedDDIs(storport)

Confira também

IoBuildPartialMdl

MmBuildMdlForNonPagedPool

MmUnlockPages