Condividi tramite


Funzione IoCheckShareAccess (wdm.h)

La routine IoCheckShareAccess viene chiamata dai driver del file system (FSD) o da altri driver di livello più alto per verificare se è consentito l'accesso condiviso a un oggetto file.

Sintassi

NTSTATUS IoCheckShareAccess(
  [in]      ACCESS_MASK   DesiredAccess,
  [in]      ULONG         DesiredShareAccess,
  [in, out] PFILE_OBJECT  FileObject,
  [in, out] PSHARE_ACCESS ShareAccess,
  [in]      BOOLEAN       Update
);

Parametri

[in] DesiredAccess

Specifica un valore ACCESS_MASK che indica il tipo di accesso desiderato all'oggetto FileObject specificato per la richiesta aperta corrente. I driver calcolano il valore di questo parametro accettando l'accesso richiesto nella richiesta di IRP_MJ_CREATE e quindi applicando SeAccessCheck per ogni descrittore di sicurezza per determinare l'accesso effettivo concesso. Se l'accesso concesso è più restrittivo dell'accesso desiderato, si tratta di un errore e il driver deve completare l'IRP corrente con lo stato STATUS_ACCESS_DENIED. Si noti che SeAccessCheck cancella il bit di MAXIMUM_ALLOWED nell'accesso concesso. Assicurarsi di non usare tale bit quando si confronta l'accesso desiderato all'accesso concesso. Il driver passa quindi l'accesso concesso come valore di DesiredAccess.

[in] DesiredShareAccess

Specifica il tipo desiderato di accesso condiviso a FileObject per la richiesta aperta corrente. Il valore di questo parametro è in genere uguale a ShareAccess passato al file system o al driver di livello più alto dal gestore di I/O quando è stata effettuata la richiesta aperta. Questo valore può essere zero o qualsiasi combinazione di quanto segue:

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

[in, out] FileObject

Puntatore all'oggetto file per il quale controllare l'accesso per la richiesta aperta corrente.

[in, out] ShareAccess

Puntatore alla struttura dei dati di accesso condiviso comune associata a FileObject. I driver devono considerare questa struttura come opaca.

[in] Update

Specifica se aggiornare lo stato di accesso alla condivisione per FileObject. Un valore booleano TRUE indica che questa routine aggiornerà le informazioni di accesso alla condivisione per l'oggetto file se la richiesta aperta è consentita.

Valore restituito

IoCheckShareAccess restituisce STATUS_SUCCESS se l'accesso del richiedente all'oggetto file è compatibile con il modo in cui è attualmente aperto. Se la richiesta viene negata a causa di una violazione di condivisione, viene restituita STATUS_SHARING_VIOLATION.

Commenti

IoCheckShareAccess controlla una richiesta di apertura di un oggetto file per determinare se i tipi di accessi desiderati e condivisi specificati sono compatibili con il modo in cui l'oggetto file è attualmente accessibile da altre aperte.

I file system mantengono lo stato dei file tramite strutture denominate blocchi di controllo file ( FCB). Il SHARE_ACCESS è una struttura che descrive come il file è attualmente accessibile da tutti. Questo stato è contenuto nel cluster di failover come parte dello stato aperto per ogni oggetto file. Ogni oggetto file deve avere una sola struttura di accesso condiviso. Altri driver di livello più alto potrebbero chiamare questa routine per controllare l'accesso richiesto quando viene aperto un oggetto file che rappresenta tale oggetto dispositivo del driver.

IoCheckShareAccess non è un'operazione atomica. Pertanto, i driver che chiamano questa routine devono proteggere l'oggetto file condiviso passato a IoCheckShareAccess tramite un tipo di blocco, ad esempio un mutex o un blocco di risorse, per evitare il danneggiamento dei conteggi di accesso condiviso.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm)

Vedi anche

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess