Ну как это делает тот же ФАР, или Process Explorer??GSerg писал(а):Никак нельзя узнать переменные другого процесса. Можно свои и системные. Последние в реестре.
typedef struct _PEB {
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA LoaderData;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PPEBLOCKROUTINE FastPebLockRoutine;
PPEBLOCKROUTINE FastPebUnlockRoutine;
ULONG EnvironmentUpdateCount;
PPVOID KernelCallbackTable;
PVOID EventLogSection;
PVOID EventLog;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[0x2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PPVOID ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
BYTE Spare2[0x4];
LARGE_INTEGER CriticalSectionTimeout;
ULONG HeapSegmentReserve;
ULONG HeapSegmentCommit;
ULONG HeapDeCommitTotalFreeThreshold;
ULONG HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PPVOID *ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
PVOID GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
ULONG OSBuildNumber;
ULONG OSPlatformId;
ULONG ImageSubSystem;
ULONG ImageSubSystemMajorVersion;
ULONG ImageSubSystemMinorVersion;
ULONG GdiHandleBuffer[0x22];
ULONG PostProcessInitRoutine;
ULONG TlsExpansionBitmap;
BYTE TlsExpansionBitmapBits[0x80];
ULONG SessionId;
} PEB, *PPEB;
typedef struct _RTL_USER_PROCESS_PARAMETERS {
ULONG MaximumLength;
ULONG Length;
ULONG Flags;
ULONG DebugFlags;
PVOID ConsoleHandle;
ULONG ConsoleFlags;
HANDLE StdInputHandle;
HANDLE StdOutputHandle;
HANDLE StdErrorHandle;
UNICODE_STRING CurrentDirectoryPath;
HANDLE CurrentDirectoryHandle;
UNICODE_STRING DllPath;
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
PVOID Environment;
ULONG StartingPositionLeft;
ULONG StartingPositionTop;
ULONG Width;
ULONG Height;
ULONG CharWidth;
ULONG CharHeight;
ULONG ConsoleTextAttributes;
ULONG WindowFlags;
ULONG ShowWindowFlags;
UNICODE_STRING WindowTitle;
UNICODE_STRING DesktopName;
UNICODE_STRING ShellInfo;
UNICODE_STRING RuntimeData;
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
RTL_USER_PROCESS_PARAMETERS is located at address 0x20000 (for all processes created by call WIN32 API CreateProcess).
Option Explicit
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function NtQueryInformationProcess Lib "ntdll" (ByVal hProcess As Long, ByVal ProcessInformationClass As Long, ProcessInformation As Any, ByVal ProcessInformationLength As Long, ReturnLength As Long) As Long
Private Type PROCESS_BASIC_INFORMATION
ExitStatus As Long
PebBaseAddress As Long 'points to a structure too long to declare
AffinityMask As Long
BasePriority As Long
UniqueProcessId As Long
InheritedFromUniqueProcessId As Long
End Type
Private Type UNICODE_STRING
Length As Integer
MaximumLength As Integer
Buffer As Long
End Type
Private Type RTL_USER_PROCESS_PARAMETERS
MaximumLength As Long
Length As Long
Flags As Long
DebugFlags As Long
ConsoleHandle As Long
ConsoleFlags As Long
StdInputHandle As Long
StdOutputHandle As Long
StdErrorHandle As Long
CurrentDirectoryPath As UNICODE_STRING
CurrentDirectoryHandle As Long
DllPath As UNICODE_STRING
ImagePathName As UNICODE_STRING
CommandLine As UNICODE_STRING
Environment As Long
StartingPositionLeft As Long
StartingPositionTop As Long
Width As Long
Height As Long
CharWidth As Long
CharHeight As Long
ConsoleTextAttributes As Long
WindowFlags As Long
ShowWindowFlags As Long
WindowTitle As UNICODE_STRING
DesktopName As UNICODE_STRING
ShellInfo As UNICODE_STRING
RuntimeData As UNICODE_STRING
DLCurrentDirectory(1 To &H200) As Byte
End Type
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_READ = &H10
Private Sub Main()
Dim hWnd As Long, PID As Long, hProcess As Long
Dim pbi As PROCESS_BASIC_INFORMATION, dummy As Long
Dim ProcessParameters As Long, upp As RTL_USER_PROCESS_PARAMETERS
Dim EnvironmentStrings As String
hWnd = &H1B06C4 'hardcoded
If hWnd = 0 Then Exit Sub
GetWindowThreadProcessId hWnd, PID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID)
If hProcess = 0 Then Exit Sub
NtQueryInformationProcess hProcess, 0, pbi, Len(pbi), dummy
ReadProcessMemory hProcess, pbi.PebBaseAddress + 16, ProcessParameters, 4, dummy
ReadProcessMemory hProcess, ProcessParameters, upp, LenB(upp), dummy
EnvironmentStrings = String(65536, 0)
ReadProcessMemory hProcess, upp.Environment, ByVal StrPtr(EnvironmentStrings), 4096, dummy
CloseHandle hProcess
Dim v As Variant
For Each v In Split(EnvironmentStrings, vbNullChar)
If Len(v) Then Debug.Print v
Next
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8