Комментарии 23
Я правильно понимаю, что из маркета могут быть установлены только Modern-приложения? И что в установщик Desktop-приложения нельзя запихать установку Modern-приложения в обход маркета? Т.е. фактически невозможно гарантировать наличие обоих компонентов на компьютере, о чем и говорит разработчик MS на StackOverflow: “Metro apps can't count on desktop apps or services being installed on the machine. And desktop apps can't count on Metro apps running since they can be suspended any time”
0
Десктопное приложение и Modern-приложение не могут установить друг-друга, но десктопное приложение после установки может отправить пользователя на страницу приложения в маркете, откуда он установит (ну или не установит) Modern-часть. Так же как Modern-приложение может маякнуть пользователю о необходимости установить десктоп-часть. В конце-концов, никто же не удивляется когда страничка в интернете просит обновить флеш или десктопное приложение требует более новый .NET.
+1
Modern-приложению доступны стронние COM-компоненты, которые были установлены на Desktop?
0
Modern-приложению доступен канал доступа к своему десктоп-приложению — статья только об этом. А уж из десктоп-приложения вызывайте что хотите и отдавайте результат в Modern-приложение.
0
Если "Десктопное приложение и Modern-приложение не могут установить друг-друга, но десктопное приложение после установки может отправить пользователя на страницу приложения в маркете, откуда он установит (ну или не установит) Modern-часть.", то каким образом тогда работает «Relaunch Chrome in Windows 8 mode» и обратно? В маркет меня никто не направлял и я ничего не качал.
0
Честно — без понятия. Самому интересно.
0
Браузеры — это вообще отдельная категория приложений. Там один бинарь, который может работать и в десктопном режиме, и в полноэкранном (система ему говорит, в каком режиме запускаться), и даже в последнем у него больше привилегий, чем у обычного приложения — что, в частности, позволяет иметь общие с десктопом закладки, историю etc, а также делать вещи, недоступные обычным Store-приложениям, такие, как JIT-компиляция JS. Вот здесь (.docx) есть детальный разбор этой модели.
Из Store при этом такому браузеру ставиться нельзя.
Из Store при этом такому браузеру ставиться нельзя.
+2
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Не чушь. Сам по себе Protected Mode в IE < 11 ни от чего не защищал. Даже если его включить — процесс имел доступ к определенным папкам на диске, мог взаимодействовать с другими Low Integrity и Untrusted-процессами, в него можно было инжектить код, подгружать внешние библиотеки — т.е. по сути делать всё, что угодно. Только Enhanced Protected Mode реализовал полноценную песочницу на базе AppContainer, а Enhanced Protected Mode включен по-умолчанию только в Win8.1 + IE 11
0
НЛО прилетело и опубликовало эту надпись здесь
Неа, зона «Low Integrity» шире зоны «Low Integrity + AppContainer». В Low Integrity есть доступные на запись и чтение для всех Low Integrity — процессов папки и ветки реестра. Для AppContainer этого нет. Low Integrity процессы видят друг друга, AppContainer — нет. Low Integrity процессы видят глобальные именованные объекты, AppContainer видит лишь объекты в своём неймспейсе.
В общем, с чего бы это Microsoft вбухивал силы в Enhanced Protected Mode, если и прошлой технологии хватало?
В общем, с чего бы это Microsoft вбухивал силы в Enhanced Protected Mode, если и прошлой технологии хватало?
+2
НЛО прилетело и опубликовало эту надпись здесь
Вообще нормально песочница сделана только в Хроме, где прав нету просто никаких. Вот это действительно безопасно. А когда я вижу, что, ну процессу всё-таки можно кое-куда кое-что сохранить, что-то там открыть и т.д. — это сразу минус 100 очков к доверию. Как минимум возможна социальная инженерия вида «сохранить вирус в темп и объяснить пользователю на страничке в браузере, почему ему надо на этом файлике кликнуть „Run as administrator“.
+1
С технической точки зрения можно много чего. Например, можно дать Store-приложению полный доступ к какой-либо части файловой системы, открыв таковой доступ роли «ALL APPLICATION PACKAGES». А те же пайпы используются VS для работы дизайнера XAML.
Проблема в том, что кроме чисто технических ограничений есть и ограничения Store. В которых четко прописано, что Store-приложение не может каким-либо образом завязываться на другое приложение, в т.ч. и на десктопное. Т.е. если вы честно опишете, как работает ваша система, то вы просто не пройдете сертификацию. А если умолчите и пройдете, то это рано или поздно вскроется потом…
Кстати, абсолютно такая же ситуация с большим количеством Win32 API вызовов, которые, если верить MSDN, «are not available in Windows Store apps» — вы зачастую можете их позвать, и они даже будут работать, но WACK будет на них ругаться.
Проблема в том, что кроме чисто технических ограничений есть и ограничения Store. В которых четко прописано, что Store-приложение не может каким-либо образом завязываться на другое приложение, в т.ч. и на десктопное. Т.е. если вы честно опишете, как работает ваша система, то вы просто не пройдете сертификацию. А если умолчите и пройдете, то это рано или поздно вскроется потом…
Кстати, абсолютно такая же ситуация с большим количеством Win32 API вызовов, которые, если верить MSDN, «are not available in Windows Store apps» — вы зачастую можете их позвать, и они даже будут работать, но WACK будет на них ругаться.
+1
При этом зачем-то открыт доступ к локальной машине по сети через сокеты. Для этого даже специальное разрешением есть отдельное. Если я не могу завязываться на другое приложение — зачем такое разрешение?
Кроме того, можно предоставлять какую-нибудь функциональность просто так, даже без этого канала связи — такое приложение пройдёт проверку и будет работать. А для тех, кто поставит ещё и десктопную версию — будут дополнительные плюшки. Причём их в модерн-приложение может даже инжектить код десктопного, чтобы не палиться на проверках магазина.
Кроме того, можно предоставлять какую-нибудь функциональность просто так, даже без этого канала связи — такое приложение пройдёт проверку и будет работать. А для тех, кто поставит ещё и десктопную версию — будут дополнительные плюшки. Причём их в модерн-приложение может даже инжектить код десктопного, чтобы не палиться на проверках магазина.
0
Внезапно, серверные сокеты там для того, чтобы писать серверы :)
Ну и вы же понимаете, что проверки — проверками, а правила — правилами. О нарушении последних может написать и ваш конкурент, например. И будет очень грустно раскрутить приложение до популярности, а потом внезапно быть вынужденным его убрать, потому что вся его соль может быть реализована только с нарушением правил сертификации.
Ну и вы же понимаете, что проверки — проверками, а правила — правилами. О нарушении последних может написать и ваш конкурент, например. И будет очень грустно раскрутить приложение до популярности, а потом внезапно быть вынужденным его убрать, потому что вся его соль может быть реализована только с нарушением правил сертификации.
0
Попробовал использовать этот код для организации пайпа между обычным приложением и IE под EPM. Оказалось, что он прописывает не все необходимые права. После поисков по инету и экспериментов нашел такое решение:
Здесь три правила.
1) S:(ML;;NW;;;LW) — доступ к объекту из low integrity
2) D:(A;;0x120083;;;WD) — разрешение всем читать\писать в пайп
3) (A;;0x120083;;;AC) — разрешение всем AppContainer читать\писать в пайп
function CreateAppContainerSecurityDescriptor(var SD: PSECURITY_DESCRIPTOR): boolean;
const
SDDL_REVISION_1 = 1;
var
pSD: PSECURITY_DESCRIPTOR;
begin
result := false;
if ConvertStringSecurityDescriptorToSecurityDescriptor('S:(ML;;NW;;;LW)D:(A;;0x120083;;;WD)(A;;0x120083;;;AC)',
SDDL_REVISION_1, pSD, nil) then begin
SD := pSD;
result := true;
end;
end;
function Start: boolean;
var
SD: PSECURITY_DESCRIPTOR;
SecurityAttributes: SECURITY_ATTRIBUTES;
begin
result := false;
if Win32MajorVersion >= 6 then begin
if CreateAppContainerSecurityDescriptor(SD) then begin
SecurityAttributes.nLength := sizeof(SECURITY_ATTRIBUTES);
SecurityAttributes.bInheritHandle := true;
SecurityAttributes.lpSecurityDescriptor := SD;
PipeHandle := CreateNamedPipe('\\.\pipe\pipe1', PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE or PIPE_READMODE_BYTE, 1, 0, 0, 1000, @SecurityAttributes);
result := PipeHandle <> INVALID_HANDLE_VALUE;
end;
end;
end;
Здесь три правила.
1) S:(ML;;NW;;;LW) — доступ к объекту из low integrity
2) D:(A;;0x120083;;;WD) — разрешение всем читать\писать в пайп
3) (A;;0x120083;;;AC) — разрешение всем AppContainer читать\писать в пайп
0
Встала задача вызова RPC сервера по lcalpc из Enhanced Protected Mode IE 11 Windows 8.1 — за сутки разобрался. Задача разрешима, но решение получилось не очень элегантное и не в две строчки — если кому интересно — прошу в ПМ.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Выход за границы контейнера Modern-приложений Windows 8