| |
|
|
|
Beschreibung:
MapViewOfFile bildet un (avec CreateFileMapping erzeugtes ou bien OpenFileMapping geöffnetes) Dateiabbildungsprojekt im Speicherbereich des aufrufenden Prozesses ab et liefert une Anfangsadresse zurück.
Deklaration:
Def @MapViewOfFile(5) !kernel32,MapViewOfFile
paramètre:
1.paramètre: Handle des avec CreateFileMapping erzeugten Dateiabbildungsprojektes comme LongInt. 2.paramètre: un Flag Zugriffsmodus sur den Speicherbereich. => -$2 = Schreib- et Lesezugriff. -$4 = seulement Lesezugriff. -$000F001F = Schreib- et Lesezugriff (comment $2) -$1 = sous NT-basierten Windowsversionen trouver Changements qui Dossier seulement im Speicherbereich des aktuellen Prozesses statt – sur qui Platte et dans Abbildungen anderer Prozesse wird rien geschrieben. sous pas NT-basierten Systemen wird zwar aussi qui Mappingbereich anderer Prozesse geändert, qui Dossier qui Platte ändert sich mais pas. 3.paramètre: qui oberen 32 Bits qui Startadresse des avec CreateFileMapping erzeugten Speicherbereichs, ab dem cela Mapping commencer soll. 4.paramètre: qui unteren 32 Bits qui Startadresse des avec CreateFileMapping erzeugten Speicherbereichs, ab dem cela Mapping commencer soll. 5.paramètre: Nombre de trop übertragenden Bytes comme LongInt.
Rückgabewert:
0 chez Misserfolg, ansonsten qui Startadresse des Speicherbereichs.
Beispiele:
Beispiel 1
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @CreateFileMapping(6) !"kernel32","CreateFileMappingA"
Def @CloseHandle(1) !"kernel32","CloseHandle"
DEF @GetLastError() !"kernel32","GetLastError"
Def @MapViewOfFile(5) !"kernel32","MapViewOfFile"
DEf @UnmapViewOfFile(1) !"kernel32","UnmapViewOfFile"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
WINDOWSTYLE 31+512
Windowtitle "Hier wird qui Variable erzeugt"
WINDOW 0,0-300,400
Déclarer Variable&,Tick&,nom$,Ausgelesen#
Déclarer Speicherhandle&,Speicheraddr&
Laisser nom$="AH-Variable"
LET Speicherhandle&=@CreateFileMapping($FFFFFFFF,0,4,0,4,@addr(nom$))
LET Speicheraddr&=@MapViewOfFile(Speicherhandle&,2,0,0,0)
Drawtext 0,50,"Handle des Speicherbereichs:"+@STR$(Speicherhandle&)
LET TICK&=&GETTICKCOUNT
Whilenot %MENUITEM=-2
IF &GETTICKCOUNT-Tick&>10000
Laisser Variable&=@RND(1000)
@CopyMemory(Speicheraddr&,@addr(Variable&),4)
LET TICK&=&GETTICKCOUNT
endif
DIM Ausgelesen#,256
@CopyMemory(Ausgelesen#,Speicheraddr&,4)
Drawtext 0,80,"Variale="+@STR$(@LONG(Ausgelesen#,0))+" "
Dispose Ausgelesen#
Sleep 10
WEND
@UnmapViewOfFile(Speicheraddr&)
@CloseHandle(Speicherhandle&)
Beep 1
DEF @OpenFileMapping(3) !"kernel32","OpenFileMappingA"
DEF @GetLastError() !"kernel32","GetLastError"
Def @MapViewOfFile(5) !"kernel32","MapViewOfFile"
DEf @UnmapViewOfFile(1) !"kernel32","UnmapViewOfFile"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
Def @CloseHandle(1) !"kernel32","CloseHandle"
Windowtitle "Hier wird qui Variable ausgelesen"
WINDOWSTYLE 31+512
WINDOW 300,0-300,400
Déclarer Speicherhandle&,Ausgelesen#,nom$
Déclarer Speicheraddr&
Déclarer Variable&
Laisser Variable&=0
Laisser nom$="AH-Variable"
Tandis que @AND(Speicherhandle&=0,%MENUITEM<>-2)
sleep 100
LET Speicherhandle&=@OpenFileMapping(2,0,@ADDR(nom$))
Wend
LET Speicherhandle&=@OpenFileMapping(2,0,@ADDR(nom$))
LET Speicheraddr&=@MapViewOfFile(Speicherhandle&,2,0,0,0)
Drawtext 0,50,"Handle des Speicherbereichs:"+@STR$(Speicherhandle&)
DIM Ausgelesen#,256
WHILEnot %MENUITEM=-2
Drawtext 0,0,"F1 drücken zum Auslesen"
Drawtext 0,21,"F2 drücken zum Zurücksetzen..."
Waitinput
IF %SCANKEY=112
@CopyMemory(Ausgelesen#,Speicheraddr&,4)
Drawtext 0,80,"Variale="+@STR$(@LONG(Ausgelesen#,0))+" "
Beep 1
ElseIF %SCANKEY=113
Beep 1
@CopyMemory(Speicheraddr&,@addr(Variable&),4)
@CopyMemory(Ausgelesen#,Speicheraddr&,4)
Drawtext 0,80,"Variale="+@STR$(@LONG(Ausgelesen#,0))+" "
Endif
WEND
Dispose Ausgelesen#
@UnmapViewOfFile(Speicheraddr&)
@CloseHandle(Speicherhandle&)
Beep 1
|
|
|
| |
|
|