Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое WinAPI? 
:(
    Опции темы
 
Что такое WinAPI?
Произведения искусства [ 12 ]  [28.57%]
Кладезь отстоя [ 24 ]  [57.14%]
Свой вариант (опишу в теме) [ 6 ]  [14.29%]
Всего проголосовавших: 42
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Alexeis
Дата 17.5.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  17.5.2010,  22:17 Найти цитируемый пост)
зачем пихать все в CreateFile, если, скажем фактически для создания важны только режим доступа и идентификатор?

  В общем слив засчитывается. Функция должна иметь столько параметров сколько будет реально использовано при 90% ее вызовов. Остальное должно настраиваться опционально. Некоторые функции этим страдают. Нельзя сказать что многие.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rohoss
Дата 17.5.2010, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Цитата(Alexeis @  17.5.2010,  23:34 Найти цитируемый пост)
  В общем слив засчитывается. Функция должна иметь столько параметров сколько будет реально использовано при 90% ее вызовов. Остальное должно настраиваться опционально. Некоторые функции этим страдают. Нельзя сказать что многие.

А лучше всего, когда передаёшь параметром специальный объект... 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Alexeis
Дата 18.5.2010, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Rohoss @  17.5.2010,  22:39 Найти цитируемый пост)
А лучше всего, когда передаёшь параметром специальный объект...  

  Так оно всегда так и происходит. Дескрипторы которые создают и повсеместно используют фактически указатели на системные объекты. Или речь о другом специальном объекте?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
GoldFinch
Дата 18.5.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(MAKCim @  18.5.2010,  00:17 Найти цитируемый пост)
зачем пихать все в CreateFile, если, скажем фактически для создания важны только режим доступа и идентификатор?

Затем что при создании объекта ядра, если указывать его атрибуты безопасности, то их надо надо указывать сразу. (иначе может так случиться что будет поздно)
А лишний NULL - никому не мешает.

Цитата(MAKCim @  18.5.2010,  00:17 Найти цитируемый пост)
java, perl, python, Go, haskell, lisp и много много других ;)

ни один из них не работает с АПИ ОС напрямую.
а в винде даже VB, который компилится в байткод, может вызывать winapi (экспорты любых dll)
Цитата(MAKCim @  18.5.2010,  00:17 Найти цитируемый пост)
стОит ли говорить, что подавляющее большинство либ написаны на С

Потому и написаны на Си, что больше не на чем.
В винде достаточно значительная часть системного кода пишется не на Си.
Собственно зачем писать на неудобном Си, если есть более удобная высокоуровневая дельфи, и более удобный низкоуровневый масм?

Это сообщение отредактировал(а) GoldFinch - 18.5.2010, 00:30
PM MAIL ICQ   Вверх
bems
Дата 18.5.2010, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 0
Всего: 88



Цитата(MAKCim @  17.5.2010,  14:48 Найти цитируемый пост)
посмотреть на unix-api ;) 

Посмотрел. 
Увидел пару fork-exec. 
Испытал неуловимо гнетущее впечатление. Содрогнулся. (с)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
W4FhLF
Дата 18.5.2010, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Да что там CreateFile. Вот когда дело касается реестра или окон... Разве не прелесть:

Код

LONG WINAPI RegCreateKeyEx(
  __in        HKEY hKey,
  __in        LPCTSTR lpSubKey,
  __reserved  DWORD Reserved,
  __in_opt    LPTSTR lpClass,
  __in        DWORD dwOptions,
  __in        REGSAM samDesired,
  __in_opt    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __out       PHKEY phkResult,
  __out_opt   LPDWORD lpdwDisposition
);

HWND CreateWindowEx(
  __in  DWORD dwExStyle,
  __in  LPCTSTR lpClassName,
  __in  LPCTSTR lpWindowName,
  __in  DWORD dwStyle,
  __in  int x,
  __in  int y,
  __in  int nWidth,
  __in  int nHeight,
  __in  HWND hWndParent,
  __in  HMENU hMenu,
  __in  HINSTANCE hInstance,
  __in  LPVOID lpParam
);

BOOL WINAPI CreateProcess(
  __in_opt     LPCTSTR lpApplicationName,
  __inout_opt  LPTSTR lpCommandLine,
  __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in         BOOL bInheritHandles,
  __in         DWORD dwCreationFlags,
  __in_opt     LPVOID lpEnvironment,
  __in_opt     LPCTSTR lpCurrentDirectory,
  __in         LPSTARTUPINFO lpStartupInfo,
  __out        LPPROCESS_INFORMATION lpProcessInformation
);


На самом деле WinAPI простые, но явно избыточные. Слишком много сущностей, которые невозможно держать в голове. Это заставляет часто останавливаться, думать, нырять в справку. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Wisdom
Дата 18.5.2010, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



Шедевр.
PM MAIL   Вверх
A5uKa
Дата 18.5.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



земля.
PM   Вверх
MAKCim
Дата 18.5.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  17.5.2010,  23:34 Найти цитируемый пост)
В общем слив засчитывается. Функция должна иметь столько параметров сколько будет реально использовано при 90% ее вызовов

я говорю о более глобальных вещах
естественно, если чего-то требует архитектура, то никуда от этого не денешься
другое дело, что api - Это отображение архитектуры ;)


Цитата(GoldFinch @  18.5.2010,  00:25 Найти цитируемый пост)
ни один из них не работает с АПИ ОС напрямую.

если уж на то пошло
то и С не юзает напрямую api ;)


Цитата(GoldFinch @  18.5.2010,  00:25 Найти цитируемый пост)
Потому и написаны на Си, что больше не на чем.

C - определенный стандарт в unix-like системах
и не потому, что больше не на чем (как раз выбор больше), а потому, что С одновременно и простой, и мощный
одна из концепций unix заключается в принципе, чем проще тем лучше


Цитата(GoldFinch @  18.5.2010,  00:25 Найти цитируемый пост)
Затем что при создании объекта ядра, если указывать его атрибуты безопасности, то их надо надо указывать сразу. (иначе может так случиться что будет поздно)
А лишний NULL - никому не мешает.

значит архитектура подсистемы безопасности кривая
в linux, к примеру, во первых подсистема безопасности модульная (DAC, selinux)
а во-вторых, не потребовала ни разу изменить posix api
и в -третьих, легко позволила получить eal4 (rhel5)
http://www.niap-ccevs.org/cc-scheme/st/?vid=10125
а NULL может быть и не мешает
но тем не менее доля статистики опроса на его совести ;)

Добавлено @ 08:54
Цитата(W4FhLF @  18.5.2010,  03:31 Найти цитируемый пост)
На самом деле WinAPI простые, но явно избыточные.

вот и я про то же
каков размер winapi (количество непосредственно отображаемых в userspace системных вызовов)?
соблюдается ли принцип Оккама?

Добавлено @ 08:58
Цитата(bems @  18.5.2010,  02:41 Найти цитируемый пост)
Увидел пару fork-exec. 

fork - мощнейший механизм на самом деле
CreateProcess определенно менее гибок засчет того, что в принципе привязывает процесс к программе
а между тем - это _разные_ сущности
программа (образ) - это лишь ресурс, как и прочие таблицы и объекты


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 18.5.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  18.5.2010,  07:52 Найти цитируемый пост)
если уж на то пошло
то и С не юзает напрямую api ;)

  Это еще как? Переход по адресу разве это не напрямую? Или ты имеешь ввиду, что API это прослойка к нативной ntdll.dll?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
GoldFinch
Дата 18.5.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Alexeis, 
MAKCim видимо имеет ввиду механизм статического импорта для .obj : для каждой длл используются библиотеки импорта с переходниками на функции API. При этом имена переходников не совпадают с именами функций winAPI (добавляется манглинг).


Это сообщение отредактировал(а) GoldFinch - 18.5.2010, 09:23
PM MAIL ICQ   Вверх
MAKCim
Дата 18.5.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  18.5.2010,  09:07 Найти цитируемый пост)
Это еще как?

а вот так
компилятор формирует код, использующий либы, а не дергает напрямую сисколы
а первичное отображение api есть сисколы


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 18.5.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  18.5.2010,  09:06 Найти цитируемый пост)
а вот так
компилятор формирует код, использующий либы, а не дергает напрямую сисколы

  Какой компилятор делает так? 

Вот смотрю пример вызова CreateEvent

Код

CM_Tasks.cpp.30: FalseEvent  = CreateEvent(NULL, FALSE, FALSE, NULL);//пустой event
0042E27B 6A00             push $00
0042E27D 6A00             push $00
0042E27F 6A00             push $00
0042E281 6A00             push $00
0042E283 E850473300       call $007629d8 //смещение к позиции в таблице импорта
0042E288 8B4DFC           mov ecx,[ebp-$04]
0042E28B 898144010000     mov [ecx+$00000144],eax


Код

007629D8 FF2548357A00     jmp dword ptr [$007a3548] //переход по адресу занесенному в таблице импорта


Адрес хранящийся в памяти по адресу 

007a3548 - 0E 18 28 76

Переход к kernel32.CreateEventW
Код

kernel32.CreateEventW:
7628180E 8BFF             mov edi,edi


Где тут использование дополнительной либы?

Это сообщение отредактировал(а) Alexeis - 18.5.2010, 11:49


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 18.5.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  18.5.2010,  11:38 Найти цитируемый пост)
Где тут использование дополнительной либы?

kernel32 ;)
вот ежели б компилятор генерил код, напрямую дергающий sysenter/syscall, int и пр. механизмы межуровневых переходов процессора
тогда да


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 18.5.2010, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  18.5.2010,  12:21 Найти цитируемый пост)
kernel32 ;)

  Причем тут язык С тогда? По другому к винде системе не обратишься из юзермода . Это не библиотека языка С, а библиотека ядра ОС. Что с того, что часть ее кода выполняется в юзермоде? В чем принципиальная разница будут ли эти операции производиться в твоей программе или же в системой библиотеке? 
  На самом деле вызов функции из kernel32 это лишь начало целой цепочки вызовов. Обычно стек внутренних системных вызовов разрастается до 6ти и более функий.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.