Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het maken van een bestandstoewijzingsobject in Windows omvat het openen van een bestand met behulp van de functie CreateFile . Met dit proces kunt u bestandsinhoud rechtstreeks toewijzen aan het geheugen voor efficiƫnte toegang en manipulatie. Om ervoor te zorgen dat andere processen niet naar het gedeelte van het toegewezen bestand kunnen schrijven, moet u het bestand openen met exclusieve toegang. Bovendien moet het bestandshandvat open blijven totdat het proces het object voor bestandenstoewijzing niet meer nodig heeft. Een eenvoudige manier om exclusieve toegang te verkrijgen is door nul op te geven in de parameter fdwShareMode van CreateFile. De handle die wordt geretourneerd door CreateFile , wordt gebruikt door de functie CreateFileMapping om een object voor bestandstoewijzing te maken.
De functie CreateFileMapping retourneert een ingang naar het object voor bestandstoewijzing. Deze ingang wordt gebruikt bij het maken van een bestandsweergave , zodat u toegang hebt tot het gedeelde geheugen. Wanneer u CreateFileMapping aanroept, geeft u een objectnaam op, het aantal bytes dat uit het bestand moet worden toegewezen en de machtiging lezen/schrijven voor het toegewezen geheugen. Het eerste proces dat CreateFileMapping aanroept, maakt het object voor bestandstoewijzing. Processen die CreateFileMapping aanroepen voor een bestaand object, ontvangen een ingang voor het bestaande object. U kunt zien of een geslaagde aanroep naar CreateFileMapping het object voor bestandstoewijzing heeft gemaakt of geopend door de functie GetLastError aan te roepen. GetLastError retourneert NO_ERROR naar het maken van het proces en ERROR_ALREADY_EXISTS naar volgende processen.
De functie CreateFileMapping mislukt als de toegangsvlagmen conflicteren met de vlaggen die zijn opgegeven toen de functie CreateFile het bestand opende. Als u bijvoorbeeld wilt lezen en schrijven naar het bestand:
- Geef de GENERIC_READ en GENERIC_WRITE waarden op in de fdwAccess-parameter van CreateFile.
- Geef de PAGE_READWRITE waarde op in de parameter fdwProtect van CreateFileMapping.
Als u een object voor bestandstoewijzing maakt, wordt het fysieke geheugen niet doorgevoerd, maar wordt het alleen gereserveerd.
Grootte van bestandsmapping
De grootte van het bestandstoewijzingsobject is onafhankelijk van de grootte van het bestand dat wordt toegewezen. Als het object voor bestandstoewijzing echter groter is dan het bestand, wordt het bestand uitgebreid voordat CreateFileMapping wordt geretourneerd. Als het bestandstoewijzingsobject kleiner is dan het bestand, wijst het systeem alleen het opgegeven aantal bytes uit het bestand toe.
Met de parameters dwMaximumSizeHigh en dwMaximumSizeLow van CreateFileMapping kunt u het aantal bytes opgeven dat uit het bestand moet worden toegewezen:
Als u de grootte van het bestand niet wilt wijzigen (bijvoorbeeld bij het toewijzen van alleen-lezenbestanden), roept u CreateFileMapping aan en geeft u nul op voor zowel dwMaximumSizeHigh als dwMaximumSizeLow. Hiermee maakt u een bestandstoewijzingsobject dat precies dezelfde grootte heeft als het bestand. Anders moet u de grootte van het voltooide bestand berekenen of schatten omdat bestandstoewijzingsobjecten statisch zijn; zodra de grootte is gemaakt, kan de grootte niet worden verhoogd of verlaagd. Een poging om op deze manier een bestand met een lengte van nul toe te wijzen, resulteert in een foutcode van ERROR_FILE_INVALID. Programma's moeten testen op bestanden met een lengte van nul en dergelijke bestanden weigeren.
De grootte van een bestandstoewijzingsobject dat wordt ondersteund door een benoemd bestand, wordt beperkt door schijfruimte. De grootte van een bestandsweergave is beperkt tot het grootste aaneengesloten blok van niet-gereserveerd virtueel geheugen.
De grootte van het bestandstoewijzingsobject dat u selecteert, bepaalt hoe ver in het bestand u kunt zien met geheugentoewijzing. Als u een bestandstoewijzingsobject maakt dat 500 kB groot is, hebt u alleen toegang tot de eerste 500 kB van het bestand, ongeacht de grootte van het bestand. Omdat het geen systeembronnen kost om een groter object voor bestandstoewijzing te maken, maakt u een object voor bestandstoewijzing dat de grootte van het bestand is (stel de parameters dwMaximumSizeHigh en dwMaximumSizeLow van CreateFileMapping beide in op nul), zelfs als u niet verwacht het hele bestand te bekijken. De kosten in systeembronnen worden veroorzaakt door het maken van de weergaven en het benaderen ervan.
U kunt een gedeelte van het bestand weergeven dat niet begint aan het begin van het bestand. Zie Een weergave in een bestand maken voor meer informatie.