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) |