Здравствуйте, Пётр Седов, Вы писали:
SC>>>3) Есть ли стоящие внимания новшества в WinAPI. RO>>Так даже если есть, всё равно ими нельзя пользоваться из соображений обратной совместимости. ПС>Можно явно запрашивать указатель на WinAPI-шную функцию с помощью GetProcAddress. Тогда программа будет работать и в старых версиях Windows.
Э-э... А что, собственно, делать, если она их там не найдет?
Здравствуйте, Sakura-chan, Вы писали:
RO>> Админ поставил программу, а потом пришел Вася, влез в ее настройки и внедрил туда какую-то злонамеренную функциональность. Программа ведь исполняется от имени юзера и может делать всё то, но не более, что позволено самому юзеру.
SC>Я имею в виду, что в идеале должна быть ситуация, когда программа имеет доступ к только своей папке. Но юзер — не имеет. Т.е. для программы было бы если исключение из прав юзера. Хотя с другой стороны, конечно, если программа позволяет юзеру ковырять её саму через её же интерфейс, то это дыра будет... я не подумал с этой стороны :)
Как ни крути, приходится съезжать на священные войны. Всё это давно в оффтопике есть: четкие привилегии на разные директории и возможность программе исполняться с привилегиями, отличными от привилегий юзера. Поставь себе Убунту, поиграйся. Это, кстати, помогает писать более хорошие программы для MS Windows. Ну, и есть риск на Windows забить :-)
RO>> А в последних версиях Винды как раз структура директорий становится похожей на FHS. /usr — Program Files, /home — Documents and Settings, /etc — реестр, /var — неясно (Documents and Settings\All Users\Application Data?).
SC>Да, но никто не мешает мне поставить прогу в D:\GAMES, как я уже сказал. И получится исключение из всех правил. Потому что они распространяются только на Program Files. Разве что если закрыть юзерам всё кроме их личной папки...
По-хорошему, так и должно быть. В (нет, только не СВ!) некоторых других ОС так и есть: юзерам можно только в свою директорию, разве что еще во временную.
RO>> Ага, кажется, понял. Ты о том, куда программе девать данные вроде какого-нибудь внутреннего кеша?
SC>Угу. Или логи, статистику, общие настройки. Как я уже писал в соседнем ответе, подойдёт All Users, вроде, но не логично снова — логи это не файлы пользователей, это личные файлы программы.
К общим настройкам положено иметь доступ только админу. Логи/статистику/кеш следует передавать по определенному протоколу заранее запущенному процессу, который запишет данные уже со своими правами. Так сделан системный лог в большинстве ОС, например.
Здравствуйте, Roman Odaisky, Вы писали:
ПС>>Можно явно запрашивать указатель на WinAPI-шную функцию с помощью GetProcAddress. Тогда программа будет работать и в старых версиях Windows. RO>Э-э... А что, собственно, делать, если она их там не найдет?
Если WinAPI-шная функция отсутствует, то можно:
1. Выполнить fallback-код, например:
typedef COLORREF (WINAPI * PSetDCBrushColorProc)(HDC hDC, COLORREF Color);
static PSetDCBrushColorProc s_pSetDCBrushColor = NULL;
// вызывается в начале работы программыvoid Init()
{
assert(s_pSetDCBrushColor == NULL);
HINSTANCE hLib = GetModuleHandle(L"gdi32.dll");
assert(hLib != NULL);
s_pSetDCBrushColor = reinterpret_cast<PSetDCBrushColorProc>(GetProcAddress(hLib, "SetDCBrushColor"));
}
#ifndef DC_BRUSH
#define DC_BRUSH 18
#endif
void PaintRect(HDC hDC, const RECT& Rect, COLORREF Color)
{
assert((Rect.left <= Rect.right) && (Rect.top <= Rect.bottom));
if (s_pSetDCBrushColor != NULL)
{
// начиная с Windows 98 и Windows 2000
(*s_pSetDCBrushColor)(hDC, Color);
HBRUSH b = static_cast<HBRUSH>(GetStockObject(DC_BRUSH));
FillRect(hDC, &Rect, b);
}
else
{
// старая Windows, fallback-код
HBRUSH hBrush = CreateSolidBrush(Color); // можно cache-ироватьif (hBrush == NULL)
{
throw runtime_error("Cannot create brush.");
}
FillRect(hDC, &Rect, hBrush);
DeleteObject(hBrush);
}
}
Так делает метод CMirrorFile::Close в MFC 6.0, он явно запрашивает функцию ReplaceFile из kernel32.dll.
2. Ничего не делать. Например, отсутствует функция HeapCompact. Значит не судьба ужать heap.
3. Заблокировать пункт меню или кнопку. Или не блокировать, а при нажатии показать сообщение «у вас старая Windows, возможность недоступна».
Здравствуйте, Roman Odaisky, Вы писали:
RO>Как ни крути, приходится съезжать на священные войны. Всё это давно в оффтопике есть: четкие привилегии на разные директории и возможность программе исполняться с привилегиями, отличными от привилегий юзера. Поставь себе Убунту, поиграйся. Это, кстати, помогает писать более хорошие программы для MS Windows. Ну, и есть риск на Windows забить
Уже давно поставил, тока КУбунту ^^ Я как раз к тому и клоню (слегка знаю линукс), что там проще. Можно и прогу открыть с правами админа, не выходя из юзера. Я типа критикую винду слегка
RO>По-хорошему, так и должно быть. В (нет, только не СВ!) некоторых других ОС так и есть: юзерам можно только в свою директорию, разве что еще во временную.
Неа! Тогда придётся иметь только один логический диск. И один винт всего. Любой другой винт не может быть внутри C:\D&S\User и будет доступен тока админу. В винде физическая ФС, а в оффтопике — виртуальная.
RO> К общим настройкам положено иметь доступ только админу.
А всегда ли это правильно? Смотря что за прога — админ может стать человеком на побегушках по фирме
(что-то жёсткий оффтопик пошёл )
RO> Логи/статистику/кеш следует передавать по определенному протоколу заранее запущенному процессу, который запишет данные уже со своими правами.
Но это же через .. одно место Хотя мысль здравая, но жутко криво выглядит
RO> Так сделан системный лог в большинстве ОС, например.
В винде это Журналы Событий. Но что-то мне не очень нравится идея. Они ограничены, описания как-то регистрировать надо... Куда проще тупо писать текстовый файл. Можно что хочешь писать, создавать новые файлы по датам итд. Быстро и просто, ничего не надо. Про линукс не знаю — я из программирования там знаю тока функцию fork()
Здравствуйте, The Lex, Вы писали:
TL>ЗЫ: но необходимости программам "писать только куда надо" это не отменяет!
Кстати, а где эти самые рекомендации есть?
TL>Дык я не про продажу — я про использование... Не знал?
Я стараюсь перейти на бесплатное, вот
TL>Дык это rtfm
RTFM ноута содержит тока "какой кнопочкой включить ноутбук" для блондинок ^^
TL>Лично я скорее с обратной ситуацией сталкивался, когда новое железо на старых чипсетах + ОС 2000 не хотело работать "по полной" — зато на XP — "аж бегом!" И я, например, в XP люблю ее "мультяшные окна" — и не люблю когда отключают обратно в "серое казарменное безмолвие" (к)
Впервые увидев ХР я назвал это "клоунский интерфейс" ^^ Сейчас привык, но долго плевался.
SC>>Дык а смысл. Можно тогда в той же студии и отлажвиать. Зачем оффтопичная ОС — тормозить комп посредством виртуалки? TL> Ну дык зато "под ОС" — причем "ОС" — с Особо Больших буков.
<мечты>Вот бы под неё научиться писать тоже</мечты>
TL>ЗЫ: а, например, как эффективно работать "в обратном порядке" — т.е. писать под "большую ОС", но работать под виндой?
Пока что kubuntu у меня тока под qemu живёт. Разглядываю ^^
Здравствуйте, Sakura-chan, Вы писали:
SC>Уже давно поставил, тока КУбунту ^^ Я как раз к тому и клоню (слегка знаю линукс), что там проще. Можно и прогу открыть с правами админа, не выходя из юзера. Я типа критикую винду слегка
Из консоли: runas/user:<user> <command>
Из GUI: зажимаешь шифт, кликаешь правой кнопкой, выбираешь Run as... в меню.
Здравствуйте, Don Reba, Вы писали:
DR>Из консоли: runas/user:<user> <command> DR>Из GUI: зажимаешь шифт, кликаешь правой кнопкой, выбираешь Run as... в меню.
Во-первых, Windows XP не прекратит своего существования 30 июня 2008 года. На эту дату назначено прекращение поставок OEM-версий XP изготовителям компьютерных устройств для предустановки на новые ПК и продажи через розничную сеть.
Что же касается прекращения поддержки Windows XP, то здесь компания Microsoft отмечает, что основная поддержка этой операционной системы прекратится в апреле 2009 года, а расширенная поддержка, связанная с исправлением ошибок безопасности ОС и других важных ошибок, закончится в 2014 году.
Direct OEM и Retail License будет доступна до 30 июня 2008г
System Builder License будет доступна до 31 января 2009г
Здравствуйте, Don Reba, Вы писали:
SC>>Уже давно поставил, тока КУбунту ^^ Я как раз к тому и клоню (слегка знаю линукс), что там проще. Можно и прогу открыть с правами админа, не выходя из юзера. Я типа критикую винду слегка :)
DR>Из консоли: runas/user:<user> <command> DR>Из GUI: зажимаешь шифт, кликаешь правой кнопкой, выбираешь Run as... в меню.
Здравствуйте, Roman Odaisky, Вы писали:
DR>>Из консоли: runas/user:<user> <command> DR>>Из GUI: зажимаешь шифт, кликаешь правой кнопкой, выбираешь Run as... в меню.
RO>Это аналог su. Аналога sudo в MS Windows нет.
Но такой способ не всегда годится. Например, хочется сделать top-level окно непрямоугольной формы. Если user32.dll экспортирует функцию SetLayeredWindowAttributes, то лучше использовать её. Если она отсутствует, то придётся создать GDI-регион и назначить его окну вызовом функции SetWindowRgn.