IRP_MJ_LOCK_CONTROL (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S, outros componentes do sistema operacional e outros drivers do modo kernel enviam solicitações de IRP_MJ_LOCK_CONTROL.

Operação: Drivers do sistema de arquivos

O driver do sistema de arquivos deve extrair e decodificar o objeto de arquivo para determinar se o objeto de dispositivo de destino é o objeto do dispositivo de controle do sistema de arquivos. Nesse caso, o driver do sistema de arquivos deve concluir o IRP conforme apropriado sem processar a solicitação de bloqueio.

Caso contrário, se a solicitação tiver sido emitida em um identificador que representa um arquivo de usuário aberto, o driver do sistema de arquivos deverá executar a operação indicada pelo código de função secundária e concluir o IRP. Caso contrário, o driver deve falhar no IRP.

Veja a seguir os códigos de função secundária válidos:

Código Descrição
IRP_MN_LOCK Indica uma solicitação de bloqueio de intervalo de bytes, possivelmente em nome de um aplicativo de modo de usuário que chamou a função Win32 LockFile .
IRP_MN_UNLOCK_ALL Indica uma solicitação para liberar todos os bloqueios de intervalo de bytes para um arquivo, geralmente porque o último identificador pendente para um objeto de arquivo está sendo fechado.
IRP_MN_UNLOCK_ALL_BY_KEY Indica uma solicitação para liberar todos os bloqueios de intervalo de bytes com um valor de chave especificado.
IRP_MN_UNLOCK_SINGLE Indica uma solicitação para liberar um único bloqueio de intervalo de bytes, possivelmente em nome de um aplicativo de modo de usuário que chamou a função Win32 UnlockFile .

Operação: Drivers de filtro do sistema de arquivos herdado

Os drivers de filtro do sistema de arquivos devem passar o IRP para o driver mais baixo na pilha depois de executar qualquer processamento necessário.

Parâmetros

Um driver de filtro ou sistema de arquivos chama IoGetCurrentIrpStackLocation com o IRP fornecido para obter um ponteiro para seu próprio local de pilha no IRP, mostrado na lista a seguir como IrpSp. (O IRP é mostrado como Irp.) O driver pode usar as informações definidas nos seguintes membros do IRP e no local da pilha IRP no processamento de uma solicitação de controle de bloqueio:

  • DeviceObject é um ponteiro para o objeto de dispositivo de destino.

  • Irp->O IoStatus aponta para uma estrutura de IO_STATUS_BLOCK que recebe o status de conclusão final e informações sobre a operação solicitada.

  • IrpSp->FileObject aponta para o objeto de arquivo associado a DeviceObject.

    O parâmetro IrpSp-FileObject> contém um ponteiro para o campo RelatedFileObject, que também é uma estrutura FILE_OBJECT. O campo RelatedFileObject da estrutura FILE_OBJECT não é válido durante o processamento de IRP_MJ_LOCK_CONTROL e não deve ser usado.

  • IrpSp->Os sinalizadores podem ser um ou mais dos seguintes valores:

Sinalizador Significado
SL_EXCLUSIVE_LOCK Se esse sinalizador for definido, um bloqueio de intervalo de bytes exclusivo será solicitado. Caso contrário, um bloqueio compartilhado será solicitado.
SL_FAIL_IMMEDIATELY Se esse sinalizador estiver definido, a solicitação de bloqueio deverá falhar se não puder ser concedida imediatamente.
  • IrpSp->MajorFunction está definido como IRP_MJ_LOCK_CONTROL.

  • IrpSp->MinorFunction é definido como um dos seguintes valores:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset é o deslocamento de bytes inicial dentro do arquivo do intervalo de bytes a ser bloqueado ou desbloqueado.

  • IrpSp->Parameters.LockControl.Key é a chave para o bloqueio de intervalo de bytes.

  • IrpSp->Parameters.LockControl.Length é o comprimento, em bytes, do intervalo de bytes a ser bloqueado ou desbloqueado.

Confira também

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP