musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Всем доброго.
Столкнулся с непредвиденной трудностью. Создаю структуру данных для передачи другому процессу и получаю ошибку от функции
Столкнулся с непредвиденной трудностью. Создаю структуру данных для передачи другому процессу и получаю ошибку от функции
_WinAPI_DisplayStruct
— «the memory range allocated to a given structure could not be read» (собвственно в загаловке темы). Если не использовать эту функцию, то скрипт просто молча падает. Внутри процесса, память и структура читаются, в другом процессе — не может, при обращении к $tText.Text
падает. Одна ремарка: процесс-приемник создается с повышенными правами (runas), но это у меня никогда не вызывало проблем в других моих работах.
Код:
Global Const $tagCOPYDATASTRUCT = 'ulong_ptr dwData;dword cbData;ptr lpData'
Процесс-передатчик:
Local $string = _ArrayToString($aList, '|', -1, -1, ':::') ; массив, который нужно передать, конвертируем в строку
Local $MapFile = _WinAPI_CreateFileMapping(-1, 40960, 'MappingArray')
Local $PosFile = _WinAPI_MapViewOfFile($MapFile)
Local $tCOPYDATASTRUCT = DllStructCreate($tagCOPYDATASTRUCT, $PosFile)
Local $iLength = StringLen($string)
Local $tText = DllStructCreate('wchar Text[' & ($iLength + 1) & ']')
$tCOPYDATASTRUCT.dwData = $i
$tText.Text = $string
$tCOPYDATASTRUCT.cbData = DllStructGetSize($tText)
$tCOPYDATASTRUCT.lpData = DllStructGetPtr($tText)
Local $result = ShellExecute(@AutoItExe, '...', '', 'runas')
Процесс-приемник:
Local $PosFile = _WinAPI_MapViewOfFile(_WinAPI_OpenFileMapping('MappingArray'))
Local $tCOPYDATASTRUCT = DllStructCreate($tagCOPYDATASTRUCT, $PosFile)
Local $i = $tCOPYDATASTRUCT.dwData
Local $tText = DllStructCreate('wchar Text[' & ($tCOPYDATASTRUCT.cbData / 2) & ']', $tCOPYDATASTRUCT.lpData)
_WinAPI_DisplayStruct($tText)
Local $string = $tText.Text
Local $data = StringSplit($string, ':::', 1)
For $j = 1 To $data[0]
_ArrayAdd($fList, $data[$j])
Next
_ArrayDisplay($fList)
Последнее редактирование: