2014-12-22 15 views
13

Sto tentando di modificare un driver del disco del kernel a livello di Windows per rispondere correttamente ai codici di controllo aggiornati. Per esempio, aveva solo un gestore per il codice di controllo obsoleto IOCTL_DISK_GET_DRIVE_GEOMETRY, ma non il codice di controllo IOCTL_DISK_GET_DRIVE_GEOMETRY_EX più recente, così ho aggiunto che.
Ovviamente, ho aggiornato il driver per utilizzare tutte le nuove strutture e funzioni di Windows, come la funzione IoReadPartitionTableEx() e la struttura DRIVE_LAYOUT_INFORMATION_EX (sto cercando di aggiungere il supporto GPT al driver). Il problema è, quando uso il driver del disco, posso vedere (utilizzando DebugView) che Windows (credo che sia di Windows ... forse è un'altra cosa ...) è ancora inviando il codice di controllo IOCTL_DISK_GET_DRIVE_GEOMETRY vecchio per il mio autista. Vorrei che Windows inviasse i nuovi codici di controllo al mio driver. È anche Windows che sta inviando questi codici di controllo? C'è forse qualche altro livello tra Windows e il driver di cui non sono ancora a conoscenza?Modifica del driver del disco di Windows per utilizzare i codici di controllo aggiornati come IOCTL_DISK_GET_DRIVE_GEOMETRY_EX

Il driver dovrebbe in qualche modo identificare il suo "tipo" su Windows, in modo che Windows sappia esattamente come "parlare" ad esso? In che modo Windows sa esattamente quali codici di controllo inviare a un determinato driver? Ho Googled intorno per le risposte a queste domande (apparentemente molto di base), e non ho trovato una risposta chiara, il che mi porta a credere che ho fondamentalmente qualcosa frainteso sui driver di Windows qui. La mia domanda ha senso?

+0

Questa domanda sembra essere fuori tema perché si tratta di Non è, ma voglio esprimere un voto di riapertura. :) –

+1

Non penso che "IOCTL_DISK_GET_DRIVE_GEOMETRY' sia effettivamente obsoleto. Windows potrebbe semplicemente usarlo perché non ha bisogno delle informazioni extra fornite dalla versione '_EX'. (Non sono sicuro che abbia senso che un driver del disco fisico restituisca le informazioni sulla partizione, dal momento che si tratta di un concetto di livello superiore di cui non dovrebbe essere necessario occuparsi, ma non conosco bene i driver del disco di Windows.) –

+0

Quale tipo di disco viene restituito dal tuo driver? Vedere i commenti dell'utente in fondo a [questo] (https://msdn.microsoft.com/en-us/library/aa365171%28v=vs.85%29.aspx). – wallyk

risposta

2

L'OP ha 5 domande (contare in base al numero di punti interrogativi). Ognuna delle seguenti risposte risponde alle domande nello stesso ordine in cui sono state poste in OP.

  1. Per sapere chi sta chiamando il conducente con IOCTL_DISK_GET_DRIVE_GEOMETRY mettere un punto di interruzione sulla gestore per che IOCTL nel driver. Quando si verifica una rottura, guarda il callstack. Vedrai chi ha chiamato.

  2. avrete in realtà hanno un insieme stratificato di chiamanti. Questo risponderà alla tua domanda sui livelli.

  3. Windows sa riguardo alle vostre capacità driver in molti modi diversi. Se si dispone di un driver miniport, esiste una serie minima di funzionalità che ciascun tipo di miniport deve implementare.

    Inoltre ci sono API che i miniport di StorPort possono usare per indicare funzionalità opzionali. Ad esempio, StorPortInitializePerfOpts viene utilizzato per informare StorPort su varie ottimizzazioni perf in miniport StorPort. Per rispondere meglio a questa domanda si prega di fornire il tipo di driver che avete. Nel caso in cui non si abbia familiarità con i vari tipi di driver, suggerisco di leggere this dal centro di sviluppo MS HW. In effetti potresti voler leggerlo comunque.

  4. La domanda presuppone che Windows invii codici di controllo diversi a driver diversi in base ad alcuni attributi ipotetici dei driver. Tuttavia, il modello utilizzato da Windows è simile a quello menzionato nella risposta precedente. Esistono funzionalità di base basate sul modello del driver e in alcuni casi API per comunicare le funzionalità. (In altri casi è compito dell'autista indicare che non supporta una particolare operazione.)

    C'è un altro aspetto della risposta e cioè che i componenti di Windows e non Windows sono liberi di scegliere qualsiasi codice di controllo. volere. Pertanto, un programma di partizionamento del disco di terze parti potrebbe utilizzare la geometria IOCTL precedente, anche se ne esiste una più nuova perché vuole essere compatibile con le versioni precedenti di Windows. Oppure un componente di Windows (ad esempio spazi di archiviazione) potrebbe utilizzare un IOCTL più recente perché non supporta la compatibilità con le versioni precedenti.

  5. (Questa domanda richiede un'opinione, quindi questa risposta è la mia opinione).Assumendo per "domanda" intendi "domande", quindi direi più o meno. Ma se questa è la tua prima (o seconda) incursione nei driver di Windows, suggerisco nuovamente di leggere la relativa documentazione MS (linkata sopra).

Infine, anche se il PO non chiede direttamente, suona come v'è una domanda "Come faccio a verificare la funzionalità IOCTL_DISK_GET_DRIVE_GEOMETRY_EX ho aggiunto?". Il modo più semplice, IMO, è scrivere un programma di test Win32. Per richiamare e visualizzare questo IOCTL richiederebbe solo 20 linee di codice. Quale sarebbe più facile e più veloce allora, ad esempio, scripting DISKPART o simile.