estrutura FLT_IO_PARAMETER_BLOCK (fltkernel.h)
A estrutura FLT_IO_PARAMETER_BLOCK contém os parâmetros para a operação de E/S representada por uma estrutura de dados de retorno de chamada FLT_CALLBACK_DATA.
Sintaxe
typedef struct _FLT_IO_PARAMETER_BLOCK {
ULONG IrpFlags;
UCHAR MajorFunction;
UCHAR MinorFunction;
UCHAR OperationFlags;
UCHAR Reserved;
PFILE_OBJECT TargetFileObject;
PFLT_INSTANCE TargetInstance;
FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;
Membros
IrpFlags
Uma máscara de bits de sinalizadores que especificam vários aspectos da operação de E/S. Esses sinalizadores são usados apenas para operações baseadas em IRP. A tabela a seguir mostra valores de sinalizador.
Valor | Significado |
---|---|
IRP_BUFFERED_IO | A operação é uma operação de E/S em buffer. |
IRP_CLOSE_OPERATION | A operação é uma operação de limpeza ou fechamento. |
IRP_DEALLOCATE_BUFFER | O Gerenciador de E/S liberará o buffer durante a fase de conclusão do IRP. |
IRP_INPUT_OPERATION | A operação é uma operação de entrada. |
IRP_NOCACHE | A operação é uma operação de E/S não armazenado em cache. |
IRP_PAGING_IO | A operação é uma operação de E/S de paginação. |
IRP_SYNCHRONOUS_API | A operação de E/S é síncrona. |
IRP_SYNCHRONOUS_PAGING_IO | A operação é uma operação de E/S de paginação síncrona. |
IRP_MOUNT_COMPLETION | Uma montagem de volume é concluída para a operação. |
IRP_CREATE_OPERATION | A operação é uma operação de criação ou abertura. |
IRP_READ_OPERATION | A operação de E/S é para leitura. |
IRP_WRITE_OPERATION | A operação de E/S é para gravação. |
IRP_DEFER_IO_COMPLETION | A conclusão de E/S da operação foi adiada. |
IRP_ASSOCIATED_IRP | A operação está associada a um IRP mestre. |
IRP_OB_QUERY_NAME | A operação é uma consulta de nome assíncrona. |
IRP_HOLD_DEVICE_QUEUE | Reservado. |
IRP_UM_DRIVER_INITIATED_IO | A operação foi originada de um driver de modo de usuário. |
MajorFunction
O código de função principal para a operação de E/S. Os principais códigos de função são usados para operações baseadas em IRP, operações de E/S rápidas e operações de retorno de chamada do FSFilter (sistema de arquivos). Para obter mais informações sobre operações adicionais, consulte FLT_PARAMETERS.
MinorFunction
O código de função secundária para a operação de E/S. Esse membro é opcional e pode ser NULL. O valor do membro MajorFunction determina os valores possíveis. Para obter mais informações sobre códigos de função secundários, consulte FLT_PARAMETERS.
OperationFlags
Uma máscara de bits de sinalizadores que especificam vários aspectos da operação de E/S. Esses sinalizadores são usados apenas para operações baseadas em IRP. O Gerenciador de Filtros copia esses sinalizadores do membro Flags da estrutura IO_STACK_LOCATION associada ao IRP. A tabela a seguir mostra os valores de sinalizador mais usados.
Valor | Significado |
---|---|
SL_CASE_SENSITIVE | Usado para IRP_MJ_CREATE. Se esse sinalizador for definido, as comparações de nome de arquivo deverão diferenciar maiúsculas de minúsculas. |
SL_EXCLUSIVE_LOCK | Usado para IRP_MJ_LOCK_CONTROL. 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 | Usado para IRP_MJ_LOCK_CONTROL. Se esse sinalizador estiver definido, a solicitação de bloqueio deverá falhar se não puder ser concedida imediatamente. |
SL_FORCE_ACCESS_CHECK | Usado para IRP_MJ_CREATE. Se esse sinalizador for definido, as verificações de acesso deverão ser executadas mesmo se o valor do membro RequestorMode do IRP for KernelMode. |
SL_FORCE_DIRECT_WRITE | Usado para IRP_MJ_WRITE e IOCTL_DISK_COPY_DATA. Se esse sinalizador for definido, os drivers de modo kernel poderão gravar em áreas de volume em que normalmente são impedidos de gravar devido a motivos de segurança. Esse sinalizador é verificado na camada do sistema de arquivos e na camada de pilha de armazenamento. O sinalizador SL_FORCE_DIRECT_WRITE está disponível no Windows Vista e em versões posteriores do Windows. |
SL_INDEX_SPECIFIED | Usado para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se esse sinalizador estiver definido, a verificação de informações de diretório, cota ou atributo estendido deverá começar na entrada na lista cujo índice é especificado. |
SL_OPEN_PAGING_FILE | Usado para IRP_MJ_CREATE. Se esse sinalizador estiver definido, o arquivo será um arquivo de paginação. |
SL_OPEN_TARGET_DIRECTORY | Usado para IRP_MJ_CREATE. Se esse sinalizador estiver definido, o diretório pai do arquivo deverá ser aberto. |
SL_OVERRIDE_VERIFY_VOLUME | Usado para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READ e IRP_MJ_WRITE. Se esse sinalizador for definido, a operação de E/S deverá ser executada mesmo se o sinalizador DO_VERIFY_VOLUME estiver definido no objeto do dispositivo do volume. |
SL_RESTART_SCAN | Usado para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se esse sinalizador estiver definido, a verificação de informações de diretório, cota ou atributo estendido deverá começar na primeira entrada no diretório ou na lista. Caso contrário, a verificação deverá ser retomada da verificação anterior. |
SL_RETURN_SINGLE_ENTRY | Usado para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se esse sinalizador estiver definido, a verificação de informações de diretório, cota ou atributo estendido deverá retornar apenas a primeira entrada encontrada. |
SL_WATCH_TREE | Usado para IRP_MJ_DIRECTORY_CONTROL. Se esse sinalizador for definido, todos os subdiretórios desse diretório também deverão ser observados. Caso contrário, apenas o diretório em si deve ser observado. |
SL_WRITE_THROUGH | Usado para IRP_MJ_WRITE. Se esse sinalizador estiver definido, os dados do arquivo deverão ser gravados no armazenamento persistente, não apenas gravados no cache. |
Reserved
Reservado para uso do sistema. Não use.
TargetFileObject
Um ponteiro de objeto de arquivo para o arquivo ou diretório que é o destino para esta operação de E/S.
TargetInstance
Um ponteiro de instância opaco para o minifiltro que é o destino para essa operação de E/S.
Parameters
Uma estrutura FLT_PARAMETERS que contém os parâmetros para a operação de E/S especificada pelos membros MajorFunction e MinorFunction .
Comentários
A estrutura FLT_IO_PARAMETER_BLOCK contém os parâmetros para a operação de E/S representada por uma estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA). A estrutura de dados de retorno de chamada contém um ponteiro para a estrutura FLT_IO_PARAMETER_BLOCK em seu membro Iopb .
Um minifiltro recebe um ponteiro para a estrutura de dados de retorno de chamada como o parâmetro de entrada Data ou CallbackData para os seguintes tipos de rotina de retorno de chamada:
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
As rotinas de retorno de chamada de pré-operação e postoperation de um minifiltro podem modificar o conteúdo da estrutura FLT_IO_PARAMETER_BLOCK para a operação de E/S, exceto para os membros MajorFunction e Reserved . Se isso acontecer, ele deverá chamar FltSetCallbackDataDirty, a menos que também tenha modificado o membro IoStatus da estrutura de dados de retorno de chamada para a operação. Caso contrário, os valores modificados serão ignorados.
Quando o Gerenciador de Filtros emite um retorno de chamada de pré-operação ou postoperation para um minifiltro, FltObjects-FileObject> e TargetFileObject (CallbackData-Iopb-TargetFileObject>>) são inicialmente os mesmos. Se um minifiltro modificar TargetFileObject ou TargetInstance, sua chamada subsequente para FltSetCallbackDataDirty de um retorno de chamada de pré-operação fará com que o Gerenciador de Filtros substitua FltObjects-FileObject> e FltObjects-Instance antes de> enviar a operação para filtros inferiores.
Se a rotina de retorno de chamada de pré-operação de um minifiltro modificar os parâmetros de uma operação de E/S, todos os minifiltros abaixo dela na pilha de instâncias de minifiltro receberão os parâmetros modificados em suas rotinas de retorno de chamada de pré-operação e operação de operação.
Os parâmetros modificados não são recebidos pela própria rotina de retorno de chamada de postoperation do minifiltro ou por quaisquer minifiltros acima desse minifiltro na pilha de instâncias de minifiltro. Em todos os casos, as rotinas de retorno de chamada de pré-operação e postoperation de um minifiltro recebem os mesmos valores de parâmetro de entrada.
Se um minifiltro alterar o valor do membro TargetInstance , o novo valor deverá ser um ponteiro para uma instância do mesmo minifiltro na mesma altitude em um volume diferente. Além disso, o objeto de dispositivo do novo volume deve ter um tamanho de pilha maior ou igual ao do objeto de dispositivo do volume original.
Para obter o tamanho da pilha de um objeto de dispositivo de volume, dado um ponteiro de instância opaca para uma instância anexada ao volume, faça o seguinte:
- Chame FltGetVolumeFromInstance para obter o ponteiro de volume.
- Chame FltGetDeviceObject para obter um ponteiro para o objeto do dispositivo de volume. Esse ponteiro é retornado no parâmetro DeviceObject . O tamanho da pilha do objeto do dispositivo pode ser encontrado em DeviceObject-StackSize>.
- Quando o ponteiro de volume não for mais necessário, chame FltObjectDereference para diminuir sua contagem de referência.
- Quando o ponteiro do objeto do dispositivo de volume não for mais necessário, chame ObDereferenceObject para diminuir sua contagem de referência.
Um minifiltro pode alterar o valor do membro TargetFileObject . No entanto, o novo valor deve ser um ponteiro para um objeto de arquivo para um arquivo que reside no mesmo volume que a instância especificada pelo membro TargetInstance .
Um minifiltro não pode alterar com segurança o valor do membro MajorFunction . Em vez disso, ele deve iniciar uma nova operação de E/S.
Um minifiltro pode iniciar uma operação de E/S chamando uma rotina de suporte, como FltReadFile ou chamando FltAllocateCallbackData para alocar uma estrutura de dados de retorno de chamada; inicializar os parâmetros de E/S na estrutura FLT_IO_PARAMETER_BLOCK e passar a estrutura de dados de retorno de chamada para FltPerformSynchronousIo ou FltPerformAsynchronousIo.
Observação
Use rotinas de suporte sempre que possível ao iniciar operações de E/S. Um minifiltro deve alocar seus próprios dados de retorno de chamada somente se não houver nenhuma função de suporte para uma operação de E/S específica.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | fltkernel.h (inclua Fltkernel.h) |
Confira também
- FLT_PARAMETERS para IRP_MJ_ACQUIRE_FOR_MOD_WRITE
- FLT_PARAMETERS para IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS para IRP_MJ_CREATE
- FLT_PARAMETERS para IRP_MJ_CREATE_MAILSLOT
- FLT_PARAMETERS para IRP_MJ_CREATE_NAMED_PIPE
- FLT_PARAMETERS para IRP_MJ_DEVICE_CONTROL
- FLT_PARAMETERS para IRP_MJ_DIRECTORY_CONTROL
- FLT_PARAMETERS para IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE
- FLT_PARAMETERS para IRP_MJ_FILE_SYSTEM_CONTROL
- FLT_PARAMETERS para IRP_MJ_INTERNAL_DEVICE_CONTROL
- FLT_PARAMETERS para IRP_MJ_LOCK_CONTROL
- FLT_PARAMETERS para IRP_MJ_MDL_READ
- FLT_PARAMETERS para IRP_MJ_MDL_READ_COMPLETE
- FLT_PARAMETERS para IRP_MJ_MDL_WRITE_COMPLETE
- FLT_PARAMETERS para IRP_MJ_NETWORK_QUERY_OPEN
- FLT_PARAMETERS para IRP_MJ_PNP
- FLT_PARAMETERS para IRP_MJ_PREPARE_MDL_WRITE
- FLT_PARAMETERS para IRP_MJ_QUERY_EA
- FLT_PARAMETERS para IRP_MJ_QUERY_INFORMATION
- FLT_PARAMETERS para IRP_MJ_QUERY_OPEN
- FLT_PARAMETERS para IRP_MJ_QUERY_QUOTA
- FLT_PARAMETERS para IRP_MJ_QUERY_SECURITY
- FLT_PARAMETERS para IRP_MJ_QUERY_VOLUME_INFORMATION
- FLT_PARAMETERS para IRP_MJ_READ
- FLT_PARAMETERS para IRP_MJ_RELEASE_FOR_MOD_WRITE
- FLT_PARAMETERS para IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS para IRP_MJ_SET_EA
- FLT_PARAMETERS para IRP_MJ_SET_INFORMATION
- FLT_PARAMETERS para IRP_MJ_SET_QUOTA
- FLT_PARAMETERS para IRP_MJ_SET_SECURITY
- FLT_PARAMETERS para IRP_MJ_SET_VOLUME_INFORMATION
- FLT_PARAMETERS para IRP_MJ_SYSTEM_CONTROL
- FLT_PARAMETERS para IRP_MJ_VOLUME_MOUNT
- FLT_PARAMETERS para IRP_MJ_WRITE