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 verificar 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 o 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 driver de nível mais alto pelo gerenciador 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 verificar o 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.

Valor retornado

IoCheckShareAccess retorna 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

O IoCheckShareAccess verifica uma solicitação aberta 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 outras aberturas no momento.

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 todas as aberturas. 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 verificar 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

   
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)

Confira também

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess