Ho alcune domande relative ai processi Windows nel kernel e in usermode.Processi Windows nel kernel vs sistema
Se ho un'applicazione Hello World e un driver mondiale Hello che espone una nuova chiamata di sistema, foo(), sono curioso di sapere cosa posso e cosa non posso fare quando sono in modalità kernel.
Per i principianti, quando scrivo la mia nuova app ciao mondo, mi viene dato un nuovo processo, il che significa che ho il mio spazio per la mia modalità utente VM (lascia che sia semplice, finestre a 32 bit). Quindi ho 2 GB di spazio che possiedo ", posso colpire e sbirciare fino a che i miei cuori non si accontentano. Tuttavia, sono vincolato dal mio processo. Non posso (non permettiamo di portare la memoria condivisa in questo ancora) toccare qualcun altro memoria.
Se, scrivo questo ciao world driver, e lo chiamo dalla mia app utente, I (il codice del driver) è ora in modalità kernel.
Primo chiarimento/domande: Sono ANCORA nello stesso processo dell'app per la modalità utente, corretto? Hai ancora lo stesso PID?
Memoria Domande: La memoria viene presentata al mio processo come VM, anche se ho 1 GB di RAM, posso ancora accedere a 4 GB di memoria (2 GB utente/2 GB di kernel - non mi interessa i dettagli degli switch sui server, o specifiche, solo un'ipotesi generale qui). Come processo utente, non posso dare un'occhiata a nessun indirizzo di memoria in modalità kernel, ma posso fare tutto ciò che voglio nello spazio utente, corretto?
Se chiamo nel mio driver hello world, dal codice del driver, ho ancora la stessa vista della memoria usermode? Ma ora ho anche accesso a qualsiasi memoria in modalità kernel?
Questa memoria in modalità kernel è SHARED (diversamente dalla modalità Utente, che è la copia dei miei processi)? Cioè, scrivere un driver è più come scrivere un'applicazione filettata per un singolo processo che è il sistema operativo (programmazione a parte?)
Domanda successiva. Come autista, potrei cambiare il processo che sto eseguendo. Supponiamo che conosca un'altra app (ad esempio un server web usermode) e carichi la VM per quel processo, modifichi il suo puntatore di istruzioni, impili o carichi codice diverso nel processo e poi torni alla mia app? (Non sto cercando di fare nulla di nefasto qui, sono solo curioso di sapere cosa sia in realtà significa essere in modalità kernel)?
Inoltre, una volta in modalità kernel, posso impedire al sistema operativo di impedirmi? Penso che in Windows sia possibile impostare il livello IRQL per farlo, ma non lo capisco appieno, anche dopo aver letto il libro di Solomons (Inside Windows ...). Chiederò un'altra domanda, direttamente correlata a IRQL/DPC ma, per ora, mi piacerebbe sapere se un driver del kernel ha il potere di impostare un IRQL su High e prendere il controllo del sistema.
Altro a venire, ma le risposte a queste domande potrebbero aiutare.
Non credo che questa è una domanda cattiva, +1. –