⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmapfileintomemory.bas

📁 使用底层技术结束进程。The use of the underlying technology end of the process.
💻 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 + -