martedì 29 giugno 2010

EWF in Windows Embedded Standard 7

Durante lo sviluppo di una shell personalizzata per un progetto, ho incontrato uno strano comportamento abilitando/disabilitando la protezione EWF. Per lo sviluppo, ho creato un’immagine Windows Embedded Standard 7 thin client usando IBW, includendo la protezione EWF e utilizzando tutte le impostazioni default. Ha funzionato tutto fino a quando non ho iniziato a giocare con la protezione del disco. Secondo la documentazione MSDN, EWF può essere controllato tramite lo strumento EWF Manager (EWFMGR) da console (con diritti di Amministratore) o programmaticamente usando le API EWF.

Nella shell personalizzata che stavo sviluppando, avevo la necessità di controllare lo stato EWF a seguito di alcune procedure interne: in alcuni casi la protezione doveva venire abilitata ed in altri essere disabilitata. Non si sono verificati particolari problemi abilitando la protezione (sia tramite console e sia programmaticamente), mentre la cosa strana è capitata durante la disattivazione.

Mi aspettavo che la protezione potesse essere disabilitata allo stesso modo di come viene abilitata, semplicemente invocando il comando ewfmgr –disable da console o usando la funzione EwfMgrDisable, seguiti da un riavvio del dispositivo. Ma non era così. Dopo il riavvio, la protezione EWF era ancora abilitata. Inizialmente pensavo di non aver configurato correttamente la protezione EWF, installando l’immagine tramite IBW, così ho creato un answer file con ICE, configurato EWF con i parametri default e reinstallato nuovamente l’immagine. Di nuovo, nessun cambiamento: la protezione, una volta abilitata, non si poteva più disabilitare. Come risolvere il problema?

Dopo molti tentativi e tanta frustrazione, ho trovato la soluzione cercando dentro gli esempi d’uso delle API EWF (non ho trovato riferimenti alla cosa nella documentazione MSDN): un commento alla funzione EwfMgrDisable dichiara chiaramente che quando l’EWF è configurato in modalità RAM REG (default in Windows Embedded Standard 7), è necessario eseguire un’operazione di commit in seguito alla richiesta di disattivazione. Mentre quando EWF è configurato in modalità RAM, la sola operazione di disattivazione è sufficiente. In aggiunta, è possibile ottenere gli stessi risultati usando il comando ewfmgr –commitanddisable [–live] (con l’opzione –live non è necessario il riavvio del dispositivo) o, tramite le API, con la funzione EwfMgrCommitAndDisableLive.

Spero che questa piccola aggiunta alla documentazione MSDN vi possa far risparmiare tempo e problemi utilizzando EWF in Windows Embedded Standard 7.

Nessun commento:

Posta un commento