Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující obrázek znázorňuje, jak správce vstupně-výstupních operací nastaví požadavek IRP_MJ_READ na operaci přenosu DMA, která používá přímé vstupně-výstupní operace.
Předchozí obrázek znázorňuje, jak můžou ovladače použít MdlAddress IRP k přenosu dat pro žádost o čtení. Ovladač na obrázku používá systém založený na balících nebo řadič sběrnice DMA a provedl bitovou operaci OR mezi příznaky objektu zařízení a DO_DIRECT_IO.
Určité rozsahy virtuálních adres uživatelského prostoru představují vyrovnávací paměť aktuálního vlákna a obsah vyrovnávací paměti může být skutečně uložen na určitém počtu fyzicky oddělených stránek (tmavé stínování na předchozím obrázku). Správce vstupně-výstupních operací vytvoří MDL pro popis této vyrovnávací paměti. MDL je neprůhlená datová struktura definovaná správcem paměti, která mapuje konkrétní rozsah virtuálních adres na jeden nebo více stránkových rozsahů fyzických adres. Další informace najdete v tématu Použití knihoven MDLS.
V/V správce obsluhuje žádost o čtení aktuálního vlákna, přičemž vlákno předává rozsah virtuálních adres uživatelského prostoru, které představují vyrovnávací paměť.
Správce vstupně-výstupních operací nebo ovladač systému souborů (FSD) kontroluje uživatelsky zadanou vyrovnávací paměť pro přístupnost a volá MmProbeAndLockPages s dříve vytvořeným MDL. MmProbeAndLockPages také vyplní odpovídající rozsah fyzických adres v MDL.
Jak ukazuje předchozí obrázek, MDL pro virtuální rozsah může mít několik odpovídajících položek fyzických adres vázaných na stránku, a virtuální rozsah vyrovnávací paměti může začínat a končit na určitém bajtovém posunu od začátku první a konce poslední stránky popsaných v MDL.
Správce vstupně-výstupních operací poskytuje ukazatel na MDL (MdlAddress) v protokolu IRP, který požaduje operaci přenosu. Do té doby, než správce vstupně-výstupních operací nebo systém souborů zavolá MmUnlockPages po dokončení práce ovladače, zůstávají fyzické stránky popsané v MDL uzamčené a přiřazené k vyrovnávací paměti. Virtuální adresy v takovém MDL se ale můžou stát neviditelnými (a neplatnými) i před odesláním protokolu IRP na ovladač zařízení nebo do jakéhokoli zprostředkujícího ovladače, který může být vrstvený nad ovladačem zařízení.
Pokud ovladač používá systém založený na paketech nebo sběrnicový řadič DMA, jeho AdapterControl rutina volá MmGetMdlVirtualAddress s ukazatelem IRP na MdlAddress aby získal základní virtuální adresu pro položky založené na stránkách MDL.
Rutina AdapterControl pak volá MapTransfer se základní adresou vrácenou MmGetMdlVirtualAddress, aby načetla data ze zařízení přímo do fyzické paměti. (Další informace najdete v tématu Objekty adaptéru a DMA.)
Řidiče by měly vždy kontrolovat délky vyrovnávací paměti. Všimněte si, že správce vstupně-výstupních operací nevytvoří MDL pro vyrovnávací paměť nulové délky.