📄 mmapfileintomemory.bas
字号:
Attribute VB_Name = "mMapFileIntoMemory"
Option Explicit
Public Declare Function MapViewOfFile _
Lib "kernel32.dll" (ByVal hFileMappingObject As Long, _
ByVal dwDesiredAccess As Long, _
ByVal dwFileOffsetHigh As Long, _
ByVal dwFileOffsetLow As Long, _
ByVal dwNumberOfBytesToMap As Long) As Long
Public Declare Sub CopyMemory _
Lib "kernel32.dll" _
Alias "RtlMoveMemory" (ByVal Destination As Long, _
ByVal Source As Long, _
ByVal Length As Long)
Public Declare Function UnmapViewOfFile _
Lib "kernel32.dll" (ByRef lpBaseAddress As Any) As Long
Public Declare Function CloseHandle _
Lib "kernel32.dll" (ByVal hObject As Long) As Long
Public Declare Function CreateFile _
Lib "kernel32.dll" _
Alias "CreateFileA" (ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
ByRef lpSecurityAttributes As Long, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Public Declare Function CreateFileMapping _
Lib "kernel32.dll" _
Alias "CreateFileMappingA" (ByVal hFile As Long, _
ByRef lpFileMappigAttributes As Long, _
ByVal flProtect As Long, _
ByVal dwMaximumSizeHigh As Long, _
ByVal dwMaximumSizeLow As Long, _
ByVal lpName As String) As Long
Public Declare Function GetFileSize _
Lib "kernel32.dll" (ByVal hFile As Long, _
ByRef lpFileSizeHigh As Long) As Long
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public Const FILE_ATTRIBUTE_NORMAL As Long = &H80
Public Const SECTION_MAP_READ As Long = &H4
Public Const FILE_MAP_READ As Long = SECTION_MAP_READ
Public Const FILE_SHARE_READ As Long = &H1
Public Const GENERIC_READ As Long = &H80000000
Public Const OPEN_EXISTING As Long = 3
Public Const PAGE_EXECUTE_READWRITE As Long = &H40
Public Const PAGE_READONLY As Long = &H2
Public Const SEC_IMAGE As Long = &H1000000
Public Const INVALID_HANDLE_VALUE As Long = (-1)
Public Function MapFile(ByVal szFilePath As String, ByRef bytMemoryToLoad() As Byte) As Boolean
On Error GoTo MapFile_Err_Hdl
MapFile = False
Dim hFile As Long, dwSize As Long, hMapFile As Long, lpBaseMap As Long
hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile = INVALID_HANDLE_VALUE Then
GoTo MapFile_Err_Hdl
End If
dwSize = GetFileSize(hFile, 0)
hMapFile = CreateFileMapping(hFile, ByVal 0&, PAGE_READONLY Or SEC_IMAGE, 0, dwSize, 0)
lpBaseMap = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, dwSize)
Call CopyMemory(VarPtr(bytMemoryToLoad(0)), lpBaseMap, dwSize)
UnmapViewOfFile lpBaseMap
CloseHandle (hMapFile)
CloseHandle (hFile)
MapFile = True
MapFile_Err_Hdl:
MapFile = MapFile Or False
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -