Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#11

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 13. Jun 2005, 08:37
Zu GMEM_FIXED. In einer PM tauchte die irrtümliche Annahme auf, daß dieses Flag dafür sorgt, daß der Speicher nicht geswappt (ausgelagert) werden darf. Dies ist nicht korrekt. Windows bietet allein Treibern die Möglichkeit zu wählen, wobei der sog. NonPagedPool als sehr begrenzte Ressource anzusehen ist. Ansonsten kümmert sich der MM um den Rest. Was bedeutet also GMEM_FIXED?
Nun, normalerweise geben die Global*()-Funktionen ein Handle zurück. Dieses Handle kann dann benutzt werden um einen Speicherbereich zu sperren und so einen Pointer darauf zu erlangen. Ist ein Bereich gesperrt, so darf sich die Adresse nicht verändern. Ist ein Bereich entsperrt, so kann der entsprechende Speicherblock, der durch das Handle repräsentiert wird, verschoben werden. GMEM_FIXED veranlaßt, daß der Speicherbereich immer gesperrt ist und somit das Handle auch als Pointer benutzt werden kann (Typecasting).

@ToniR: Ich habe nochmal ins DDK geguckt. Einen Treiber zu schreiben, der nur einen IOCTL hat, welcher dann eine phys. Adresse in eine virtuelle Adresse umwandelt sollte kein Problem sein. Allerdings bin ich mir noch nicht sicher, ob es so einfach geht diesen Bereich für den jeweiligen Prozess sichtbar zu machen. Am besten wäre wohl eine Section (MMF), denke ich. Es wird aber davon abgeraten und ich würde auch eher für das Kopieren eines Puffers. Kann man den DSP nicht stückchenweise füttern?
  Mit Zitat antworten Zitat