2011-10-08 20 views
7

Windows 7 utilizza un meccanismo automatico per rilevare se un'applicazione richiede privilegi di amministratore elevati. Oppure l'applicazione stessa ha manifest.Verificare se un'applicazione richiede i privilegi di amministratore

C'è un modo per scoprire a livello di programmazione se un'applicazione specifica ha bisogno di privilegi di amministratore elevati o no? Non voglio avviarlo per scoprirlo.

Grazie;).

+1

I motivi non precedono i titoli con "C#". Su [so], questo è ciò per cui usiamo i tag. –

+2

Ok, grazie per la correzione. Lo terrò a mente per ulteriori domande;) – mmiccc

risposta

4

C'è davvero un modo per dire a Windows che un programma deve essere elevato e che passa attraverso il file manifest. I file manifest possono essere incorporati all'interno di un assembly (exe/dll) o possono vivere in un file separato denominato <YOUR_APP>.exe.manifest. Questo è davvero l'unico modo e probabilmente l'unico modo che puoi controllare in sicurezza. Ufficialmente.

Windows contiene anche un database gigante utilizzato per la compatibilità delle applicazioni. Se Microsoft ha testato un'applicazione e ha scoperto che si interrompe quando si verifica un aggiornamento del SO, a volte crea una voce nel database per incidere essenzialmente sull'app. A volte si trovano sulla versione attuale del sistema operativo, a volte vengono eseguiti automaticamente come amministratori, a volte fanno un sacco di altre cose. È possibile visualizzare il database utilizzando Application Compatibility Toolkit. Non so se c'è un modo ufficiale per interrogare il database tramite codice. This blog post parla di uno strumento creato dal blogger ma che apparentemente non rilascia mai.

L'ultimo meccanismo di elevazione automatico è l'algoritmo che tenta di determinare se quell'app è un programma di installazione. According to MSDN questi attributi vengono controllati:

  • Nome file include parole chiave come "installazione", "impostazione", "aggiornamento", ecc
  • Parole nei seguenti settori Versioning risorse: fornitore, il nome dell'azienda, nome del prodotto , Descrizione file, Nome file originale, Nome interno e Nome esportazione.
  • Parole chiave nel file side-by-side incorporato nell'eseguibile.
  • Parole chiave in voci StringTable specifiche collegate nell'eseguibile.
  • Attributi chiave nei dati RC collegati nell'eseguibile.
  • Sequenze mirate di byte all'interno dell'eseguibile.

Le parole chiave e le sequenze di byte derivano dalle comuni caratteristiche di osservate da varie tecnologie di installazione.

Infine, un'app può essere eseguita come utente normale ma spawn a child process that requires elevated privileges. Non so se c'è davvero alcun modo per rilevare effettivamente che non è in grado di decompilare l'app stessa.

+0

Voglio prima ringraziarvi per questa risposta lunga e dettagliata! OK, ho intenzione di implementare l'ultimo algoritmo dichiarato e cercare un file manifest. Sembra coprire molte situazioni. Grazie mille :) – mmiccc

Problemi correlati