Added more System::Call emulation functions for x64.nsh on ARM[64]

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7018 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2018-10-13 20:15:31 +00:00
parent 48378dc131
commit 51d7471805

View file

@ -326,9 +326,28 @@ SystemProc* CallProc(SystemProc *proc)
ret = SendMessageW((HWND)proc->Params[1].Value, (UINT)proc->Params[2].Value, (WPARAM)proc->Params[3].Value, (LPARAM)proc->Params[4].Value);
else if (!lstrcmp(proc->ProcName, _T("GetVersionEx"))) // For winver
ret = GetVersionEx((OSVERSIONINFO*)proc->Params[1].Value), LastError = GetLastError();
else if (!lstrcmp(proc->ProcName, _T("GetNativeSystemInfo"))) // For x64:GetNativeProcessorArchitecture
else if (!lstrcmp(proc->ProcName, _T("GetNativeSystemInfo")))
GetNativeSystemInfo((SYSTEM_INFO*)(ret = proc->Params[1].Value));
else
else if (!lstrcmp(proc->ProcName, _T("CharNextW"))) // For x64
ret = (INT_PTR) CharNextW((LPWSTR)proc->Params[1].Value);
else if (!lstrcmp(proc->ProcName, _T("GetCurrentProcess"))) // For x64
ret = (INT_PTR) GetCurrentProcess();
else if (!lstrcmp(proc->ProcName, _T("IsWow64Process"))) // For x64
{
if (!(ret = (INT_PTR) GetProcAddress(LoadLibrary(_T("KERNEL32")), "IsWow64Process"))) goto fail;
ret = ((BOOL(WINAPI*)(HANDLE,BOOL*))ret)((HANDLE)proc->Params[1].Value, (BOOL*)proc->Params[2].Value);
}
else if (!lstrcmp(proc->ProcName, _T("IsWow64Process2"))) // For x64
{
if (!(ret = (INT_PTR) GetProcAddress(LoadLibrary(_T("KERNEL32")), "IsWow64Process2"))) goto fail;
ret = ((BOOL(WINAPI*)(HANDLE,USHORT*,USHORT*))ret)((HANDLE)proc->Params[1].Value, (USHORT*)proc->Params[2].Value, (USHORT*)proc->Params[3].Value);
}
else if (!lstrcmp(proc->ProcName, _T("Wow64EnableWow64FsRedirection"))) // For x64
{
if (!(ret = (INT_PTR) GetProcAddress(LoadLibrary(_T("KERNEL32")), "Wow64EnableWow64FsRedirection"))) goto fail;
ret = ((BYTE(WINAPI*)(BYTE))ret)((BYTE)proc->Params[1].Value);
}
else fail:
proc->ProcResult = PR_ERROR, ret = 0, LastError = ERROR_INVALID_FUNCTION;
place = (INT_PTR*) proc->Params[0].Value;
if (!ParamIsPointer(proc->Params[0])) place = (INT_PTR*) &(proc->Params[0].Value);