TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1);
TEST(Buffer[0] == '$');
TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1);
- TEST(Buffer[0] == '\%');
+ TEST(Buffer[0] == '%');
TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1);
TEST(Buffer[0] == '^');
TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1);
static DWORD WINAPI
IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam)
{
- DWORD ret;
+ DWORD retval;
+#ifdef __GNUC__
asm volatile
(
"pushfl;" // Save flags
"rep movsd;" // Copy params to the stack
"call *%%edx;" // Call function
"popfl;" // Restore flags
- : "=a" (ret)
+ : "=a" (retval)
: "S" (pFirstParam), "c" (cParams), "d"(proc)
: "%edi"
);
-
- return ret;
+#else
+ __asm
+ {
+ pushf
+ mov eax, cParams
+ shl eax, 2
+ sub esp, eax
+ mov edi, esp
+ cld
+ rep movsd
+ call proc
+ mov retval, eax
+ popf
+ };
+#endif
+
+ return retval;
}
DWORD
Syscall(LPWSTR pszFunction, int cParams, void* pParams)
{
char szFunctionName[MAX_PATH];
+ FARPROC proc;
sprintf(szFunctionName, "%ls", pszFunction);
- FARPROC proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);
+ proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);
if (!proc)
{
printf("Couldn't find proc: %s\n", szFunctionName);
VOID
HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam)
{
- RECT rect;
+ RECT rect = *(RECT*)lParam;
TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */
SendMessage(handle,Msg,wParam,lParam);
{
struct
{
- /* nothing */
+ HANDLE Dummy;
} Test1;
struct
{