Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 23

Проблема с функцией SetThreadContext

15.11.2018, 21:58. Показов 1317. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, никак не получается завершить сторонний процесс при помощи функции SetThreadContext, помогите пожалуйста решить проблему.
Предоставляю недоработанный код:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<DllImport("kernel32.dll")> _
Private Shared Function GetThreadContext(ByVal hThread As IntPtr, ByRef lpContext As CONTEXT) As Boolean
End Function
 
<DllImport("kernel32.dll")> _
Private Shared Function SetThreadContext(ByVal hThread As IntPtr, ByRef lpContext As CONTEXT) As Boolean
End Function
 
Private Declare Function Thread32Next Lib "KERNEL32.dll" (ByVal hSnapshot As Integer, ByRef lpte As THREADENTRY32) As Integer
 
<DllImport("Kernel32", EntryPoint:="GetModuleHandleA", ExactSpelling:=True, CharSet:=CharSet.Ansi, SetLastError:=True)>
    Private Shared Function GetModuleHandle(ByVal lpModuleName As String) As Integer
    End Function
 
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
        (ByVal dwFlags As SnapshotFlags, ByVal th32ProcessID As UInteger) As IntPtr
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As IntPtr, _
                                                ByRef lppe As PROCESSENTRY32) As Boolean
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As IntPtr, _
                                                ByRef lppe As PROCESSENTRY32) As Boolean
 
Public Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As ThreadAccess, ByVal bInheritHandle As Boolean, ByVal dwThreadId As UInteger) As IntPtr
 
Public Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
    Public Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
 
Public Declare Function CloseHandle Lib "KERNEL32" _
    (ByVal hObject As Int32) _
    As Boolean
 
Private Const STANDARD_RIGHTS_REQUIRED2 = &HF0000
Private Const SYNCHRONIZE = &H100000
Private Const THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED2 Or SYNCHRONIZE Or &H3FF
 
<StructLayout(LayoutKind.Sequential)> _
    Public Structure CONTEXT
 
 
        Public ContextFlags As UInteger
        'set this to an appropriate value
        ' Retrieved by CONTEXT_DEBUG_REGISTERS
        Public Dr0 As UInteger
        Public Dr1 As UInteger
        Public Dr2 As UInteger
        Public Dr3 As UInteger
        Public Dr6 As UInteger
        Public Dr7 As UInteger
        ' Retrieved by CONTEXT_FLOATING_POINT
        Public FloatSave As FLOATING_SAVE_AREA
        ' Retrieved by CONTEXT_SEGMENTS
        Public SegGs As UInteger
        Public SegFs As UInteger
        Public SegEs As UInteger
        Public SegDs As UInteger
        ' Retrieved by CONTEXT_INTEGER
        Public Edi As UInteger
        Public Esi As UInteger
        Public Ebx As UInteger
        Public Edx As UInteger
        Public Ecx As UInteger
        Public Eax As UInteger
        ' Retrieved by CONTEXT_CONTROL
        Public Ebp As UInteger
        Public Eip As UInteger
        Public SegCs As UInteger
        Public EFlags As UInteger
        Public Esp As UInteger
        Public SegSs As UInteger
        Public Rip As UInteger
        ' Retrieved by CONTEXT_EXTENDED_REGISTERS
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=512)> _
        Public ExtendedRegisters As Byte()
 
    End Structure
 
Public Enum CONTEXT_FLAGS As UInteger
        CONTEXT_i386 = &H10000
        CONTEXT_i486 = &H10000
        CONTEXT_CONTROL = CONTEXT_i386 Or &H1
        CONTEXT_INTEGER = CONTEXT_i386 Or &H2
        CONTEXT_SEGMENTS = CONTEXT_i386 Or &H4
        CONTEXT_FLOATING_POINT = CONTEXT_i386 Or &H8
        CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 Or &H10
        CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 Or &H20
        CONTEXT_FULL = CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS
        CONTEXT_ALL = CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS Or CONTEXT_FLOATING_POINT Or 
        CONTEXT_DEBUG_REGISTERS Or CONTEXT_EXTENDED_REGISTERS
    End Enum
 
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
    Public Structure THREADENTRY32
        Friend dwSize As UInt32
        Friend cntUsage As UInt32
        Friend th32ThreadID As UInt32
        Friend th32OwnerProcessID As UInt32
        Friend tpBasePri As UInt32
        Friend tpDeltaPri As UInt32
        Friend dwFlags As UInt32
    End Structure
 
Public Structure PROCESSENTRY32
        Public dwSize As UInt32
        Public cntUsage As UInt32
        Public th32ProcessID As UInt32
        Public th32DefaultHeapID As IntPtr
        Public th32ModuleID As UInt32
        Public cntThreads As UInt32
        Public th32ParentProcessID As UInt32
        Public pcPriClassBase As UInt32
        Public dwFlags As Int32
        <VBFixedString(260), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
        Public szExeFile As String
    End Structure
 
        For Each p As Process In Process.GetProcessesByName("taskmgr")
            Const TH32CS_SNAPTHREAD = &H4
            Dim ctx As New CONTEXT()
            ctx.ContextFlags = CONTEXT_FLAGS.CONTEXT_ALL
            Dim k32 As IntPtr = GetModuleHandle("Kernel32")
            Dim te32 As New THREADENTRY32()
            Dim pe32 As New PROCESSENTRY32()
            te32.dwSize = Marshal.SizeOf(te32)
            pe32.dwSize = Marshal.SizeOf(pe32)
            Dim hSnap As IntPtr = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
            If Process32First(hSnap, pe32) Then
                While Thread32Next(hSnap, te32)
                    If p.Id = te32.th32OwnerProcessID Then
                        Dim hThread As IntPtr = OpenThread(THREAD_ALL_ACCESS, False, te32.th32ThreadID)
                        SuspendThread(hThread)
                        GetThreadContext(hThread, ctx)
                        ctx.Eip = CUInt(GetProcAddress(k32, "ExitProcess"))
                        SetThreadContext(hThread, ctx)
                        ResumeThread(hThread)
                        CloseHandle(hThread)
                        CloseHandle(hSnap)
                    End If
                End While
            End If
        Next
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2018, 21:58
Ответы с готовыми решениями:

Проблема с функцией
Скажите как ее решить код ненадо хотябы строчку этой функции как будет выглядить

Проблема с функцией
Всем привет. Делая небольшой проект, натыкаюсь на некую проблему с присваиванием. Вот код для исследования моей проблемы: list_list =...

Проблема с функцией
def(x, y): i = 0 while i != y: cls() n1 = random.randint(1, x) n2 = random.randint(1, x) ...

1
63 / 48 / 12
Регистрация: 28.12.2014
Сообщений: 270
16.11.2018, 05:30
1. Ветка форума для Visual basic не .Net.
2. GetProcAddress получает адрес функции в АП вызывающего процесса. Для терминируемого процесса полученный адрес содержит произвольные данные.
3. Нужно проверить, что через SetThreadContext можно изменить содержимое регистра - указателя инструкции.
4. Нужно протестировать последовательно каждую операцию, убедится в том, что все этапы работоспособны. Больше конкретики - лучше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2018, 05:30
Помогаю со студенческими работами здесь

Проблема с функцией Find
Здраствуйте. Я в программировании на VBA в Excel - новичок. Подскажите пожалуйста, почему функция Find не находит искомое значение в...

проблема с функцией pow()
Доброе времени суток. Возникла проблема при использовании pow(). for(int n = 1; n &lt; 20; n++) { ...

Проблема с функцией STRLEN()
Люди помоги ПЛИИИЗЗЗ .... Такой глюк: Передаю закодированный текст в escape формате, декодирую в текстовый формат Unicode, когда измеряю...

Проблема с функцией FFT
Добрый день! Делал работы по модуляции сигнала.Требуется построить график.Необходимо было воспользоваться быстрым преобразованием...

Проблема с функцией ReadKey
Здравствуйте. Я делаю игру на WinGraph и столкнулся с проблемой. Функция ReadKey в модуле WinCRT возвращает последнюю нажатую клавишу на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru