Condividi tramite


Diritti di accesso e sicurezza named pipe

La sicurezza di Windows consente di controllare l'accesso alle named pipe. Per altre informazioni sulla sicurezza, vedere Access-Control Model.

È possibile specificare un descrittore di sicurezza per una named pipe quando si chiama la funzioneCreateNamedPipe. Il descrittore di sicurezza controlla l'accesso alle estremità client e server della named pipe. Se si specifica NULL, la named pipe ottiene un descrittore di sicurezza predefinito. Gli ACL nel descrittore di sicurezza predefinito per una named pipe concedono il controllo completo all'account LocalSystem, agli amministratori e al proprietario del creatore. Concedono inoltre l'accesso in lettura ai membri del gruppo Everyone e all'account anonimo.

Per recuperare il descrittore di sicurezza di una named pipe, chiamare la funzioneGetSecurityInfo. Per modificare il descrittore di sicurezza di una named pipe, chiamare la funzionesetSecurityInfo.

Quando un thread chiama CreateNamedPipe per aprire un handle alla fine del server di una named pipe esistente, il sistema esegue un controllo di accesso prima di restituire l'handle. Il controllo di accesso confronta il token di accesso del thread e i diritti di accesso richiesti rispetto all'elenco di controllo di accesso nel descrittore di sicurezza della named pipe. Oltre ai diritti di accesso richiesti, l'elenco di controllo di accesso deve consentire al thread chiamante FILE_CREATE_PIPE_INSTANCE l'accesso alla named pipe.

Analogamente, quando un client chiama la CreateFile o funzione CallNamedPipe per connettersi alla fine client di una named pipe, il sistema esegue un controllo di accesso prima di concedere l'accesso al client.

L'handle restituito dalla funzione CreateNamedPipe ha sempre accesso SYNCHRONIZE. Ha anche GENERIC_READ, GENERIC_WRITE o entrambi, a seconda della modalità aperta della pipe. Di seguito sono riportati i diritti di accesso per ogni modalità aperta.

Modalità aperta Diritti di accesso
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE e SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ e SYNCHRONIZE
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE e SYNCHRONIZE

 

FILE_GENERIC_READ l'accesso per una named pipe combina i diritti per leggere i dati dalla pipe, leggere gli attributi della pipe, leggere gli attributi estesi e leggere il DACL della pipe.

FILE_GENERIC_WRITE l'accesso per una named pipe combina i diritti per scrivere dati nella pipe, accodarvi dati, scrivere attributi pipe, scrivere attributi estesi e leggere l'daCL della pipe. Poiché FILE_APPEND_DATA e FILE_CREATE_PIPE_INSTANCE hanno la stessa definizione, FILE_GENERIC_WRITE consente di creare la pipe. Per evitare questo problema, usare i singoli diritti anziché usare FILE_GENERIC_WRITE.

È possibile richiedere il diritto di accesso ACCESS_SYSTEM_SECURITY a un oggetto named pipe se si desidera leggere o scrivere l'elenco SACL dell'oggetto. Per altre informazioni, vedere elenchi di Access-Control (ACL) e SACL Access Right.

Per impedire a utenti remoti o utenti in una sessione diversa di servizi terminal di accedere a una named pipe, usare il SID di accesso nell'elenco di controllo di accesso per la pipe. Il SID di accesso viene usato anche negli accessi run-as; si tratta del SID usato per proteggere lo spazio dei nomi per ogni oggetto sessione. Per altre informazioni, vedere Ottenere il SID di accesso in C++.