이 기사에 설명된 예제는 메모리, 스레드 및 핸들을 읽는 VB용 API로, 시스템의 기본 작업과 관련된 VB 프로그래밍에 도움이 됩니다. 이 API는 스레드 ID, 프로세스 핸들을 포함한 쓰기 메모리, ByVal 메모리 영역 주소, 데이터, 전체 길이, 완료된 길이 및 프로세스 핸들, ByVal 메모리 영역 주소 및 읽기 데이터의 저장 위치를 포함한 읽기 프로세스를 얻을 수 있습니다. 읽을 길이, 읽은 길이, 메모리 할당(프로세스 핸들, 주소 [그냥 0이면 충분할 것 같습니다], 길이, 권한 1 [MEM_COMMIT], 권한 2 [PAGE_READWRITE]) 반환: 할당된 메모리는 시작 주소 및 기타 기능을 시작합니다.
구체적인 구현 코드는 다음과 같습니다.
속성 VB_Name = "API"Option ExplicitPublic 선언 함수 GetDesktopWindow Lib "User32.DLL"() As LongPublic 선언 함수 FindWindow Lib "User32.DLL" 별칭 "FindWindowA"(ByVal ClassName As String, ByVal Caption As String) As LongPublic Declare 함수 GetWindow Lib "User32.DLL"(ByVal hwnd As Long, ByVal wCmd As Long) As LongPublic 선언 함수 GetWindowText Lib "User32.DLL" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongPublic Const GW_CHILD = (5)Public Const GW_HWNDNEXT = ( 2) 공개 선언 함수 GetWindowThreadProcessId Lib "User32.DLL"(ByVal hwnd As Long, ProcessId As Long) 스레드 ID 가져오기(핸들, 반환된 스레드 ID) Public 선언 함수 OpenProcess Lib "Kernel32.DLL"(ByVal 작업 권한 As Long, ByVal 상속 핸들 As Long , ByVal 스레드 ID는 LongPublic으로 ReadProcessMemory Lib "Kernel32.DLL" 함수를 선언합니다(ByVal 프로세스 핸들 As Long, ByVal 메모리 위치 As Long, 버퍼 As Any, ByVal 길이 As Long, lpNumberOfBytesWritten As Long'Read 프로세스(프로세스 핸들, ByVal 메모리 영역 주소, 읽기 데이터 저장 위치, 읽을 길이, 읽은 길이 [0]) 공개 선언 함수 WriteProcessMemory Lib "Kernel32.DLL"(ByVal 프로세스 핸들 As Long, 메모리 위치 As Any, Buffer As Any, ByVal 길이 As Long, lpNumberOfBytesWritten As Long'Write 메모리(프로세스 핸들, ByVal 메모리 영역 주소, 데이터, 전체 길이, 완료된 길이 [0]) Public 선언 함수 CloseHandle Lib "Kernel32.DLL"(ByVal 프로세스 핸들 As Long) '해제(프로세스 핸들)'가 해제되지 않으면 오류가 발생합니다. Public Const STANDARD_RIGHTS_REQUIRED = &HF0000Public Const SYNCHRONIZE = &H100000Public Const RRAD_WRITE = &H1F0FFFPublic Const PROCESS_VM_OPERATION = &H8&Public Const Read = &H10&Public Const Write = &H20&'---------변수 변환APIPublic 선언 하위 MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (변수 1 As Any, Variable 2 As Any, ByVal Length As Long)'---------메모리 보호 할당 해제 공개 선언 기능 VPE Lib "Kernel32.DLL" Alias " VirtualProtectEx"(ByVal 프로세스 핸들 길이, 주소 길이, ByVal 길이 길이, ByVal flNewProtect 길이, lpflOldProtect 길이) As LongPublic 함수 VAE Lib "Kernel32.DLL" 별칭 "VirtualAllocEx"(ByVal 프로세스 핸들 As Long, ByVal 주소 As Long, ByVal 길이 As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As 선언 Long' 메모리 할당(프로세스 핸들, 주소[충분한 것 같으면 0만 삭제], 길이, 권한 1[MEM_COMMIT], 권한 2[PAGE_READWRITE]) 반환: 할당된 메모리 시작 주소 Public Declare Function VFE Lib "Kernel32 .DLL" 별칭 "VirtualFreeEx"(ByVal 프로세스 핸들 As Long, ByVal 주소 As Long, ByVal 길이 As Long, ByVal 릴리스 유형 As Long) Const MEM_COMMIT = &H1000Public Const PAGE_READWRITE = &H4Public Const STILL_ACTIVE = &H103&Public Const INFINITE = &HFFFF'---------모듈 함수 위치 가져오기 APIPublic 선언 함수 GetModuleHandle Lib "Kernel32.DLL" 별칭 "GetModuleHandleA" (ByVal ModuleName As 문자열) LongPublic으로 LoadLibrary Lib "Kernel32.DLL" 별칭 "LoadLibraryA"(ByVal ModuleName As String) As LongPublic 선언 함수 GetProcAddress Lib "Kernel32.DLL"(ByVal hModule As Long, ByVal ProcName As String) As LongPublic 선언 함수 CreateRemoteThread Lib " Kernel32.DLL"(ByVal 프로세스 핸들 Long, lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadID As LongPublic 선언 함수 GetTickCount Lib "kernel32" () As Long