Как правильно определить текукщую раскладку клавиатуры в R0

Тема в разделе "WASM.NT.KERNEL", создана пользователем 0xFox, 29 янв 2010.

  1. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Уважаемые, подскажите пожалуйста что я делаю не так и как можно выйти из ситуации.

    Написал обработчик перехвата TranslateMessage из шадоу таблицы

    Код (Text):
    1. BOOL MyNtUserTranslateMessage( LPMSG lpMsg, HKL dwhkl)
    2. {
    3.     BOOL result;
    4.     CCHAR keys[260];
    5.     WCHAR chr[10];
    6.     ULONG res;
    7.  
    8.     result= g_OriginalNtUserTranslateMessage(lpMsg,dwhkl);
    9.     memset(keys,0,sizeof(keys)*sizeof(CCHAR));
    10.  
    11.     if (lpMsg->message == WM_KEYDOWN)
    12.     {
    13.             res = g_NtUserGetKeyboardState((LPBYTE)keys);
    14.                    res = g_NtUserToUnicodeEx( lpMsg->wParam,
    15.                              lpMsg->lParam,
    16.                             (LPBYTE)keys,
    17.                             (LPWSTR)&chr,
    18.                             10,0,dwhkl);
    19.  
    20.         DbgPrint("chr = %S, res = %x",chr,res);
    21.  
    22.         DbgPrint("lpMsg->wParam = %c (0x%x), HKL = %x, lpMsg->lParam =%x, HWND = 0x%x \n",
    23.                   lpMsg->wParam,
    24.                   lpMsg->wParam,
    25.                   dwhkl,
    26.                   lpMsg->lParam,
    27.                   lpMsg->hwnd);
    28.  
    29.     }
    30.     return result;
    31. }
    Хочу перевести полученные клавиши в соответствующую раскладку, которая является рабочей у потока, но что то видимо делаю не так...
    NtUserGetKeyboardState возвращает 0 как результат и соответственно ничего в буфер не пишет, и g_NtUserToUnicodeEx тоже работать не хочет, почему... не могу понять. Адреса перехватов проверял, все верно. Подскажите, что я делаю не так, и как добиться чтоб эти функции работали. Может быть существует какой то другой метод перевода, подскажите.