Função IoCheckShareAccess (wdm.h)
A rotina IoCheckShareAccess é chamada por FSDs (drivers do sistema de arquivos) ou outros drivers de nível mais alto para marcar se o acesso compartilhado a um objeto de arquivo é permitido.
Sintaxe
NTSTATUS IoCheckShareAccess(
[in] ACCESS_MASK DesiredAccess,
[in] ULONG DesiredShareAccess,
[in, out] PFILE_OBJECT FileObject,
[in, out] PSHARE_ACCESS ShareAccess,
[in] BOOLEAN Update
);
Parâmetros
[in] DesiredAccess
Especifica um valor ACCESS_MASK que indica o tipo desejado de acesso ao FileObject fornecido para a solicitação aberta atual. Os drivers calculam o valor desse parâmetro tomando o acesso solicitado na solicitação IRP_MJ_CREATE e, em seguida, aplicando SeAccessCheck para cada descritor de segurança para determinar o acesso real concedido. Se o acesso concedido for mais restritivo do que o acesso desejado, isso será um erro e o driver deverá concluir o IRP atual com um status de STATUS_ACCESS_DENIED. (Observe que SeAccessCheck limpa o bit MAXIMUM_ALLOWED no acesso concedido; não use esse bit ao comparar o acesso desejado ao acesso concedido.) Em seguida, o driver passa o acesso concedido como o valor de DesiredAccess.
[in] DesiredShareAccess
Especifica o tipo desejado de acesso compartilhado ao FileObject para a solicitação aberta atual. O valor desse parâmetro geralmente é o mesmo que o ShareAccess passado para o sistema de arquivos ou o driver de nível mais alto pelo gerente de E/S quando a solicitação aberta foi feita. Esse valor pode ser zero ou qualquer combinação do seguinte:
FILE_SHARE_READ
FILE_SHARE_WRITE
FILE_SHARE_DELETE
[in, out] FileObject
Ponteiro para o objeto de arquivo para o qual marcar acesso para a solicitação aberta atual.
[in, out] ShareAccess
Ponteiro para a estrutura de dados de acesso de compartilhamento comum associada ao FileObject. Os drivers devem tratar essa estrutura como opaca.
[in] Update
Especifica se o status de acesso de compartilhamento deve ser atualizado para FileObject. Um valor booliano de TRUE significa que essa rotina atualizará as informações de acesso de compartilhamento para o objeto de arquivo se a solicitação aberta for permitida.
Retornar valor
IoCheckShareAccess retornará STATUS_SUCCESS se o acesso do solicitante ao objeto de arquivo for compatível com a maneira como ele está aberto no momento. Se a solicitação for negada devido a uma violação de compartilhamento, STATUS_SHARING_VIOLATION será retornado.
Comentários
IoCheckShareAccess verifica uma solicitação de abertura de objeto de arquivo para determinar se os tipos de acessos desejados e compartilhados especificados são compatíveis com a maneira como o objeto de arquivo está sendo acessado por outros abre.
Os sistemas de arquivos mantêm o estado sobre arquivos por meio de estruturas chamadas FCBs (blocos de controle de arquivos). O SHARE_ACCESS é uma estrutura que descreve como o arquivo é acessado atualmente por todos é aberto. Esse estado está contido no FCB como parte do estado aberto para cada objeto de arquivo. Cada objeto de arquivo deve ter apenas uma estrutura de acesso de compartilhamento. Outros drivers de nível mais alto podem chamar essa rotina para marcar o acesso solicitado quando um objeto de arquivo que representa esse objeto de dispositivo do driver é aberto.
IoCheckShareAccess não é uma operação atômica. Portanto, os drivers que chamam essa rotina devem proteger o objeto de arquivo compartilhado passado para IoCheckShareAccess por meio de algum tipo de bloqueio, como um mutex ou um bloqueio de recursos, a fim de evitar a corrupção das contagens de acesso compartilhado.
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 | PASSIVE_LEVEL |
Regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm) |