<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Windows Driver Model</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Windows_Driver_Model"/>
<meta name="wx_page_id" content="24262"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Windows Driver Model" id="wxsec1"><h1 class="pagetitle" id="wx1">Windows Driver Model</h1>

<p id="wx2"><b id="wx3">Windows Driver Model</b>, architettura di <a href="/wit/Driver" title="Driver" wx:linktype="known" wx:pagename="Driver" wx:page_id="24265" id="wx4">driver</a> compatibili con <a href="/wit/Windows_98" title="Windows 98" wx:linktype="known" wx:pagename="Windows_98" wx:page_id="4572" id="wx5">Windows 98</a>, <a href="/wit/Windows_2000" title="Windows 2000" wx:linktype="known" wx:pagename="Windows_2000" wx:page_id="12799" id="wx6">Windows 2000</a> e successori sviluppata da <a href="/wit/Microsoft" title="Microsoft" wx:linktype="known" wx:pagename="Microsoft" wx:page_id="1596894" id="wx7">Microsoft</a>. Il Windows Driver Model è lo standard secondo cui sono scritti la maggior parte dei driver per i sistemi operativi Microsoft; anche <a href="/wit/Windows_Vista" title="Windows Vista" wx:linktype="known" wx:pagename="Windows_Vista" wx:page_id="1214377" id="wx8">Windows Vista</a> supporterà il WDM, sebbene questo S.O. introduca un nuovo formato per i driver (il <a href="/wit/Windows_Driver_Foundations" title="Windows Driver Foundations" wx:linktype="known" wx:pagename="Windows_Driver_Foundations" wx:page_id="1540990" id="wx9">Windows Driver Foundations</a>) e molte novità nella gestione e installazione. I file dei driver WDM hanno estensione <b id="wx10">.sys</b>.</p>

<div id="wx_toc"/>

<a id="Storia" name="Storia"/>
<wx:section level="2" title="Storia" id="wxsec2"><h2 id="wx11">Storia</h2>

<p id="wx12">Con l'avvento dei sistemi operativi a 32 bit, Microsoft mise sul mercato due famiglie di prodotti di aspetto simile ma internamente molto differenti: <a href="/wit/Windows_95" title="Windows 95" wx:linktype="known" wx:pagename="Windows_95" wx:page_id="4571" id="wx13">Windows 95</a> e <a href="/wit/Windows_NT" title="Windows NT" wx:linktype="known" wx:pagename="Windows_NT" wx:page_id="4573" id="wx14">Windows NT</a>. Windows 95 era un diretto discendente di <a href="/wit/Windows_3.x" title="Windows 3.x" wx:linktype="known" wx:pagename="Windows_3.x" wx:page_id="4568" id="wx15">Windows 3.x</a> e <a href="/wit/MS-DOS" title="MS-DOS" wx:linktype="known" wx:pagename="MS-DOS" wx:page_id="11247" id="wx16">DOS</a>, ed era pensato per funzionare con hardware molto limitati per un OS multiutente/multitask dotato di GUI (Intel 80386 con 4 MByte di <a href="/wit/RAM" title="RAM" wx:linktype="known" wx:pagename="RAM" wx:page_id="1200437" id="wx17">RAM</a>). Inoltre doveva essere compatibile con tutti i software sviluppati per Windows a 16 bit e il DOS. Per ottenere questi due risultati Microsoft optò per una sistema ibrido 16/32 bit, con un risultato eccellente viste le premesse, ma non superlativo per quando riguarda sicurezza e affidabilità. Windows NT, invece, è un sistema operativo a 32 bit puri, molto più affidabile, ma pesante per l'hardware dell'epoca e scarsamente compatibile con il software a 16 bit. Questa distinzione architetturale si tradusse nella necessità di avere due versioni di device driver fra loro incompatibili, che i produttori hardware dovevano sviluppare per supportare sia Windows 95 che Windows NT.</p>

<p id="wx18">Per risolvere questo problema Microsoft ideò un nuovo modello di driver chiamato <b id="wx19">Windows Driver Model</b>, per le successive versioni dei suoi sistemi operativi. Questo notevole passo avanti non fu indolore. I driver WDM sono compatibili in avanti, ma non <i id="wx20">all'indietro</i>: cioè funzionano con Windows 98, Windows 2000, <a href="/wit/Windows_XP" title="Windows XP" wx:linktype="known" wx:pagename="Windows_XP" wx:page_id="4574" id="wx21">XP</a> e loro successori, ma non funzionano con Windows 95 e Windows NT 4 (o se scritti specificamente per Windows XP, funzioneranno con Vista ma non con Windows 2000). Inoltre, perché un driver WDM funzionasse sia con Windows 98 che con Windows 2000 era necessario che fosse scritto attentamente; molti produttori di hardware invece rilasciarono inizialmente driver WDM scritti in fretta e senza i dovuti controlli, che crearono molti problemi agli utenti e contribuirono a generare un'iniziale (ingiustificata) diffidenza verso il Windows Driver Model.</p>

<p id="wx22">L'architettura WDM, per quanto abbia ridotto il numero di versioni di driver necessari ai produttori di hardware per il supporto ai loro prodotti, è molto complessa e non priva di problemi: questo ha portato la Microsoft a creare una nuova architettura di driver, la <a href="/wit/Windows_Driver_Foundation" title="Windows Driver Foundation" wx:linktype="known" wx:pagename="Windows_Driver_Foundation" wx:page_id="1540989" id="wx23">Windows Driver Foundation</a>, che dovrebbe sostituire il WDM nel medio-lungo termine.</p>

<a id="Tipi_di_driver_WDM" name="Tipi_di_driver_WDM"/>
</wx:section><wx:section level="2" title="Tipi di driver WDM" id="wxsec3"><h2 id="wx24">Tipi di driver WDM</h2>

<p id="wx25">Il formato WDM prevede i seguenti tipi di driver:</p>

<ul id="wx26">
<li id="wx27"><b id="wx28">Driver di classe</b>
<p id="wx29">: possono dipendere dai driver miniport o da altri driver di classe e implementano funzioni specifiche. Possono essere caricati e scaricati dinamicamente quando non sono più necessari, come i moduli del <a href="/wit/Kernel_Linux" title="Kernel Linux" wx:linktype="known" wx:pagename="Kernel_Linux" wx:page_id="10779" id="wx30">kernel Linux</a>.</p>
</li>

<li id="wx31"><b id="wx32">Driver miniport</b>
<p id="wx33">: sono driver di periferiche <a href="/wit/Small_Computer_System_Interface" title="Small Computer System Interface" wx:linktype="known" wx:pagename="Small_Computer_System_Interface" wx:page_id="225318" id="wx34">SCSI</a> e <a href="/wit/Universal_Serial_Bus" title="Universal Serial Bus" wx:linktype="known" wx:pagename="Universal_Serial_Bus" wx:page_id="21685" id="wx35">USB</a>, di interfacce di rete e periferiche audio. Sono specifici per il singolo dispositivo hardware e devono essere compatibili a livello binario fra Windows 98 e Windows 2000. Accedono al loro hardware attraverso un particolare driver di classe bus software.</p>
</li>

<li id="wx36"><b id="wx37">Driver bus software</b>
<p id="wx38">: Microsoft fornisce incorporati nei suoi sistemi operativi i driver per i bus più comuni (ISA/PNP, PCI, SCSI, USB, FireWire): se lo ritiene necessario, un produttore di hardware può scriverne uno proprio.</p>
</li>

<li id="wx39"><b id="wx40">Servizio al sistema operativo</b>
<p id="wx41">: sono driver di livello molto alto, che di solito astraggono completamente dall'hardware e non fanno riferimento a nessun driver miniport.</p>
</li>

<li id="wx42"><b id="wx43">Driver di periferica virtuale</b>
<p id="wx44">: sono una eredità delle vecchie versioni di Windows e vengono usati per hardware obsoleto.</p>
</li>

<li id="wx45"><b id="wx46">Driver Windows NT 4.0</b>
<p id="wx47">: come sopra, ma per hardware pensato per Windows NT 4.</p>
</li>
</ul>

<a id="Requisiti_del_WDM" name="Requisiti_del_WDM"/>
</wx:section><wx:section level="2" title="Requisiti del WDM" id="wxsec4"><h2 id="wx48">Requisiti del WDM</h2>

<p id="wx49">Non tutto l'hardware può essere gestito tramite driver WDM: per esempio l'hardware video non può essere gestito da WDM.</p>

<a id="Problemi_del_WDM" name="Problemi_del_WDM"/>
</wx:section><wx:section level="2" title="Problemi del WDM" id="wxsec5"><h2 id="wx50">Problemi del WDM</h2>

<ul id="wx51">
<li id="wx52">
<p id="wx53">È molto difficile imparare a scrivere device driver WDM.</p>
</li>

<li id="wx54">
<p id="wx55">L'interazione con il <a href="/wit/Plug_and_Play" title="Plug and Play" wx:linktype="known" wx:pagename="Plug_and_Play" wx:page_id="67127" id="wx56">Plug and Play</a> è problematica, e la gestione degli eventi di risparmio energetico lo è ancora di più. Questo porta ad avere periferiche che non si spengono quando il sistema va in risparmio enegetico, che impediscono al sistema di andare in sleep mode e/o che non riescono a riaccendersi o a tornare nello stato giusto al risveglio del sistema a causa di oscuri bug nel codice del loro driver.</p>
</li>

<li id="wx57">
<p id="wx58">È praticamente impossibile interrompere una operazione di I/O in corso senza rendere instabile il sistema.</p>
</li>

<li id="wx59">
<p id="wx60">Ogni driver, anche uno semplicissimo, è lungo centinaia di righe di codice.</p>
</li>

<li id="wx61">
<p id="wx62">Il WDM non offre quasi nessun supporto per i driver in modalità utente (che non girino cioè a ring 0).</p>
</li>
</ul>

<a id="Altri_articoli" name="Altri_articoli"/>
</wx:section><wx:section level="2" title="Altri articoli" id="wxsec6"><h2 id="wx63">Altri articoli</h2>

<ul id="wx64">
<li id="wx65"><a href="/wit/WDM_Kernel_Streaming" class="new" title="WDM Kernel Streaming" wx:linktype="unknown" wx:pagename="WDM_Kernel_Streaming" id="wx66">WDM Kernel Streaming</a></li>

<li id="wx67"><a href="/wit/Windows_Driver_Foundation" title="Windows Driver Foundation" wx:linktype="known" wx:pagename="Windows_Driver_Foundation" wx:page_id="1540989" id="wx68">Windows Driver Foundation</a></li>
</ul>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Windows_Driver_Model" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx69">Categoria</a>: <span dir="ltr" id="wx70"><a href="/wit/Categoria:Microsoft_Windows" title="Categoria:Microsoft Windows" wx:linktype="known" wx:pagename="Categoria:Microsoft_Windows" wx:page_id="27379" id="wx71">Microsoft Windows</a></span></div>
<div id="wx_languagelinks">
Altre lingue: <a href="http://da.wikipedia.org/wiki/WDM" class="external" wx:linktype="interwiki" wx:pagename="da:WDM" id="wx72">Dansk</a> | <a href="http://en.wikipedia.org/wiki/Windows_Driver_Model" class="external" wx:linktype="interwiki" wx:pagename="en:Windows_Driver_Model" id="wx73">English</a> | <a href="http://es.wikipedia.org/wiki/Windows_Driver_Model" class="external" wx:linktype="interwiki" wx:pagename="es:Windows_Driver_Model" id="wx74">Español</a> | <a href="http://ja.wikipedia.org/wiki/Windows_Driver_Model" class="external" wx:linktype="interwiki" wx:pagename="ja:Windows_Driver_Model" id="wx75">日本語</a> | <a href="http://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84_%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84_%EB%AA%A8%EB%8D%B8" class="external" wx:linktype="interwiki" wx:pagename="ko:윈도_드라이버_모델" id="wx76">한국어</a> | <a href="http://pt.wikipedia.org/wiki/Windows_Driver_Model" class="external" wx:linktype="interwiki" wx:pagename="pt:Windows_Driver_Model" id="wx77">Português</a> | <a href="http://zh.wikipedia.org/wiki/Windows_Driver_Model" class="external" wx:linktype="interwiki" wx:pagename="zh:Windows_Driver_Model" id="wx78">中文</a></div>
</body>
</html>
