Applicazione di una lettura sicura per una raccolta HID
Questo articolo descrive come un'applicazione in modalità utente o un driver in modalità kernel può applicare una lettura sicura per una raccolta HID di primo livello.
Se per una raccolta è abilitata una lettura sicura, solo i client "attendibili" (quelli con privilegi SeTcbPrivilege) possono ottenere l'input da un file aperto di una raccolta. I driver in modalità kernel hanno privilegi SeTcbPrivilege per impostazione predefinita, ma le applicazioni in modalità utente non lo fanno. Per informazioni su come ottenere privilegi di sistema in modalità utente, vedere le informazioni sull'autorizzazione nella documentazione di Microsoft Windows SDK.
Questo meccanismo viene fornito principalmente in modo che i componenti di sistema in modalità utente "attendibili" possano impedire alle applicazioni in modalità utente senza privilegi SeTcbPrivilege di ottenere l'input da una raccolta durante le operazioni critiche del sistema. Ad esempio, un componente di sistema in modalità utente "attendibile" può impedire a un'applicazione in modalità utente senza privilegi SeTcbPrivilege di ottenere informazioni riservate fornite da un utente durante un'operazione di accesso.
I client "attendibili" usano IOCTL_HID_ENABLE_SECURE_READ e IOCTL_HID_DISABLE_SECURE_READ richieste per abilitare e disabilitare una lettura sicura per una raccolta. Se un client senza privilegi SeTcbPrivilege usa queste richieste, la richiesta non modifica lo stato di lettura sicuro di una raccolta e il driver di classe HID restituisce un valore di stato di STATUS_PRIVILEGE_NOT_HELD.
L'abilitazione e la disabilitazione di una lettura sicura per una raccolta funziona nel modo seguente:
Il driver di classe HID gestisce un conteggio di lettura sicuro specifico del file per ogni file aperto di una raccolta. Il driver di classe HID mantiene anche un conteggio di lettura sicuro per la raccolta, ovvero la somma dei conteggi di lettura sicuri specifici del file. Il conteggio di lettura sicuro per la raccolta viene inizializzato su zero quando viene creata la raccolta e un conteggio di lettura sicuro per un file viene inizializzato su zero all'apertura di un file.
Quando il driver di classe HID riceve una richiesta di abilitazione per un file, incrementa di 1 il conteggio di lettura sicuro per il file (e incrementa di 1 il conteggio di lettura sicuro per la raccolta).
Quando il driver di classe HID riceve una richiesta di disabilitazione per un file:
- Se il conteggio di lettura sicuro per il file è maggiore di zero, il driver decrementa di 1 il conteggio di lettura sicuro per il file (e decrementa di 1 il conteggio di lettura sicuro per la raccolta).
- Se il conteggio di lettura sicuro per il file è uguale a zero, il driver non modifica i conteggi di lettura sicuri.
Se il conteggio di lettura sicuro per una raccolta è maggiore di zero, il driver di classe HID applica una lettura sicura per la raccolta. In caso contrario, il driver non applica una lettura sicura per la raccolta.
Un client deve usare una richiesta di disabilitazione per annullare una richiesta di abilitazione corrispondente. Tuttavia, se il client non esegue questa operazione, il driver di classe HID decrementa in modo appropriato il conteggio di lettura sicuro per una raccolta quando elabora una richiesta di IRP_MJ_CLOSE per un file. Quando il driver elabora la richiesta di chiusura, decrementa il conteggio di lettura sicuro per la raccolta in base al conteggio di lettura sicuro per il file da chiudere.