Fake more System::Call functions under ARM64
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7003 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
fc8c70f856
commit
eb1271f216
1 changed files with 24 additions and 5 deletions
|
@ -292,14 +292,13 @@ PLUGINFUNCTION(Get)
|
||||||
#ifdef SYSTEM_ARM64
|
#ifdef SYSTEM_ARM64
|
||||||
/*
|
/*
|
||||||
TODO: CallProc not implemeted.
|
TODO: CallProc not implemeted.
|
||||||
Fake the behavior of the System plugin for the LoadImage API function so MUI works.
|
Fake the behavior of the System plugin for the LoadImage API function etc. so MUI works.
|
||||||
BUGBUG: MUI is leaking DeleteObject and failing GetClientRect
|
BUGBUG: MUI is leaking DeleteObject
|
||||||
*/
|
*/
|
||||||
SystemProc* CallProc(SystemProc *proc)
|
SystemProc* CallProc(SystemProc *proc)
|
||||||
{
|
{
|
||||||
INT_PTR ret, *place;
|
INT_PTR ret, *place;
|
||||||
int cmp = lstrcmp(proc->ProcName, sizeof(TCHAR) > 1 ? _T("LoadImageW") : _T("LoadImageA"));
|
if (!lstrcmp(proc->ProcName, sizeof(TCHAR) > 1 ? _T("LoadImageW") : _T("LoadImageA")))
|
||||||
if (!cmp)
|
|
||||||
{
|
{
|
||||||
ret = (INT_PTR) LoadImage((HINSTANCE)proc->Params[1].Value,
|
ret = (INT_PTR) LoadImage((HINSTANCE)proc->Params[1].Value,
|
||||||
(LPCTSTR)proc->Params[2].Value, (UINT)proc->Params[3].Value,
|
(LPCTSTR)proc->Params[2].Value, (UINT)proc->Params[3].Value,
|
||||||
|
@ -307,10 +306,30 @@ SystemProc* CallProc(SystemProc *proc)
|
||||||
(UINT)proc->Params[6].Value);
|
(UINT)proc->Params[6].Value);
|
||||||
LastError = GetLastError();
|
LastError = GetLastError();
|
||||||
}
|
}
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("GetClientRect")))
|
||||||
|
ret = GetClientRect((HWND)proc->Params[1].Value, (RECT*)proc->Params[2].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("GetWindowRect")))
|
||||||
|
ret = GetWindowRect((HWND)proc->Params[1].Value, (RECT*)proc->Params[2].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("MapWindowPoints")))
|
||||||
|
ret = MapWindowPoints((HWND)proc->Params[1].Value, (HWND)proc->Params[2].Value, (POINT*)proc->Params[3].Value, (UINT)proc->Params[4].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("SetWindowPos")))
|
||||||
|
ret = SetWindowPos((HWND)proc->Params[1].Value, (HWND)proc->Params[2].Value, (int)proc->Params[3].Value, (int)proc->Params[4].Value, (int)proc->Params[5].Value, (int)proc->Params[6].Value, (UINT)proc->Params[7].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("GetWindowLong")))
|
||||||
|
ret = GetWindowLong((HWND)proc->Params[1].Value, (int)proc->Params[2].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("SetWindowLong")))
|
||||||
|
ret = SetWindowLong((HWND)proc->Params[1].Value, (int)proc->Params[2].Value, (LONG)proc->Params[3].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("GetWindowText")))
|
||||||
|
ret = GetWindowText((HWND)proc->Params[1].Value, (LPTSTR)proc->Params[2].Value, (int)proc->Params[3].Value);
|
||||||
|
else if (!lstrcmp(proc->ProcName, _T("SendMessageA")))
|
||||||
|
ret = SendMessageA((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("SendMessage")) || !lstrcmp(proc->ProcName, _T("SendMessageW")))
|
||||||
|
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("GetNativeSystemInfo"))) // For x64:GetNativeProcessorArchitecture
|
||||||
|
GetNativeSystemInfo((SYSTEM_INFO*)(ret = proc->Params[1].Value));
|
||||||
else
|
else
|
||||||
proc->ProcResult = PR_ERROR, ret = 0, LastError = ERROR_INVALID_FUNCTION;
|
proc->ProcResult = PR_ERROR, ret = 0, LastError = ERROR_INVALID_FUNCTION;
|
||||||
place = (INT_PTR*) proc->Params[0].Value;
|
place = (INT_PTR*) proc->Params[0].Value;
|
||||||
if (proc->Params[0].Option != -1) place = (INT_PTR*) &(proc->Params[0].Value);
|
if (!ParamIsPointer(proc->Params[0])) place = (INT_PTR*) &(proc->Params[0].Value);
|
||||||
if (place) *place = ret;
|
if (place) *place = ret;
|
||||||
return proc;
|
return proc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue