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.