Domanda

Ho un cliente che mi ha detto che il mio programma (programma semplice user-terra, non un driver) si blocca il suo sistema con un Blue Screen of Death (BSOD). Dice che non ha mai incontrato, che con altri programmi e che può riprodurre facilmente con la mia.

Il BSOD è di tipo CRITICAL_OBJECT_TERMINATION (0x000000F4) con tipo di oggetto 0x3 (processo): Un processo o thread fondamentale per il funzionamento del sistema è inaspettatamente chiuso o stato terminare

.

Può un semplice programma la responsabilità di un BSOD (anche su Vista ...) o avrebbe dovuto controllare l'installazione di hardware o sistema operativo?

È stato utile?

Soluzione

Il modo più semplice per causare un BSOD con un programma user-space è (AFAIK) per uccidere il processo di sottosistema di Windows (csrss.exe). Questo non ha bisogno di hardware difettoso né un bug nel kernel o un driver, ha solo bisogno dei privilegi di amministratore 1 .

Qual è il tuo codice esattamente facendo? Il messaggio di errore ( "Un processo o filetto fondamentale per il funzionamento del sistema è inaspettatamente chiuso o stato terminato.") Suona come uno dei processi di sistema essenziali terminati. Forse si stanno uccidendo un processo e involontariamente ottenuto il processo di sbagliato?

Se in qualche modo possibile si potrebbe provare a ottenere un dump di memoria da quel cliente. Utilizzando le Strumenti di debug per Windows si può quindi analizzare ulteriormente quella discarica come descritto qui .

1 di Windows non impedisce da farlo perché " mantiene gli amministratori nel controllo dei loro computer ". Quindi questo è di progettazione e non un bug. Leggi gli articoli di Raymond e vedrete perché.

Altri suggerimenti

Proprio perché il programma non è un driver non significa che non sarà usare di un driver.

In teoria, il codice non dovrebbe essere in grado di BSOD computer. E 'fino al sistema operativo per assicurarsi che non accada. Per definizione, questo significa che c'è un problema da qualche parte sia in hardware o in codice diverso da programma. Ciò non esclude che vi sia un bug nel codice come bene però.

Breve risposta è sì. Long risposta dipende da ciò che è si il programma è supponiamo di fare e come lo fa?

In genere, non dovrebbe. Se lo fa, ci deve essere o

  • Un bug nel kernel di Windows (possibile, ma molto improbabile)
  • Un bug in un driver di periferica (non necessariamente in un dispositivo il programma utilizza, questo potrebbe diventare piuttosto complicato)
  • un guasto nell'hardware

Sono pronto a scommettere sul opzione numero due (driver di periferica), ma sarebbe interessante se ci si potrebbe ottenere un dump più dettagliata.

Beh, sì, può - ma per molte ragioni diverse.

Ecco perché testiamo su diverse macchine, sistemi operativi, hardware etc ..

Hai impostato alcuni requisiti per il programma ed è il vostro utente li segui?

Se non è possibile duplicare da soli, e il vostro programma non ha bisogno di amministrazione di correre, sarei un po 'suspicous su

  • La stabilità di hardware che di sistema
  • Lo stato di virus / minacce di quel sistema.

Se è possibile ottenere l'accesso fisico alla casella cliente, forse vale la pena in esecuzione di una scansione completa del virus con uno scanner up-to-date, e l'esecuzione di un completo memtest su di esso.

Ho avuto un sistema una volta che sembrava stabile, tranne che un totalmente certe alcuni programmi non sarebbero eseguire su di esso (e sarebbe a volte mandare in crash il riquadro). Memtest ha mostrato la mia RAM ha avuto alcune notizie negative, ma erano in sims Higer, in modo che solo ottenuto accessibile se un programma ha tentato di usare un sacco di RAM.

No, e che è praticamente per definizione. La cosa peggiore che si può dire è che un'applicazione user-terra potrebbe aver "innescato" un bug di Windows o un bug del driver. Ma un moderno sistema desktop operativo è pienamente responsabile per la propria integrità; un BSOD è un fallimento di tale integrità. Pertanto il sistema operativo è responsabile, e solo il sistema operativo.

(Esempio di un bug BSOD che l'applicazione da solo potrebbe esporre: un programma antivirus implementato come un driver, che si blocca durante l'esecuzione di un file dal settore 0xFFFFFFFF, un settore che su questo una macchina accade solo per contenere una DLL della vostra applicazione )

ho avuto problemi quando si esce la mia app senza interrompere tutti i processi e le connessioni BD Al termine del programma (sono caduto l'intero IDE). Ho posto il codice "arresto e scollegare" nella "Terminate" della manifestazione "Form_Closed" della mia forma principale e il problema wa risolto, non so che questa è la tua situazione.

Un altro problema può essere se l'utente sta tentando di accedere alle stesse risorse la vostra applicazione sta usando (database, hardware, prese, ecc). Chiedi a lui / lei di quello che apps lui / lei sta usando quando il BSOD accade.

Un virus non può essere scartata.

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