Funzione PsImpersonateClient (ntifs.h)
La routine PsImpersonateClient causa la rappresentazione di un client da parte di un thread del server.
Sintassi
NTSTATUS PsImpersonateClient(
[in, out] PETHREAD Thread,
[in] PACCESS_TOKEN Token,
[in] BOOLEAN CopyOnOpen,
[in] BOOLEAN EffectiveOnly,
[in] SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
Parametri
[in, out] Thread
Puntatore al thread del server che rappresenta il client.
[in] Token
Puntatore al token da assegnare come token di rappresentazione. Questo token può essere un token primario o un token di rappresentazione. Impostare su NULL per terminare la rappresentazione.
[in] CopyOnOpen
Specifica se il token può essere aperto direttamente. Impostare su TRUE per specificare che il token non può essere aperto direttamente. In questo caso, il token deve essere duplicato e il token duplicato usato. Impostare su FALSE per consentire l'apertura diretta del token.
[in] EffectiveOnly
Impostare su FALSE per consentire al server di abilitare gruppi e privilegi attualmente disabilitati nel contesto di sicurezza client, TRUE in caso contrario.
[in] ImpersonationLevel
Valore SECURITY_IMPERSONATION_LEVEL che specifica il livello di rappresentazione a cui il server deve accedere al token.
Valore restituito
PsImpersonateClient restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato, ad esempio quanto segue:
Codice restituito | Descrizione |
---|---|
|
Non è stato possibile rappresentare un client a causa di restrizioni per il processo. |
|
Memoria insufficiente per completare l'operazione. |
Commenti
PsImpersonateClient causa la rappresentazione del client specificato nel thread del server specificato.
Il thread del server potrebbe già rappresentare un client quando viene chiamato PsImpersonateClient . Se si tratta del caso, il conteggio dei riferimenti sul token che rappresenta il client viene decrementato. Per mantenere questo token per un uso successivo, i driver devono chiamare PsReferenceImpersonationToken prima di chiamare PsImpersonateClient e salvare il puntatore restituito da PsReferenceImpersonationToken.
Per terminare la nuova rappresentazione e restituire il thread del server alla rappresentazione precedente, chiamare di nuovo PsImpersonateClient , passando il puntatore salvato per il parametro Token . Per terminare tutte le rappresentazioni, chiamare la routine PsRevertToSelf .
In caso contrario, per terminare la rappresentazione e restituire il thread del server al contesto di sicurezza originale, ovvero quello rappresentato dal token primario, chiamare di nuovo PsImpersonateClient , passando un puntatore NULL per il parametro Token .
La routine PsImpersonateClient può non riuscire a restituire correttamente il thread del server alla rappresentazione precedente se il thread è già rappresentazione o esistono restrizioni per il processo.
La routine garantisce se la rappresentazione client può verificarsi effettivamente controllando varie condizioni, tra cui quanto segue:
- Il token passato dal chiamante non ha un ID di autenticazione anonimo
- Il token del processo a cui viene fatto riferimento dal thread del server e il token specificato hanno identificatori di sicurezza uguali (SID)
- Nessuno dei token è limitato
Se nessuna delle condizioni viene soddisfatta, la routine esegue una copia del token esistente passato alla chiamata e assegna il token appena copiato come token di rappresentazione anche se con un livello di rappresentazione limitato; ovvero, il thread del server può ottenere solo informazioni sul client. Se la copia del token non è possibile, la routine ha esito negativo con un codice NTSTATUS.
È estremamente non sicuro aumentare lo stato dei privilegi di un thread utente non attendibile ,ad esempio prendere il thread di un utente e rappresentare LocalSystem. Se un thread utente non attendibile ha generato il proprio privilegio, l'utente potrebbe acquisire il token di thread dopo che è stato elevato e annullare la sicurezza dell'intero sistema.
Nei casi in cui è necessario uno stato con privilegi più elevati, l'attività deve essere inviata a una coda di lavoro in cui l'attività può essere gestita in modo sicuro dal thread di lavoro di sistema . In questo modo non è necessaria alcuna rappresentazione.
La routine SeImpersonateClientEx può essere usata per causare la rappresentazione di un thread di un utente.
Per altre informazioni sul controllo di sicurezza e accesso, vedere Modello di sicurezza di Windows per sviluppatori driver e la documentazione su questi argomenti in Windows SDK.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP |
Piattaforma di destinazione | Universale |
Intestazione | ntifs.h (include Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Regole di conformità DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |