Что нового

Неработает вызов VirtualAllocEx через структуру

Rivald

Новичок
Сообщения
61
Репутация
1
Есть 2 вопроса:
1)Почему вызов со структурой не работает?
2)Почему вызов без структуры выдает ошибку?
Код:
$PID = WinGetProcess("")
$open = DllCall("Kernel32.dll", "int", "OpenProcess", "int", 0x001F0FFF, "int", 1, "int", $PID)
$struct = DllStructCreate( _
"HWND hProcess;" & _
"ptr lpAddress;" & _
"ULONG_PTR dwSize;" & _
"DWORD flAllocationType;" & _
"DWORD flProtect;")
DllStructSetData($struct, 'hProcess', $open[0])
DllStructSetData($struct, 'lpAddress', 0)
DllStructSetData($struct, 'dwSize', 10)
DllStructSetData($struct, 'flAllocationType', 0x00001000)
DllStructSetData($struct, 'flProtect', 0x00400000)
$ptr = DllStructGetPtr($struct)
;$call = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "ptr", $ptr)
$call = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "HWND", $open[0], "ptr", 0, "ULONG_PTR", 10, "DWORD", 0x00001000, "DWORD", 0x00400000)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $call[0] & @CRLF & $error[0])
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Re: Вопрос по VirtualAllocEx

Rivald
А это работает?
Код:
_MemVirtualAllocEx
 
Автор
R

Rivald

Новичок
Сообщения
61
Репутация
1
Re: Вопрос по VirtualAllocEx

Так с первым вопросом я разобрался, последний параметр неправильный указал, надо было 0х40. А вот почему структура не работает - незнаю.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Re: Вопрос по VirtualAllocEx

Rivald
Сделал тестовый, структура создаётся. Избавился от магических чисел.
Код:
#include <Memory.au3>
#include <WinAPI.au3>

Global Const $MEM_PHYSICAL = 0x00400000

$iPid = WinGetProcess("")
$hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPid)
$struct = DllStructCreate("HWND hProcess;ptr lpAddress;ULONG_PTR dwSize;DWORD flAllocationType;DWORD flProtect")
DllStructSetData($struct, 'hProcess', $hProcess)
DllStructSetData($struct, 'lpAddress', 0)
DllStructSetData($struct, 'dwSize', 10)
DllStructSetData($struct, 'flAllocationType', $MEM_COMMIT)
DllStructSetData($struct, 'flProtect', $MEM_PHYSICAL)

MsgBox(0, 'Структура ' & VarGetType($struct), _
		DllStructGetData($struct, 'hProcess') & @LF & _
		DllStructGetData($struct, 'lpAddress') & @LF & _
		DllStructGetData($struct, 'dwSize') & @LF & _
		DllStructGetData($struct, 'flAllocationType') & @LF & _
		DllStructGetData($struct, 'flProtect'))

$ptr = DllStructGetPtr($struct)
$call = _MemVirtualAllocEx($hProcess, 0, 10, $MEM_COMMIT, $MEM_PHYSICAL)
$error = _WinAPI_GetLastError()
MsgBox(0, 'Память и Ошибки', $call & @CRLF & $error)
 
Автор
R

Rivald

Новичок
Сообщения
61
Репутация
1
Re: Вопрос по VirtualAllocEx

Код:
$error - 87

Структура у меня создавалась без проблем, только было тоже самое что и сейчас.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Вопрос по VirtualAllocEx

Rivald

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Вопрос по VirtualAllocEx" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Вопрос по VirtualAllocEx

Rivald сказал(а):
Структура у меня создавалась без проблем, только было тоже самое что и сейчас.

Последний параметр в функции неверный. Поставьте одно из $PAGE_... значений. И причем здесь вообще какая-то структура? Эта функция работает напрямую с параметрами.
 
Автор
R

Rivald

Новичок
Сообщения
61
Репутация
1
То есть использование структуры просто не предусмотрено у этой функции?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Rivald сказал(а):
То есть использование структуры просто не предусмотрено у этой функции?
А где вы вообще нашли упоминание о структуре. В MSDN все достаточно подробно написано про эту функцию.
 
Верх