Función IoCheckShareAccess (wdm.h)

Los controladores del sistema de archivos (FSD) llaman a la rutina IoCheckShareAccess u otros controladores de nivel superior para comprobar si se permite el acceso compartido a un objeto de archivo.

Sintaxis

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 un valor de ACCESS_MASK que indica el tipo de acceso deseado al objeto FileObject especificado para la solicitud abierta actual. Los controladores calculan el valor de este parámetro tomando el acceso solicitado en la solicitud de IRP_MJ_CREATE y aplicando SeAccessCheck para cada descriptor de seguridad para determinar el acceso real concedido. Si el acceso concedido es más restrictivo que el acceso deseado, es un error y el controlador debe completar el IRP actual con un estado de STATUS_ACCESS_DENIED. (Tenga en cuenta que SeAccessCheck borra el bit de MAXIMUM_ALLOWED en el acceso concedido; asegúrese de no usar ese bit al comparar el acceso deseado para el acceso concedido). A continuación, el controlador pasa el acceso concedido como valor de DesiredAccess.

[in] DesiredShareAccess

Especifica el tipo deseado de acceso compartido a FileObject para la solicitud abierta actual. El valor de este parámetro suele ser el mismo que shareAccess pasado al sistema de archivos o al controlador de nivel superior por el administrador de E/S cuando se realizó la solicitud abierta. Este valor puede ser cero o cualquier combinación de lo siguiente:

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

[in, out] FileObject

Puntero al objeto de archivo para el que se va a comprobar el acceso de la solicitud abierta actual.

[in, out] ShareAccess

Puntero a la estructura de datos de acceso a recursos compartidos común asociada a FileObject. Los controladores deben tratar esta estructura como opaca.

[in] Update

Especifica si se va a actualizar el estado de acceso a recursos compartidos para FileObject. Un valor booleano de TRUE significa que esta rutina actualizará la información de acceso al recurso compartido para el objeto de archivo si se permite la solicitud abierta.

Valor devuelto

IoCheckShareAccess devuelve STATUS_SUCCESS si el acceso del solicitante al objeto de archivo es compatible con la forma en que está abierto actualmente. Si se deniega la solicitud debido a una infracción de uso compartido, se devuelve STATUS_SHARING_VIOLATION.

Comentarios

IoCheckShareAccess comprueba una solicitud de apertura de objeto de archivo para determinar si los tipos de accesos deseados y compartidos especificados son compatibles con la forma en que el objeto de archivo está accediendo actualmente mediante otras aperturas.

Los sistemas de archivos mantienen el estado de los archivos a través de estructuras denominadas bloques de control de archivos (FCB). El SHARE_ACCESS es una estructura que describe cómo se abre actualmente el archivo. Este estado se encuentra en el FCB como parte del estado abierto para cada objeto de archivo. Cada objeto de archivo debe tener solo una estructura de acceso de recurso compartido. Otros controladores de nivel superior pueden llamar a esta rutina para comprobar el acceso solicitado cuando se abre un objeto de archivo que representa dicho objeto de dispositivo del controlador.

IoCheckShareAccess no es una operación atómica. Por lo tanto, los controladores que llaman a esta rutina deben proteger el objeto de archivo compartido pasado a IoCheckShareAccess por medio de algún tipo de bloqueo, como una exclusión mutua o un bloqueo de recursos, para evitar daños en los recuentos de acceso compartido.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm)

Consulte también

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess