FLT_PARAMETERS para união IRP_MJ_PREPARE_MDL_WRITE
O membro da união FLT_PARAMETERS a seguir será utilizado quando FLT_IO_PARAMETER_BLOCK.MajorFunction for IRP_MJ_PREPARE_MDL_WRITE.
Sintaxe
typedef union _FLT_PARAMETERS {
... ;
struct {
LARGE_INTEGER FileOffset;
ULONG POINTER_ALIGNMENT Length;
ULONG POINTER_ALIGNMENT Key;
PMDL *MdlChain;
} PrepareMdlWrite;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Membros
PrepareMdlWrite: estrutura que contém os membros a seguir.
FileOffset: byte inicial no arquivo armazenado em cache.
Length: o comprimento, em bytes, dos dados que serão gravados no arquivo armazenado em cache.
Key: valor de chave associado a um bloqueio de intervalo de bytes no arquivo de destino. Se o intervalo a ser gravado se sobrepor ou for um subintervalo de um intervalo exclusivamente bloqueado dentro do arquivo, esse parâmetro precisará ser a chave para esse bloqueio exclusivo. O bloqueio exclusivo deve ser mantido pelo processo pai do thread de chamada, senão esse parâmetro será ignorado.
MdlChain: ponteiro para uma variável que recebe um ponteiro para uma cadeia de uma ou mais listas de descritores de memória (MDL) que descrevem as páginas que contêm os dados que serão gravados.
Comentários
IRP_MJ_PREPARE_MDL_WRITE é uma operação de E/S rápida. Ele faz a mesma coisa que IRP_MJ_WRITE + IRP_MN_MDL, exceto pela seguinte diferença:
- A operação baseada em IRP configura o armazenamento em cache no arquivo, caso ainda não tenha sido armazenado em cache antes do trabalho da MDL.
- A operação de E/S rápida falhará se o arquivo ainda não tiver sido armazenado em cache.
A estrutura FLT_PARAMETERS para operações IIRP_MJ_PREPARE_MDL_WRITE contém os parâmetros de uma operação de E/S rápida PrepareMdlWrite. A operação é representada por uma estrutura (FLT_CALLBACK_DATA) de dados de retorno de chamada. Ela está contida em uma estrutura FLT_IO_PARAMETER_BLOCK, com os parâmetros da operação na estrutura FLT_IO_PARAMETER_BLOCK para a qual Iopb aponta.
Se uma solicitação de E/S rápida IRP_MJ_PREPARE_MDL_WRITE falhar, o emissor da E/S definirá como reemitir a solicitação. Por exemplo, a solicitação pode ser reemitida como uma operação baseada em IRP usando IRP_MJ_WRITE + IRP_MN_MDL.
Requisitos
Tipo de requisito | Requisito |
---|---|
Cabeçalho | Fltkernel.h (inclui Fltkernel.h) |