Eccoci alla seconda puntata che spiega come implementare correttamente la SendSAS, la funzione che serve ad inviare la Secure Attention Sequence al sistema, cioè ad inviare CTRL+ALT+CANC.

L’altra volta abbiamo visto che la dichiarazione della funzione in VB.Net si riduce a questa linea:

Public Declare Sub SendSAS Lib "SAS.DLL" (ByVal fAsUser As Boolean)

Vediamo ora di creare quindi un nuovo progetto VS 2008 e di implementare la SendSAS.

Creiamo un nuovo progetto VB.Net e sulla Form1 creata di default posizioniamo un nuovo pulsante, Button1.

Facciamo doppio click sul pulsante e inseriamo questo codice:

Imports System.Runtime.InteropServices 
Public Class Form1
Public Declare Sub SendSAS Lib "SAS.DLL" (ByVal fAsUser As Boolean)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SendSAS(True)
End Sub
End Class

 

Il nostro programma di esempio è finito.

Adesso dobbiamo realizzare tutte le azioni di contorno che abbiamo visto nel post precedente. Prendiamo come sistema operativo di esempio Windows 7.

  1. Dobbiamo settare il flag uiAccess a true nel manifest dell’applicazione
  2. Dobbiamo firmare digitalmente il file eseguibile generato
  3. Dobbiamo abilitare la policy
  4. Dobbiamo posizionare il programma in uno degli store “sicuri” / “trusted”

1 Modificare il manifest

Right click sul progetto nell’IDE di Visual Studio, Properties, nel Tab Application, premere il pulsante “View UAC Settings” VSUAC

e modificare come segue:

<requestedExecutionLevel level="asInvoker" uiAccess="true" />UIAccesstrue

2 Firmare digitalmente il file

Il punto 2 è chiaramente il più complicato.

In questo esempio, creeremo un certificato digitale di test del tipo “self-signed”. Nel mondo reale, dovrete procurarvi un certificato da una Certification Authority, tipo Verisign, valido per la firma digitale dei programmi.

Serve il Platform SDK installato.
L’ultimo Platform SDK è scaricabile da qui: http://www.microsoft.com/downloads/details.aspx?familyid=C17BA869-9671-4330-A63E-1FD44E0E2505&displaylang=en

Dopo l’installazione dell’SDK, apriamo la ‘Command Shell’ del ‘Microsoft Windows SDK v7.0’, ‘As Administrator’, e creiamo un certificato personale destinato al MY store con questo comando:

makecert -r -pe -n "CN=Test Certificate - For SendSAS Use Only" -ss MY c:\temp\testcert.cermakecert

Quindi aggiungiamo il certificato allo store di root in modo che il certificato stesso sia trustato.

certmgr.exe -add c:\temp\testcert.cer -s -r localMachine rootcertmgr

E finalmente firmiamo il nostro programma digitalmente.

SignTool sign /v /s MY /n "Test Certificate - For SendSAS Use Only" /t http://timestamp.verisign.com/scripts/timestamp.dll "C:\Users\mariora.EUROPE\Documents\Visual Studio 2008\Projects\SendSAS\SendSAS\bin\Release\SendSAS.exe"
signtool

Dato che per generare il timestamp si usa un servizio pubblico disponibile su Internet, fornito dalla Verisign direttamente, occorre avere una connessione ad Internet attiva e che il server della Verisign sia disponibile. Durante i test che ho fatto, talvolta il server non era raggiungibile e ottenevo degli errori di timeout. Si può solo riprovare..

3 Abilitare la policy

Usando GPEDIT o il Registry Editor (RegEdit), creiamo la policy necessaria ad abilitare la Software SAS. Eseguite gpedit.msc.

Navighiamo l’albero alla sinistra: Computer Configuration, Administrative Templates, Windows Components, Window Logon Options. Qui troviamo tre policies, tra cui “Disable or Enable software Secure Attention Sequence”.

La abilitiamo e scegliamo tra le opzioni “Service and Ease of Access applications”:

gpedit

Verificate che alla fine sia stata generata la chiave SoftwareSASGeneration sotto

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

policy

SoftwareSASGeneration è una DWORD e se impostata a “Both” vale 3.

Durante i test ho avuto qualche problema con questo passo, nel senso che la policy mi veniva salvata in un profile temporaneo sotto la chiave utente e chiaramente poi quando si eseguiva il programma, non funzionava. Ho dovuto creare la policy a mano col Regedit. Poco male..

Potete anche evitare gpedit.msc se siete abbastanza in buoni rapporti con il RegEdit, creando direttamente la chiave.

4 Copiare il file in una cartella protetta

Non rimane che copiare li file in una location protetta. Creiamo un nuovo folder sotto “C:\Programmi”, chiamiamolo SendSas ad esempio e copiamoci l’eseguibile precedentemente firmato digitalmente.

Folder

Siccome il folder C:\Programmi è una locazione protetta, solo Administrators e Trusted Installer possono copiare in quel foder direttamente. Per cui su Vista e Windows 7 sono necessari i privilegi di Administrator.

Fatto quest’ultimo passo, possiamo provare ad avviare il nostro programma che premendo il pulsante sulla form farà apparire il desktop di Logon esattamente come quando si preme CTRL+ALT+CANC.

Spero di essere stato chiaro ed esauriente!

Alla prossima!

-mario

Mario Raccagni
Senior Support Engineer
Platform Development Support Team