Domanda

Utilizzando finestre aggancia mando messaggi alla mia domanda, che viene notifica di eventi di Windows per ogni applicazione sul sistema.

Per eseguire maresciallo dei parametri del messaggio, io uso memorie condivise. Il processo esterno chiama DuplicateHandle , ma per la condivisione la maniglia con la mia istanza di applicazione, essa deve chiamare OpenProcess con i requisiti di privilegio PROCESS_DUP_HANDLE.

In realtà ogni applicazione è in grado di inviare messaggi utilizzando questa architettura, anche se ho bisogno di consentire SeDebugPrivilege al processo esterno. In realtà funziona, tranne che per il processo di 'esploratore', che non ha il SeDebugPrivilege gettone ...

La documentazione di AdjustTokenPrivileges afferma:

  

La funzione AdjustTokenPrivileges non può aggiungere nuovi privilegi al token di accesso. Si può solo attivare o disattivare i token di privilegi esistenti. Per determinare i privilegi del token, chiamare la funzione GetTokenInformation.

Quindi, la domanda è ... processo come aggiungere il SeDebugPrivilege token 'explorer' di processo, o, in alternativa, come consentire 'explorer' alla chiamata OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)?

È stato utile?

Soluzione

Non capisco il motivo per cui non si utilizza nome di memoria condivisa. Se gli oggetti di memoria condivisa hanno un nome, allora questo gli oggetti possono essere aperti senza l'utilizzo di DuplicateHandle.

Se si ha a uso DuplicateHandle e ha bisogno di essere in grado di utilizzare OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) all'interno di qualsiasi processo Trovo che si dovrebbe non utilizzare SeDebugPrivilege. Invece di che si dovrebbe concedere il permesso di PROCESS_DUP_HANDLE a tutti per il processo con pId. Se si crea un processo è possibile specificare descrittore di protezione. Se il processo è già stato creato è possibile utilizzare OpenProcess, GetSecurityInfo (vedi http: // msdn.microsoft.com/en-us/library/aa446654.aspx ) e SetSecurityInfo per modificare descrittore di protezione del processo.

Per testare questo approccio si può solo iniziare Process Explorer (vedi http: / /technet.microsoft.com/en-us/sysinternals/bb896653.aspx ) con diritti amministrativi, aperta scheda Sicurezza del processo selezionato (processo con pId) e modificare il suo descrittore di protezione. Dopo che tutti i processi saranno in grado di utilizzare, senza OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) per abilitare SeDebugPrivilege.

Altri suggerimenti

E 'questo che stai cercando di realizzare?

  1. Creare un blocco di memoria condivisa nel processo "esterno".
  2. Usa DuplicateHandle per creare una maniglia a quella memoria nell'applicazione
  3. Utilizzare un messaggio finestra per inviare il valore maniglia per l'applicazione
  4. Accesso alla memoria condivisa nell'applicazione

Se ho capito bene, allora non c'è bisogno di aprire la maniglia per il vostro processo di applicazione a tutti. Invece, basta dare il blocco di memoria condivisa un nome deterministico, come SharedMem_XXX dove XXX è il PID del processo esterno. Quindi, inviare il PID per l'applicazione utilizzando un messaggio finestra. Si può quindi ricreare il nome e usarlo per aprire il blocco di memoria condivisa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top