Iczer Posted January 12, 2017 Share Posted January 12, 2017 I wanted to make IPC between 2 autoit scripts via shared in memory dll structure so both scripts can read/write in it. But it not works as i coded it - it seems is access rights issue. What i can do about it? Script_A: #AutoIt3Wrapper_UseX64=y #include-once #include <WinAPISys.au3> #include <Memory.au3> ;========================================================================================== $tagInfo = "struct;HWND hMainHandle;WORD iID;WCHAR Line[512];endstruct" ;========================================================================================== ConsoleWrite($tagInfo & @CRLF) $tInfo = DllStructCreate($tagInfo) If @error Then MsgBox(64,"DllStructCreate","@error = "&@error) $tInfo.Line = "ksifjvnskfjvnzaksfjvnskalfjvnaKLJSNLKDvsdvsdcvsc vn" If @error Then MsgBox(64,"DllStructSetData","@error = "&@error) $ptrInfo = DllStructGetPtr ($tInfo) $sizeInfo = DllStructGetSize($tInfo) $hGMem = _MemGlobalAlloc($sizeInfo, $GMEM_MOVEABLE) $ptrGMem = _MemGlobalLock($hGMem) _MemMoveMemory($ptrInfo, $ptrGMem, $sizeInfo) _MemGlobalUnlock ($hGMem) RunWait("Script_B.exe " & String($ptrInfo) & " " & $sizeInfo) RunWait("Script_B.exe " & String($ptrGMem) & " " & $sizeInfo) Exit Script_B: #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include-once #include <WinAPISys.au3> ;========================================================================================== $tagInfo = "struct;HWND hMainHandle;WORD iID;WCHAR Line[512];endstruct" ;========================================================================================== $ptrInfo = Ptr($CmdLine[1]) $sizeInfo = Int($CmdLine[2]) $tInfo = DllStructCreate($tagInfo, $ptrInfo) If @error Then MsgBox(64,"DllStructCreate",@error) MsgBox(64,"Script_B.1", "Struct Pointer : " & Ptr($CmdLine[1])& @CRLF & _ "IsPtr() = " & IsPtr($ptrInfo)& @CRLF & _ "Struct Size = " & $sizeInfo & @CRLF & _ "_WinAPI_IsBadReadPtr() = " & _WinAPI_IsBadReadPtr($ptrInfo, $sizeInfo) & @CRLF & _ "_WinAPI_IsBadWritePtr() = " & _WinAPI_IsBadWritePtr($ptrInfo, $sizeInfo)) MsgBox(64,"Script_B.2", "String Recieved : " & $tInfo.Line) Exit Link to comment Share on other sites More sharing options...
AndyG Posted January 12, 2017 Share Posted January 12, 2017 could be done this way... #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include-once #include <WinAPISys.au3> ;========================================================================================== $tagInfo = "struct;HWND hMainHandle;WORD iID;WCHAR Line[512];endstruct" ;========================================================================================== $ptrInfo = Ptr($CmdLine[1]) $sizeInfo = Int($CmdLine[2]) $tInfo = DllStructCreate($tagInfo) $tptr=dllstructgetptr($tinfo) $tsize=DllStructGetSize($tinfo) If @error Then MsgBox(64,"DllStructCreate",@error) $pid=Processwait("Script_A.exe") $process = _WinAPI_OpenProcess(0xFFFF, False, $pid) $bytes=0 $a=_WinAPI_ReadProcessMemory($process,$ptrInfo,$tptr,$tsize,$bytes) MsgBox(64,"Script_B.1", "Struct Pointer : " & Ptr($CmdLine[1])& @CRLF & _ "IsPtr() = " & IsPtr($ptrInfo)& @CRLF & _ "Struct Size = " & $sizeInfo & @CRLF & _ "_WinAPI_IsBadReadPtr() = " & _WinAPI_IsBadReadPtr($ptrInfo, $sizeInfo) & @CRLF & _ "_WinAPI_IsBadWritePtr() = " & _WinAPI_IsBadWritePtr($ptrInfo, $sizeInfo)) MsgBox(64,"Script_B.2", "String Recieved : " & $tInfo.Line) Exit Link to comment Share on other sites More sharing options...
Iczer Posted January 12, 2017 Author Share Posted January 12, 2017 hmm... _WinAPI_IsBadReadPtr() _WinAPI_IsBadReadPtr() still "1" but if debug privileges $bDebugPriv = True in _WinAPI_OpenProcess() then it works and second MsgBox() return string from "Line" Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now