Perché i gestori delle partizioni hanno bisogno dei propri driver?


1

Perché così tanti strumenti di gestione delle partizioni, come EASEUS Partition Master, Acronis Disk Director, ecc. Richiedono i propri driver per funzionare?

In altre parole, che cosa hanno bisogno di fare che non può essere realizzato senza un driver dedicato?

L'accesso diretto al disco è completamente possibile dalla modalità utente in Windows, quindi sono curioso del perché questi strumenti insistano sull'installazione di un driver personalizzato per svolgere il proprio lavoro. Qual è la ragione di questo?


Ho appena installato EaseUS PM Home Edition per dare una sbirciatina ... ma non riesco a trovare alcun driver: niente nei file installati, nel registro o in MS Info - qual è il nome del file del driver?
ckhan

@ckhan: Interessante ... ad un certo punto ho pensato di aver visto epm-qualcosa-qualcosa.sys, ma quello era quando stavo facendo un'operazione di partizionamento. Non lo vedo ora. Fammi vedere e vedere se riesco a trovare qualcosa ...
Mehrdad

@ckhan: Ah, sapevo che non stavo impazzendo. :-) Suo \Windows\System32\epmntdrv.sys.
Mehrdad

Devo notare che non tutti i programmi fanno questo. (Non ho visto Paragon fare questo, per esempio.) E, programmi che fare fai questo, fallo in diversi modi ... per esempio quello di EASEUS è molto strano, perché ignora qualunque cosa e scrive direttamente sul disco, anche su tutti i driver che possono essere presenti direttamente sopra il driver del disco (come FancyCache). L'I / O di EASEUS non viene visualizzato come I / O su disco, ma come "altro" I / O.
Mehrdad

Come ha detto Mehrdad, sono driver di filtro, quindi il programma ha accesso esclusivo al disco, necessario quando si esegue l'imaging o si clona il disco rigido mentre si è in Windows. Anche Acronis lo fa. Paragon utilizza hotcore3.sys in alcune delle sue installazioni di prodotto.
Moab

Risposte:


3

@ David Schwartz ha suggerito che sta intercettando tutto l'accesso al disco. Questo sicuramente mi sembra credibile. Ma mi chiedo se è tutta la storia. Ho sondato il driver EaseUS, empmntdrv.sys. Alcune cose da notare:

  1. Viene caricato non appena avvio l'interfaccia utente, in realtà non partiziona nulla.

  2. I forum EaseUS ne hanno molti post di persone che si lamentano del fatto che non compaiono partizioni quando lanciano l'interfaccia utente e la risposta di riserva da supporto EaseUS è: re-installare il driver. Questo mi fa sembrare usato per leggere il tavolo.

  3. Ha portato fuori le armi da fuoco: PE Explorer per smontare il file del driver. Per lo più greco, naturalmente, ma alcune cose saltano fuori. Innanzitutto, la tabella dei simboli mostra l'elenco delle chiamate di sistema effettuate ntoskrnel.exee questo include il mucking con link simbolici:

    ; Imports from ntoskrnl.exe
        extrn DbgPrint
        extrn ExAllocatePoolWithTag
        extrn ExFreePoolWithTag
        extrn IoBuildAsynchronousFsdRequest
        extrn IoBuildDeviceIoControlRequest
        extrn IoCreateDevice
        extrn IoCreateSymbolicLink
        extrn IoDeleteDevice
        extrn IoDeleteSymbolicLink
        extrn IoFreeIrp
        extrn IoFreeMdl
        extrn IoGetAttachedDeviceReference
        extrn IoGetDeviceObjectPointer
        extrn IofCallDriver
        extrn IofCompleteRequest
        extrn KeBugCheckEx
        extrn KeInitializeEvent
        extrn KeSetEvent
        extrn KeTickCount
        extrn KeWaitForSingleObject
        extrn MmMapLockedPagesSpecifyCache
        extrn MmUnlockPages
        extrn ObfDereferenceObject
        extrn ObfReferenceObject
        extrn RtlAnsiCharToUnicodeChar
        extrn RtlInitUnicodeString
        extrn RtlUnicodeStringToInteger
        extrn memcpy
        extrn memset
    

    Si noti inoltre che queste non sono le routine del driver di filtro, sono delle IO di basso livello. (Non FltGetDiskDeviceObject, piuttosto IoGetDeviceObjectPointer.

  4. Ancora più ficcanaso hanno trovato alcune costanti che potrebbero dare più indizi. Come la maggior parte del codice compilato da Windows, c'è un riferimento rigido al file PDB, solitamente con il percorso sul computer che lo ha creato:

    h: \ epm2.0 \ 01_projectarea \ 00_source \ epm2 \ mod.windiskaccessdriver \ windiskaccessdriver \ objfre_wxp_x86 \ i386 \ epmntdrv.pdb

    Questo è probabilmente il nome del progetto dello sviluppatore: "win disc access driver" Penso che abbiano bisogno del driver per leggere effettivamente la tabella in un modo che è utile per loro.

  5. Poi c'è questa costante, che sembra davvero interessante:

    \Device\Harddisk%u\Partition0
    

    Quello è sembrato abbastanza interessante da rintracciare dove è stato fatto riferimento nel codice smontato, che mi ha portato qui:

     0001051E  68C6190100                       push    L000119C6
     00010523  6A78                             push    00000078h
     00010525  50                               push    eax
     00010526  E85BFFFFFF                       call    SUB_L00010486
     0001052B  83C420                           add esp,00000020h
     0001052E  85C0                             test    eax,eax
     00010530  7404                             jz  L00010536
     00010532                           L00010532:
     00010532  33C0                             xor eax,eax
     00010534  EB43                             jmp L00010579
     00010536                           L00010536:
     00010536  8D4584                           lea eax,[ebp-7Ch]
     00010539  50                               push    eax
     0001053A  8D8574FFFFFF                     lea eax,[ebp-0000008Ch]
     00010540  50                               push    eax
     00010541  FF15941A0100                     call    [ntoskrnl.exe!RtlInitUnicodeString]
     00010547  8D4580                           lea eax,[ebp-80h]
     0001054A  50                               push    eax
     0001054B  8D857CFFFFFF                     lea eax,[ebp-00000084h]
     00010551  50                               push    eax
     00010552  56                               push    esi
     00010553  8D8574FFFFFF                     lea eax,[ebp-0000008Ch]
     00010559  50                               push    eax
     0001055A  FF15901A0100                     call    [ntoskrnl.exe!IoGetDeviceObjectPointer]
    
  6. Quindi cosa fa la magia IoGetDeviceObjectPointer, che è disponibile solo in modalità kernel, ti dico quando lo chiami \Device\Harddisk0\Partition0 ?

    Da un post antico su comp.os.ms-windows.programmer.nt.kernel-mode :

    Se si ottiene il puntatore su \ device \ harddisk (n) \ partition (n) utilizzando   IoGetDeviceObjectPointer (), si otterrà un puntatore al dispositivo delle partizioni   oggetto. Se si desidera l'oggetto dispositivo disco fisico, è necessario ottenere il   puntatore a \ dispositivo \ harddisk (n) \ partition0.

    Quindi partition0 ci consente di accedere a disco fisico

    E questo ci dà un sacco di metriche e contatori di prestazioni sono al di sotto del livello logico per il disco.

  7. Infine, cercando di trovare un tempo che pensavo potesse effettivamente utilizzare il driver. Ho eseguito un "test di superficie" da EaseUS, e vedo le statistiche sulla performance. Potrebbero farlo dal livello utente, ma in Process Explorer, quando ho preso un'istantanea, improvvisamente ho visto il Device.mo dll active: presumibilmente la parte del sistema che parla con l'autista.

Non sono ancora sicuro se questa è una buona risposta alla domanda. Ma è stato divertente esplorare, comunque! Grazie per aver letto.


Anzi, lì siamo funzioni disponibili in modalità kernel che non sono disponibili in modalità utente come funzioni (take IoCreateDisk per esempio), ma lì siamo (semi -?) equivalenti a molti di essi (ad es. IOCTL_DISK_CREATE_DISKoppure i contatori perf di modalità utente, ecc.). Il fatto che alcuni programmi non abbiano bisogno di un driver del kernel (o almeno non così tanto) mi fa chiedere perché altri programmi lo facciano. Ma +1, è fantastico!
Mehrdad

2

Devono intercettare tutti gli accessi al disco. Ad esempio, supponiamo di essere in procinto di clonare una partizione. Se durante il processo di clonazione vengono eseguite scritture sul disco, il settore scritto su deve essere clonato prima di consentire il passaggio della scrittura, altrimenti il ​​clone risultante sarà incoerente.


Windows non dispone già di istantanee del volume / copie shadow appositamente per questo scopo? (Per esempio. questa funzionalità .) Dopo tutto, programmi come Disk2vhd certamente non sembrano aver bisogno di questo, eppure hanno certamente bisogno di bloccare le scritture ...
Mehrdad

Disk2VHD non tenta di cambiare una partizione mentre Windows lo sta usando come fanno i gestori delle partizioni. Disk2VHD non tenta di presentare una partizione virtuale a Windows durante le sue operazioni.
David Schwartz

Deve ancora bloccare le scritture, vero?
Mehrdad

Anche, nessun programma (o almeno, nessun programma sensato ...) cambia una partizione mentre Windows lo sta usando. (Questo è forzata in Windows Vista / 7, ma è vero in tutte le versioni precedenti di XP.) Inoltre, nessun gestore [sane] delle partizioni prova a presentare una partizione virtuale a Windows mentre procede con la modifica di una partizione. I gestori delle partizioni bloccano la partizione quando possono e riavviano in modalità nativa quando non possono.
Mehrdad

Quello non è vero. Ad esempio, Acronis Backup and Restore, può essere avviato da una partizione durante il ripristino.
David Schwartz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.