Imports System.Runtime.InteropServices

Public Class ClassWindowsAPINativeMethods
    <DllImport("kernel32.dll")>
    Public Shared Function OpenProcess(ByVal dwDesiredAccess As UInteger, ByVal bInheritHandle As Boolean, ByVal dwProcessId As UInteger) As IntPtr
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function VirtualAllocEx(ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByVal dwSize As UIntPtr, ByVal flAllocationType As UInteger, ByVal flProtect As PageProtection) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True)>
    Public Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, <Out> ByRef lpdwProcessId As UInteger) As UInteger
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function VirtualFreeEx(ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByVal dwSize As UIntPtr, ByVal dwFreeType As UInteger) As Boolean
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function CloseHandle(ByVal hObject As IntPtr) As Boolean
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function MapViewOfFile(ByVal hFileMappingObject As IntPtr, ByVal dwDesiredAccess As UInteger, ByVal dwFileOffsetHigh As UInteger, ByVal dwFileOffsetLow As UInteger, ByVal dwNumberOfBytesToMap As UIntPtr) As IntPtr
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function UnmapViewOfFile(ByVal lpBaseAddress As IntPtr) As Boolean
    End Function
    <DllImport("kernel32.dll", SetLastError:=True)>
    Public Shared Function CreateFileMapping(ByVal hFile As IntPtr, ByVal lpFileMappingAttributes As IntPtr, ByVal flProtect As PageProtection, ByVal dwMaximumSizeHigh As Integer, ByVal dwMaximumSizeLow As Integer, ByVal lpName As String) As IntPtr
    End Function
    <DllImport("user32.dll")>
    Public Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    <DllImport("kernel32.dll")>
    Public Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr,
    <Out> ByVal lpBuffer As Byte(), ByVal nSize As UIntPtr, ByVal lpNumberOfBytesRead As IntPtr) As Boolean
    End Function
    <DllImport("Kernel32.dll", EntryPoint:="RtlMoveMemory", SetLastError:=False)>
    Public Shared Sub MoveMemoryFromByte(ByVal dest As IntPtr, ByRef src As Byte, ByVal size As Integer)
    End Sub
    <DllImport("Kernel32.dll", EntryPoint:="RtlMoveMemory", SetLastError:=False)>
    Public Shared Sub MoveMemoryToByte(ByRef dest As Byte, ByVal src As IntPtr, ByVal size As Integer)
    End Sub
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    Public Shared Function RegisterWindowMessage(ByVal lpString As String) As Integer
    End Function

    Public Const STANDARD_RIGHTS_REQUIRED As Integer = &HF0000
    Public Const SECTION_QUERY As Short = &H1
    Public Const SECTION_MAP_WRITE As Short = &H2
    Public Const SECTION_MAP_READ As Short = &H4
    Public Const SECTION_MAP_EXECUTE As Short = &H8
    Public Const SECTION_EXTEND_SIZE As Short = &H10
    Public Const SECTION_ALL_ACCESS As Integer = STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE
    Public Const FILE_MAP_ALL_ACCESS As Integer = SECTION_ALL_ACCESS
    Public Const PROCESS_VM_OPERATION As Short = &H8
    Public Const PROCESS_VM_READ As Short = &H10
    Public Const PROCESS_VM_WRITE As Short = &H20
    Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
    Public Const MEM_COMMIT As Short = &H1000
    Public Const MEM_RESERVE As Short = &H2000
    Public Const MEM_DECOMMIT As Short = &H4000
    Public Const MEM_RELEASE As Integer = &H8000
    Public Const MEM_FREE As Integer = &H10000
    Public Const MEM_PRIVATE As Integer = &H20000
    Public Const MEM_MAPPED As Integer = &H40000
    Public Const MEM_TOP_DOWN As Integer = &H100000
    Public Const INVALID_HANDLE_VALUE As Integer = -1

    Public Enum PageProtection As UInteger
        NoAccess = &H1
        [Readonly] = &H2
        ReadWrite = &H4
        WriteCopy = &H8
        Execute = &H10
        ExecuteRead = &H20
        ExecuteReadWrite = &H40
        ExecuteWriteCopy = &H80
        Guard = &H100
        NoCache = &H200
        WriteCombine = &H400
    End Enum


End Class
