venerdì, 13 Dicembre 2024

[risolto] Windows 11 24H2 crasha durante l’avvio bloccandosi in loop tra tentativi di ripristino e sblocco BitLocker

Problema: Windows 11 24H2 si blocca all’avvio, finendo in loop tra tentativi di ripristino e sblocco di BitLocker. Nessuna opzione di ripristino sembra sortire alcun effetto, né la riparazione dei settori di BOOT né altre funzioni annesse, ivi compreso il controllo del disco (inutili chkdsk, bootrec, ecc). Se si riavvia in Safe Mode with Networking (F5) il sistema ugualmente non parte.

Soluzione: Entrare nella modalità di ripristino, selezionare Opzioni Avanzate e poi Impostazioni di avvio, qui selezionare Disable driver signature enforcement (F7) e riavviare, dopodiché ricercare i driver che creano conflitti

La prima volta che mi si è presentato questo problema abbastanza assurdo e fastidioso è stato il 17 luglio 2024, dopo l’aggiornamento a Windows 11 Pro 24H2.

Fino a quel momento il computer aveva funzionato correttamente sempre con Windows 11 installato sopra. Poi non era più possibile avviarlo.

Il problema principale è che non vi è una segnalazione chiara che consenta all’utente di individuare questo errore. Windows 11 semplicemente non parte più.

Tant’è che lì per lì mi sono trovato a formattarlo e, nell’impossibilità di continuare ad usarlo dopo un secondo crash, a reinstallare Windows 10.

Il sistema è rimasto stabile fino a metà novembre 2024, quando ho deciso di tornare a Windows 11, anche perché gli aggiornamenti per Windows 10 stavano per essere interrotti.

Il problema si presentava con i seguenti sintomi:

  1. Impossibile del tutto avviare Windows 11, il computer si riavvia dopo pochi secondi in una serie di sussulti, finché non parte il tentativo di ripristino
  2. Richiesta continua di sblocco del BitLocker per accedere al disco
  3. Nessuna funzione di ripristino funziona, come per esempio Disinstalla ultimo aggiornamento oppure Ripristina avvio del PC (anzi, questa in un’occasione ha portato ad una formattazione automatica, assolutamente non richiesta, di Windows stesso)
  4. sfc /scannow non produce alcun effetto (il commando più corretto sarebbe sfc /scannow /offbootdir=C:\ /offwindir=C:\Windows)
  5. chkdsk non produce alcun errore o effetto
  6. aggiungere su HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorPort oppure su HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device DWORD HmbAllocationPolicy impostato su 0 o 2 (0 = HMB allocation off, 2 = HMB allocation 64MB) non cambia nulla (problema riscontrato su alcuni dischi WD, tipo SN770 e SN580)
  7. nel file SrtTrail.txt non ci sono errori, eccetto un’informazione fuorviante circa “un file binario di avvio ripristinato di recente è danneggiato” con un suggerimento anche peggiore “Operazione correttiva: Disinstalla LCU più recente“:
  8. Avviando in Safe Mode with Networking (F5) il sistema non parte (primo indizio)
  9. Avviando in Safe Mode (F4) il sistema parte, ma non è possibile accedere (vi dice Configura il tuo PIN, ma non essendoci la rete l’operazione è impossibile e il computer si blocca in un loop infinito) (secondo indizio!)

Arrivato a questo punto ho cominciato ad intuire che doveva trattarsi di qualcosa che aveva a che fare con la rete o con dei driver associati.

A questo punto ho provato a riavviare con l’opzione Disable driver signature enforcement (F7) e il computer è miracolosamente partito.

La procedura completa consiste nell’avviare la schermata di ripristino di Windows 11 (in teoria premendo F11 subito all’avvio, benché in alcuni computer possa essere F9 o F10)

Selezionare Risoluzione dei problemi.

In questa schermata selezionare Impostazioni di avvio.

Selezionare Opzioni avanzate.

Selezionare Riavvia (in questa schermata non si può fare altro).

Nel caso in cui è attivo il BitLocker (su Windows 11 Pro) comparirà questa schermata, premiamo INVIO e dobbiamo inserire il codice a 48 cifre associato al BitLocker (è possibile trovarlo a questo link effettuando il login con l’account Microsoft associato al computer: https://aka.ms/myrecoverykey). In caso contrario si passa direttamente a questa schermata.

A questo punto premere F7 Disabilita imposizione firma driver (Disable driver signature enforcement).

Il computer si riavvierà e dovrebbe essere tutto in regola.

Il problema principale è che questa operazione va eseguita ad ogni riavvio (anche quando viene effettuato dagli aggiornamenti di sistema).

Per evitare di dover ogni volta, ad ogni riavvio, rieseguire tutta questa trafila, è possibile mettersi alla ricerca dei driver che creano problemi.

Aprire Impostazioni > Privacy e sicurezza > Sicurezza di Windows.

Cliccare su Apri Sicurezza di Windows.

Andare su Sicurezza dispositivi.

All’opzione Isolamento core effettuare una Nuova analisi e poi andare su Verifica driver non compatibili. Qui dovrebbero comparire i driver che creano problemi.

In questo caso c’è un driver PxHlpa64.sys non compatibile.

Questo è un driver installato tipicamente da terze parti, rivolto alla gestione di software di masterizzazione dei dischi. Nel mio caso, non avendo nemmeno un lettore CD/DVD posso rimuoverlo liberamente. Per farlo individuare il file in C:\Windows\System32\drivers

Rimuovere il file, dopodiché individuare la sua posizione nel registro di sistema. Premere WIN + R, digitare regedit e premere ancora INVIO.

Cercare nel registro la voce in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

Rimuovere la voce dal registro.

Inutile dire quanto sarebbe gradito, da parte di Microsoft, rendere più esplicito questo errore e soprattutto prevedere di prevenirlo (se ho installato un driver non firmato, bloccami semmai durante l’installazione, ma una volta che ho deciso di procedere non puoi bloccarmi tutto il sistema operativo dopo un qualsiasi riavvio).

[JavaScript] Calcola il percorso più breve tra due punti su una griglia

Vediamo oggi come creare in JavaScript una griglia sulla quale posizionare due punti e trovare il percorso più breve evitando degli ostacoli.

A titolo di curiosità ho svolto un esercizio simile (ma senza l’uso di Nodi) in Python: [python] Esercizio su funzioni ricorsive e calcolo del percorso minore possibile

Il risultato che vogliamo ottenere sarà simile a questo (avere la possibilità di impostare una dimensione e il numero di ostacoli). Versione semplice:

Versione un po’ più complicata:

Questo esercizio è consultabile anche al seguente link.

Procediamo con ordine e andiamo anzitutto a creare una classe per gestire le singole celle e quelle ad esse collegate. Vogliamo creare un sistema collegato a nodi, che rappresenti la connessione tra tutte le celle. Definiamo perciò una classe nel modo seguente:

In particolare voglio mettere in evidenza il metodo addVicino(nodo)

Vogliamo che ogni nodo sia interconnesso con il proprio vicino, quindi se abbiamo due nodi A e B allora A avrà nei vicini B e B avrà nei vicini A.

Costruiamo adesso la classe che creerà la mappa. Nel codice ho inserito i commenti ai vari metodi:

In particolare vorrei soffermarmi sul controllo dei vicini con il metodo nMaxVicini(nodo,percorso)

Durante la ricerca del percorso voglio evitare tutti quei percorsi che si annodano a serpentina, perché tanto non sarebbero mai il percorso migliore. Se un percorso è così annodato, significa che esiste un nodo che ha almeno 3 vicini, durante la costruzione almeno 2 (ricordiamoci che il nodo successivo non è stato ancora aggiunto). Quindi ogni nodo, durante la costruzione, non deve avere più di un vicino.

Completiamo il tutto con la creazione della griglia vera e propria:

E naturalmente con un po’ di CSS:

E infine la pagina HTML per mettere il tutto insieme.

Vediamo infine un esempio funzionante del codice.

[JavaScript] Esercizio per realizzare il gioco del campo minato

Vediamo come realizzare un prototipo del gioco del campo minato, ideato da Robert Donner e Curt Johnson e pubblicato nel 1990 nella raccolta Microsoft Entertainment Pack 1 per Windows 3.1. Negli anni successivi il gioco divenne famoso anche con il nome Prato Fiorito.

Il gioco si basa sullo scoprire le mine nascoste nel campo, quando si scopre una cella che non contiene mine questa può essere vuota, oppure avere un numero che ci indica quante mine limitrofe sono presenti. Il risultato che vogliamo ottenere sarà simile a questo:

Per questo esercizio ho utilizzato il font Digital Counter 7, sviluppato da Sizenko Alexander

Anzitutto abbiamo bisogno di creare lo spazio per il nostro gioco. Creiamo quindi una pagina HTML come nel codice seguente:

Ogni cella del gioco dovrà contenere 4 proprietà diverse:

  1. indicatore se c’è o meno una mina
  2. indicatore se la cella sia o meno aperta
  3. il conteggio delle mine limitrofe
  4. indicatore se è stata messa o meno una bandierina

Faccio notare come i punti 3 e 1 possono essere riassunti in un’unica variabile, all’occorenza.

Creiamo quindi anzitutto un oggetto opportuno nel modo seguente:

Dentro a $(document).ready(function() {}); andiamo ad inizializzare il resto del gioco come segue.

Anzitutto popoliamo il nostro campo di celle:

Andiamo poi a distribuire tutte le mine, in base al numero prescelto.

Costruiamo ora una funzione ricorsiva per il controllo delle mine medesime.

Aggiungiamo anche una funzione per quando il gioco sarà finito e vorremo visualizzare tutte le mine:

A questo punto aggiungiamo una funzione per consentire il click sulle singole caselle:

E una per aggiungere le bandierine:

Il file JavaScript nel suo complesso sarà simile al seguente:

Affinché il tutto funzioni abbiamo bisogno anche di un po’ di CSS:

E il gioco è fatto.

Qui è possibile trovare una versione funzionante del gioco (con qualche aggiunta extra).

[python] Classe in Python per accedere con pyodbc ad un database MS Access

Vediamo un semplice esempio di una classe costruita in Python per accedere ad un database MS Access (*.mdb, *.accdb) utilizzando la libreria pyodbc.

Anzitutto procuriamoci pyodbc utilizzando PIP

Creiamo la nostra classe nella maniera seguente (nel mio caso creerò un file chiamato accessdb.py):

Il metodo In restituisce, se presente, l’ultimo ID inserito. Il metodo Out restituisce una lista di dizionari, con i nomi delle colonne e i valori per ogni riga.

Immaginiamo di posizionare il suddetto file in una sottocartella librerie.

Possiamo usare la classe nella maniera seguente:

ATTENZIONE! Nella stringa di connessione va inserito il percorso assoluto del file del database.

[FIFA22] Steam errore – Esci da eventuali giochi o strumenti in esecuzione prima di provare a verificare i tuoi file locali (RISOLTO)

Problema: Cercando di avviare FIFA 22 da Steam appare il seguente messaggio di errore “Esci da eventuali giochi o strumenti in esecuzione prima di provare a verificare i tuoi file locali” e il gioco non si avvia.

Soluzione: Disinstallare Origin e riavviare il gioco.

Quando si cerca di avviare FIFA 22 da Steam appare un popup di errore come il seguente.

Per quanto si possa cercare di riparare i file e avviare il gioco, quest’ultimo semplicemente non parte.

Per risolvere il problema è sufficiente (e necessario purtroppo!) disinstallare Origin.

Andare su App e funzionalità e individuare l’installazione di Origin.

 

Selezionare e scegliere disinstalla. Si aprirà una finestra come la seguente.

Confermare la disinstallazione.

Una volta completata avviare il gioco, comparirà una schermata come la seguente per l’installazione di OriginThinSetup.

Confermare cambiando eventualmente il percorso di installazione.

Adesso possiamo tornare a giocare a FIFA 22.

[risolto] Plesk: Unable to manage service by phpinimng: (‘start’, ‘plesk-php73-fpm’). Service plesk-php73-fpm is down after attempt to start it

Problema: Impossibile avviare il servizio PHP-FPM 7.3.5 su Plesk. Viene visualizzato un errore del genere Unable to manage service by phpinimng: ('start', 'plesk-php73-fpm'). Service plesk-php73-fpm is down after attempt to start it

Soluzione: Questo problema dipende spesso da errori di configurazione nei file che si trovano in /opt/plesk/php/7.3/etc/php-fpm.d/ oppure dalla presenza di file orfani, dopo la cancellazione di un servizio. Controllare tutti i file e rimuovere gli eventuali orfani (questa è la prima soluzione da valutare).

Nel mio caso specifico, a seguito della cancellazione di un sottodominio, era rimasto il file di configurazione del sottodominio stesso.

Entrando in SSH ed eseguendo rm /opt/plesk/php/7.3/etc/php-fpm.d/sottodominio.orfano.conf il problema si è risolto. E’ stato sufficiente riavviare il servizio e riapplicare la configurazione corrente su uno qualsiasi dei domini attivi che utilizzano il PHP 7.3

[virtualbox] Failed to query SMC value from the host (VERR_INVALID_HANDLE)

Problema: Avviare una macchina virtuale di MacOS su VirtualBox produce l’errore Failed to query SMC value from the host (VERR_INVALID_HANDLE). Un altro sintomo è una generale lentezza di tutte le macchine virtuali su VirtualBox.

Soluzione: Questo errore è dovuto probabilmente a Hyper-V che va disabilitato all’avvio di Windows. Per farlo è sufficiente aprire il prompt dei comandi come amministratore e digitare bcdedit /set hypervisorlaunchtype off. Riavviare infine il PC.

La procedura può essere eseguita anche dalla PowerShell.

Cliccare col destro sul tasto di avvio di Windows e selezionare Windows PowerShell (Amministratore)

Digitare bcdedit /set hypervisorlaunchtype off

Premere INVIO.

Riavviare il PC.

[c#] Semplice classe per gestire connessione e query su un database MySQL

Il nostro scopo è scrivere una semplice classe in C# che permetta di gestire l’inserimento e la lettura dei dati dal database. La caratteristica saliente che ci interessa in questo caso è l’accesso ai dati, in fase di lettura, tramite una List<ListDictionary>, che consente di trattare i risultati come una lista di dizionari.

La classe che vogliamo creare permetterà un utilizzo simile a questo:

La classe sarà formata invece nel modo seguente:

 

[wordpress] Errore RSS: WP HTTP Error: cURL error 60: SSL certificate problem: certificate has expired

Questo errore si presenta nel feed RSS di WordPress a causa di un certificato intermedio scaduto utilizzato da cURL.

Il problema è spesso causato da LetEncrypt. Per risolvere il problema è sufficiente disabilitare il certificato DST CA X3 scaduto.

Per farlo su Ubuntu digitiamo nel terminale i seguenti due comandi:

sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf

update-ca-certificates

[risolto] TekkenGame-Win64-Shipping.exe crash con eccezione 0xc0000005

Problema: Tekken 7 su PC (Steam) va in crash con codice di eccezione 0xc0000005 (nel mio caso succedeva quando si tentava una partita VS in locale)

Soluzione: Da Steam verificare l’integrità dei file di gioco.

Tekken 7, installato sul PC da Steam, comincia a crashare senza motivo apparente quando si sta per avviare una partita VS. Dopo aver provato in vano a modificare la risoluzione (passando anche dalla modalità schermo intero a quella borderless e infine a quella a finestra), modificare l’assetto grafico e perfino disattivare l’antivirus, ho eseguito la verifica di integrità dei file di gioco su Steam e questo ha risolto il problema.

L’errore nel registro di Windows dovrebbe apparire come qualcosa del genere:

Nome dell'applicazione che ha generato l'errore: TekkenGame-Win64-Shipping.exe, versione: 1.0.1.0, timestamp: 0x61fb9339
Nome del modulo che ha generato l'errore: TekkenGame-Win64-Shipping.exe, versione: 1.0.1.0, timestamp: 0x61fb9339
Codice eccezione: 0xc0000005
Offset errore 0x0000000000745b24
ID processo che ha generato l'errore: 0x15fc

Per risolvere il problema è dunque sufficiente andare nella libreria di Steam.

Cliccare col destro sul gioco e poi su Proprietà

Nella finestra delle proprietà spostarsi su File Locali.

Infine cliccare su Verifica integrità dei file di gioco…

Il processo richiederà qualche minuto probabilmente e dopodiché il problema dovrebbe essere risolto.