Re[4]: А расскажите за Винду
От: malcev  
Дата: 14.03.21 22:35
Оценка:
Здравствуйте, ononim, Вы писали:

_>>если хочется влезть в метроинтерфейс, то можно заинжектить в экплорер свою длл, которая должна выполнить примерно такой вот код в нем:

O>
O>typedef HWND (WINAPI *CreateWindowInBandProc)(DWORD dwExStyle, LPCWSTR lpClassName,
O>                     LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, 
O>                     HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwBand);

O>    CreateWindowInBandProc pCreateWindowInBand = (CreateWindowInBandProc)
O>        ::GetProcAddress(::GetModuleHandle(TEXT("user32.dll")), "CreateWindowInBand");
O>    if (!pCreateWindowInBand)
O>    {
O>        ::MessageBox(0, TEXT("CreateWindowInBand not found"), TEXT("Hello"), MB_ICONWARNING);
O>        return;
O>    }

O>    DWORD cy = ::GetSystemMetrics(SM_CYMAXIMIZED), y = 10, x = 10;
O>    TCHAR txt[0x100] = {0};
O>    for (DWORD i = 0; i<=0x20; ++i)
O>    {
O>        wsprintf(txt, TEXT("Band %u\n"), i);
O>        HWND w = pCreateWindowInBand(WS_EX_TOPMOST, TEXT("Edit"), txt, 
O>            WS_VISIBLE|WS_OVERLAPPEDWINDOW, x, y, 200, 40, 0, 0, ::GetModuleHandle(0), 0, i);
O>        if (!w)
O>        {
O>            wsprintf(txt, TEXT("Failed %u\n"), i);
O>            pCreateWindowInBand(WS_EX_TOPMOST, TEXT("Edit"), txt, 
O>                WS_VISIBLE|WS_OVERLAPPEDWINDOW, x, y, 200, 40, 0, 0, ::GetModuleHandle(0), 0, 0);
O>        }
O>      if (( (y+= 40 ) +40)>=cy) 
O>        {
O>            y = 10;
O>            x+= 200;
O>        }
O>    }
O>    ::MessageBox(0, TEXT("In loop.."), TEXT("Hello"), MB_ICONWARNING);
O>}
O>

А приходилось ли вам вызывать SetWindowBand?
Вроде как ее можно вызвать без инжекта и хука, перед этим вызвав недокументированную NtUserEnableIAMAccess.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.