Re: А расскажите за Винду
От: ononim  
Дата: 27.07.14 18:47
Оценка: 5 (4) +1
Ну например после ХР появились:
— Desktop Window Manager, и API для него
— Транзакционные операции с файлами и реестром, и API для них. Например раз, два.
— XPS принтинг, и API для него
— Аудиоподсистема была переделана, и появился Windows Core Audio API
— ntdll рантайм обзавелся своим внутренним развитым thread pool, ну и API для него не поленились вытащить наверх
— Win'RT — дикая помесь COM'а и plain API (например). + еще немного мусора вкинули в бедный token object

Что сделали, но не задокументировали (но я както по-необходимости расковырял):
— Window bands, и набор следующих API, торчащих из user32:
HWND WINAPI CreateWindowInBand(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwBand);
BOOL WINAPI SetWindowBand(HWND hWnd, HWND  hwndInsertAfter, DWORD dwBand);
BOOL WINAPI GetWindowBand(HWND hWnd, PDWORD pdwBand);

С помощью них сама винда, и все (сильно) желающие могут впендюривать свои окошки туда, где обычно показываются Win'RT приложения.

— WNF, вероятно расшифровывающийся как Windows Notification Framework. Используется для рассылки "сообщений" подписчикам. Сообщение — это бинарные данные. Имеют своеобразное "имя", которое по сути — 64хбитный идентификатор, который помимо иденцификации еще и указывает scope и security rules сообщений и скорее всего микрософтовский тим генерирует из макросом навроде CTL_CODE, используемого для генерации IOCTL кодов для драйверов. Вот такие вот API юзаются с ним (недоисследовал, но может комуто пригодится):
NTSTATUS NtCreateWnfStateName (PULONGLONG pName, ULONG arg_4, ULONG arg_8, BOOL arg_c, PVOID arg_10, ULONG arg_14, PSECURITY_DESCRIPTOR pSD)
NTSTATUS NtDeleteWnfStateName(PULONGLONG name)
NTSTATUS NtQueryWnfStateNameInformation (ULONGLONG *name, ULONG_PTR arg2, PVOID arg3, PVOID arg4, ULONG_PTR arg5);
NTSTATUS NtQueryWnfStateData (PULONGLONG name, PVOID arg2Zero, PVOID arg3Zero, PULONG arg4PointerToUlong0x200000, PVOID arg5Data, PULONG arg6DataLen)
NTSTATUS NtUpdateWnfStateData (PULONGLONG name, PVOID arg2Data, ULONG arg3DataLen, PVOID arg4Zero, PVOID arg5Zero, ULONG_PTR arg6Test, BOOL arg7Test)
NTSTATUS NtSubscribeWnfStateChange (PULONGLONG name, PVOID arg2, PVOID arg3, PVOID arg4)
NTSTATUS NtUnsubscribeWnfStateChange (PVOID arg) 
NTSTATUS NtWaitForWnfNotifications (WnfChangeNotifyEntry *cn_entry, PVOID arg2)
 struct WnfChangeNotifyEntry
    {
        ULONG ulUnknown1;
        ULONG ulUnknown2;
        ULONGLONG name;
        //many other still unknown bytes :(
    };
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.