Re[15]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 11:56
Оценка: 4 (1)
виста здесь не причем, метод с FILE_FLAG_DELETE_ON_CLOSE не работает уже на 2ksp4 и xpsp2 (возможно последний раз он работал на nt4, нет желания проверять этот антиквариат), флаг FILE_FLAG_DELETE_ON_CLOSE сбрасывается сразу после вызова CreateProcess и соответственно файл после этого уже не самоудалится
Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.01.07 12:20
Оценка: 3 (1)
Давным-давно был отработан код деинсталлятора с самоудалением: копируем себя во временный файл, открываем его с FILE_FLAG_DELETE_ON_CLOSE, запускаем через CreateProcess, передавая свой Process Id, ждем, пока он установит флаг, завершаемся, он дожидается нашего завершения, делает все, что нужно, завершается — система его удаляет.

Все отлично работало, начиная с NT4 и кончая 2003. В висте, как водится, работать перестало Никаких ошибок не возникает — файл копии благополучно открывается, но при завершении не удаляется. Такое ощущение, что в висте изменилась логика отметки файла для удаления.

Вопрос: как проще всего поменять алгоритм, чтобы он и работал в любой NT-системе, и не был связан с шаманством типа последовательного запихивания в стек адресов системных функций?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Самоудаление под вистой
От: IID Россия  
Дата: 15.01.07 12:51
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Давным-давно был отработан код деинсталлятора с самоудалением: копируем себя во временный файл, открываем его с FILE_FLAG_DELETE_ON_CLOSE, запускаем через CreateProcess, передавая свой Process Id, ждем, пока он установит флаг, завершаемся, он дожидается нашего завершения, делает все, что нужно, завершается — система его удаляет.


ЕМ>Все отлично работало, начиная с NT4 и кончая 2003. В висте, как водится, работать перестало Никаких ошибок не возникает — файл копии благополучно открывается, но при завершении не удаляется. Такое ощущение, что в висте изменилась логика отметки файла для удаления.


ЕМ>Вопрос: как проще всего поменять алгоритм, чтобы он и работал в любой NT-системе, и не был связан с шаманством типа последовательного запихивания в стек адресов системных функций?


создай BAT файл, который потом сам себя прибъет
kalsarikännit
Re[2]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.01.07 13:33
Оценка:
Здравствуйте, IID, Вы писали:

IID>создай BAT файл, который потом сам себя прибъет


Так я делал под 9x. Под NT получилось более изящно — с DELETE_ON_CLOSE. С bat-файлом много возни, и возникают лишние риски того, что одно не запустится, другое — не завершится...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Самоудаление под вистой
От: IID Россия  
Дата: 15.01.07 13:48
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, IID, Вы писали:


IID>>создай BAT файл, который потом сам себя прибъет


ЕМ>Так я делал под 9x. Под NT получилось более изящно — с DELETE_ON_CLOSE. С bat-файлом много возни, и возникают лишние риски того, что одно не запустится, другое — не завершится...


хз, у меня все прекрасно завершается. Как вариант — подстрахуйся с MoveFileEx, DELAY_UNTIL_REBOOT
kalsarikännit
Re: Самоудаление под вистой
От: TarasCo  
Дата: 15.01.07 13:58
Оценка:
Скорее всего просто нет прав на удаление файла.
Да пребудет с тобою сила
Re[4]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.01.07 14:34
Оценка:
Здравствуйте, IID, Вы писали:

IID>хз, у меня все прекрасно завершается.


У меня (в тестах) — тоже Но надо, чтоб работало везде, у всех юзеров, а практика показывает, что усложнение почти обязательно ведет к росту процента глюков.

IID> Как вариант — подстрахуйся с MoveFileEx, DELAY_UNTIL_REBOOT


Похоже, придется
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.01.07 14:34
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Скорее всего просто нет прав на удаление файла.


Так в этом случае CreateFile возвращала бы ошибку. И в случае, если процесс создать не удается, файл успешно удаляется.

Я все-таки грешу на тонкости поведения висты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Самоудаление под вистой
От: Аноним  
Дата: 15.01.07 15:51
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, TarasCo, Вы писали:


TC>>Скорее всего просто нет прав на удаление файла.


ЕМ>Так в этом случае CreateFile возвращала бы ошибку. И в случае, если процесс создать не удается, файл успешно удаляется.


ЕМ>Я все-таки грешу на тонкости поведения висты.


А мож виста файл экзешника держит какое-то время в надежде на то что программу опять запустят (или еще там какойто хитрявый механизм) и плюют на влаг DELETE_ON_CLOSE? Мож надо подождать/поработать пол-часика и посмотреть — удаляется он в итоге или нет?
Re[4]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.01.07 16:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А мож виста файл экзешника держит какое-то время в надежде на то что программу опять запустят (или еще там какойто хитрявый механизм) и плюют на влаг DELETE_ON_CLOSE? Мож надо подождать/поработать пол-часика и посмотреть — удаляется он в итоге или нет?


Он даже при перезагрузке не удаляется
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Самоудаление под вистой
От: mansur https://netmontools.com
Дата: 16.01.07 06:55
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Он даже при перезагрузке не удаляется


Попробуйте проверить, есть ли у юзера права админа (даже если на 100% уверены что юзер-админ),
может поможет.
С уважением mansur.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 07:06
Оценка:
Здравствуйте, mansur, Вы писали:

M>Попробуйте проверить, есть ли у юзера права админа (даже если на 100% уверены что юзер-админ),


Есть, конечно. Я вообще под нативным админом проверяю.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Самоудаление под вистой
От: mansur https://netmontools.com
Дата: 16.01.07 08:06
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Есть, конечно. Я вообще под нативным админом проверяю.


Я имею ввиду проверить программно, IsUserAdmin(). Я столкнулся с тем, что даже под админом в Viste
только запуск моей программы "Run as administrator" дал нужный результат.

С уважением mansur.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 09:30
Оценка:
Здравствуйте, mansur, Вы писали:

M>Я имею ввиду проверить программно, IsUserAdmin().


А зачем? Для использования FILE_FLAG_DELETE_ON_CLOSE не требуется прав администратора.

M>Я столкнулся с тем, что даже под админом в Viste только запуск моей программы "Run as administrator" дал нужный результат.


"Под админом" — это под родным юзером Administrator (предварительно разблокированным), или под юзером из группы Administrators? Если второе — так и должно быть. Если первое — как запускаете?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Самоудаление под вистой
От: mansur https://netmontools.com
Дата: 16.01.07 12:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>А зачем? Для использования FILE_FLAG_DELETE_ON_CLOSE не требуется прав администратора.


Кто знает, может и требуются, я всего лишь предлагаю попробовать...

ЕМ>"Под админом" — это под родным юзером Administrator (предварительно разблокированным), или под юзером из группы Administrators? Если второе — так и должно быть. Если первое — как запускаете?


Особо не заморачивался этим вопросом, кажется под логином, которым устанавливал Висту.
Тоже свой простенький инсталлятор, и без функции IsUserAdmin() нето что файл не удалялся, даже иконка на
десктопе не прорисовалась как нужно.
И еще заметил багофичу — чекбокс со стилем BS_PUSHLIKE("button") при включенных темах показывется инверсно — нажатый закрашивается и наоборот,
причём с кнопками и стандартными чекбоксами всё в порядке. Пока до лучших времен инвертировал реакцию на нажатие чекбокса, осталось как-то отловить включение темы.
С уважением mansur.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 12:53
Оценка:
Здравствуйте, mansur, Вы писали:

ЕМ>>"Под админом" — это под родным юзером Administrator (предварительно разблокированным), или под юзером из группы Administrators?


M>Особо не заморачивался этим вопросом, кажется под логином, которым устанавливал Висту.


Во, а надо было бы заморочиться Ибо те аккаунты, который виста предлагает создать в конце установки — это обычные юзеры, включенные в группу администраторов. У них по умолчанию права далеко не полные, в тех случаях, когда виста сама догадывается, что прав может не хватить — она спрашивает. Но для своего инсталлятора она не догадается. А администраторский аккаунт нужно разблокировать, чтобы он стал доступен для логина.

M>Тоже свой простенький инсталлятор, и без функции IsUserAdmin() нето что файл не удалялся, даже иконка на десктопе не прорисовалась как нужно.


IsUserAnAdmin, по документации, говорит только о том, что пользователь включен в группу администраторов.

M>И еще заметил багофичу — чекбокс со стилем BS_PUSHLIKE("button") при включенных темах показывется инверсно — нажатый закрашивается и наоборот,


RTM или RC?

Можно багрепорт написать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Самоудаление под вистой
От: mansur https://netmontools.com
Дата: 16.01.07 13:21
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>IsUserAnAdmin, по документации, говорит только о том, что пользователь включен в группу администраторов.


Прошу прощения, IsUserAdmin() Игоря Вартанова отсюда: http://rsdn.ru/article/qna/baseserv/isusradm.xml
В своей утилите http://lookanet.com/download/lookanet.exe я использую IsUserAdmin() для включения некоторых фич,
а в Висте пришлось использовать и в инсталляторе.

ЕМ>RTM или RC?

Windows 6.0 build 6000.

ЕМ>Можно багрепорт написать

А можно сие делегировать вам?
Суважением mansur.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 13:31
Оценка:
Здравствуйте, mansur, Вы писали:

M>IsUserAdmin() Игоря Вартанова отсюда


А, понял.

ЕМ>>Можно багрепорт написать


M>А можно сие делегировать вам?


Как MS обработает мой заказ на подписку MSDN — так пожалуйста Буду, типа, легальный девелопер
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Самоудаление под вистой
От: mansur https://netmontools.com
Дата: 16.01.07 13:38
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Как MS обработает мой заказ на подписку MSDN — так пожалуйста Буду, типа, легальный девелопер


Поздравляю!
С уважением mansur.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 13:49
Оценка:
Здравствуйте, mansur, Вы писали:

ЕМ>>Как MS обработает мой заказ на подписку MSDN — так пожалуйста Буду, типа, легальный девелопер


M>Поздравляю!


Спасибо, но пока поздравлять не с чем — они уже почти месяц тормозят.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Самоудаление под вистой
От: walky  
Дата: 16.01.07 15:17
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


Все попроще будет. Один из способов:


#include <windows.h>
#include <stdio.h>

#pragma comment(lib,"shell32.lib")

BOOL SelfDelete()
{
  TCHAR szFile[MAX_PATH], szCmd[MAX_PATH];

  if((GetModuleFileName(0,szFile,MAX_PATH)!=0) && (GetShortPathName(szFile,szFile,MAX_PATH)!=0))
  {
    lstrcpy(szCmd,"/c del ");
    lstrcat(szCmd,szFile);
    lstrcat(szCmd," >> NUL");

    if((GetEnvironmentVariable("ComSpec",szFile,MAX_PATH)!=0) &&
       ((INT)ShellExecute(0,0,szFile,szCmd,0,SW_HIDE)>32))
       return TRUE;
  }
  return FALSE;
}

int main(int argc,char* argv[])
{
    printf("Name: %s\n",argv[0]);
    SelfDelete(); // Очень важно!! SelfDelete() должно выполнятся как можно ближе к завершению программы.
    return 0;
}



А вообще вам сюда.
Re[2]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.07 15:58
Оценка:
Здравствуйте, walky, Вы писали:

W>Все попроще будет. Один из способов:


Не, спасибо, это шаманство. Вот по этой самой причине:

W>// Очень важно!! SelfDelete() должно выполнятся как можно ближе к завершению программы.


А мне требуется честный и надежный способ, работающий во всех NT-системах. Кроме DELAY_UNTIL_REBOOT, разумеется.

W>А вообще вам сюда.


Это все я читал — там пара честных, но чудесатых способов вроде создания батника, а все остальное — шаманство, работающее на допущениях.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Самоудаление под вистой
От: al Россия  
Дата: 17.01.07 08:34
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, mansur, Вы писали:


M>>Попробуйте проверить, есть ли у юзера права админа (даже если на 100% уверены что юзер-админ),


ЕМ>Есть, конечно. Я вообще под нативным админом проверяю.


А UAC выключен?


Re[8]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 08:45
Оценка:
Здравствуйте, al, Вы писали:

ЕМ>>Есть, конечно. Я вообще под нативным админом проверяю.


al>А UAC выключен?


Во-первых — какой UAC под родным админским аккаунтом?

Во-вторых — какое это вообще может иметь отношение к вопросу?

А то давайте обсудим, как у меня темы рабочего стола настроены, как иконки упорядочиваются...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 09:42
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, walky, Вы писали:


W>>Все попроще будет. Один из способов:


ЕМ>Не, спасибо, это шаманство. Вот по этой самой причине:


W>>// Очень важно!! SelfDelete() должно выполнятся как можно ближе к завершению программы.


ЕМ>А мне требуется честный и надежный способ, работающий во всех NT-системах. Кроме DELAY_UNTIL_REBOOT, разумеется.


W>>А вообще вам сюда.


ЕМ>Это все я читал — там пара честных, но чудесатых способов вроде создания батника, а все остальное — шаманство, работающее на допущениях.


Евгений, а как в висте обстоят с простыми файлами (данные) с таким-вот флагом? Они удаляются?
Если так — то наверно есть какая-то связь именно с тем что этот файл был запущен как прцесс,
может сделать проверку на висту и добавить delay_until_reboot и прость перегрузиться (на первых порах)
(хотя.. ничего не бывает более постоянного чем временное )
это затычка, Вы понимаете, требуется изучение нового огорода, которое МС накрутил в висте (что-то она мне совсем не нравится)
Re[4]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 09:57
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>Евгений, а как в висте обстоят с простыми файлами (данные) с таким-вот флагом? Они удаляются?


Конечно. Дело не в структуре файла, а в способах работы с ним.

NV>Если так — то наверно есть какая-то связь именно с тем что этот файл был запущен как прцесс,


Ну дык, о чем и речь Такое впечатление, что виста, открывая файл процессе, сбрасывает флаг отметки на удаление, если он установлен.

NV>может сделать проверку на висту и добавить delay_until_reboot и прость перегрузиться (на первых порах)


Я уже без проверки добавил DELAY_UNTIL_REBOOT. Хуже не будет

NV>Вы понимаете, требуется изучение нового огорода, которое МС накрутил в висте (что-то она мне совсем не нравится)


А есть такие, кому нравится? По-моему, от нее в восторге только те, кто работает не ниже .NET 2.0 Остальные все дружно плюются
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 10:06
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


NV>>Если так — то наверно есть какая-то связь именно с тем что этот файл был запущен как прцесс,


ЕМ>Ну дык, о чем и речь Такое впечатление, что виста, открывая файл процессе, сбрасывает флаг отметки на удаление, если он установлен.


Может не сбрасывает, может просто захватывает, поэтому его хендл не закрывается, и удаления нне будет
а после ребута она уже конечно не знает что его надо было удалять...
как-то надо поискать, какая св... редиска держит этот файл (ProcessExplorer не кажет?)
(ох они там в висте накрутилииии, та самя хрень с ускорителем запуска — чую — она виновата )
Re[9]: Самоудаление под вистой
От: Centaur Россия  
Дата: 17.01.07 10:41
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>>>Есть, конечно. Я вообще под нативным админом проверяю.


al>>А UAC выключен?


ЕМ>Во-первых — какой UAC под родным админским аккаунтом?


В Висте под админом тоже UAC. Всё равно как если в XP запускать через Run as с флажком Protect my computer and data from unauthorized program activity. Поэтому, чтобы делать что-нибудь интересное, нужно явно просить систему поднять права. При этом пользователя спросят, согласен ли он их поднять.
Re[6]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 10:48
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

ЕМ>>Такое впечатление, что виста, открывая файл процессе, сбрасывает флаг отметки на удаление, если он установлен.


NV>Может не сбрасывает, может просто захватывает, поэтому его хендл не закрывается, и удаления нне будет


А какой смысл держать файл процесса открытым, когда он завершился? Не делается ничего подобного.

NV>(ох они там в висте накрутилииии, та самя хрень с ускорителем запуска — чую — она виновата )


Говорю же — смысла нет. Для ускорения запуска можно было бы держать файл в кэше, но нет никакого резона держать его открытым. Настройка процесса и привязка DLL — это мизерное время, особенно в сравнении с типовыми тормозами висты
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 10:51
Оценка:
Здравствуйте, Centaur, Вы писали:

C>В Висте под админом тоже UAC.


MS в своих анонсах это обещала, но реально я этого под админом не заметил ни разу. Все процессы получают нормальные админские права. А вот под юзером из группы админов — да, UAC.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 10:51
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>Говорю же — смысла нет. Для ускорения запуска можно было бы держать файл в кэше, но нет никакого резона держать его открытым. Настройка процесса и привязка DLL — это мизерное время, особенно в сравнении с типовыми тормозами висты


Несогласен. Линковка ДЛЛ, особенно с релокацией — дело не очень быстрое
Re[8]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 11:09
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>Линковка ДЛЛ, особенно с релокацией — дело не очень быстрое


Ну да, если читать всю DLL по байту — тады, конечно А если нормально, то десяток DLL можно загрузить за миллисекунды.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 11:26
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, NeuroVirus, Вы писали:


NV>>Линковка ДЛЛ, особенно с релокацией — дело не очень быстрое


ЕМ>Ну да, если читать всю DLL по байту — тады, конечно А если нормально, то десяток DLL можно загрузить за миллисекунды.


Ой. Ну да, а нафига тогда огород было городить с ускорением запуска если так все легко и быстро?
Процесс при запуске надо отобразить, статик связки все по цепочке найти, все модули отобразить (если еще нет), если модуль не попал по адресам то загрузить отдельно копию, сунуть ее в своп, пробежать по таблицам реаллокации... в общем гемора немало...
Дык это я к чему — если можно отрубить на время этот механизм в висте (в смысле "ускоритель") то почему-б не попробовать?
Re[10]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 11:55
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>Ой. Ну да, а нафига тогда огород было городить с ускорением запуска если так все легко и быстро?


Чтобы при загрузке и интенсивной работе, когда активно идет создание/уничтожение процессов, не возникало лишних тормозов.

NV>Процесс при запуске надо отобразить, статик связки все по цепочке найти, все модули отобразить (если еще нет), если модуль не попал по адресам то загрузить отдельно копию, сунуть ее в своп, пробежать по таблицам реаллокации...


Ну и сколько это миллионов элементарных операций требует? С учетом, что в секунду современный процессор выполняет миллиарды Если сделать по уму, с оптимизацией — это займет ничтожное время. Заново образы DLL читать не нужно — достаточно скопировать загруженные страницы, и в своп засовывать тоже не нужно — само свалится, когда время придет.

Главная проблема, из-за которой системные DLL разнесли по адресам — размножение копий кода. Если для каждого процесса создать несколько десятков уникальных копий системных DLL, то NT4 потребует памяти, как XP И соответствующый размер свопа, который под них придется подложить.

NV>Дык это я к чему — если можно отрубить на время этот механизм в висте (в смысле "ускоритель") то почему-б не попробовать?


А я не в курсе, что там за ускоритель такой, не интересовался. Тормозит гораздо заметнее, чем в XP — может, не ускоритель, а замедлитель?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 13:25
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

NV>>Ой. Ну да, а нафига тогда огород было городить с ускорением запуска если так все легко и быстро?


ЕМ>Чтобы при загрузке и интенсивной работе, когда активно идет создание/уничтожение процессов, не возникало лишних тормозов.


Именно как раз для экономии времени на подготовительных операциях для запуска процесса

NV>>Процесс при запуске надо отобразить, статик связки все по цепочке найти, все модули отобразить (если еще нет), если модуль не попал по адресам то загрузить отдельно копию, сунуть ее в своп, пробежать по таблицам реаллокации...


ЕМ>Ну и сколько это миллионов элементарных операций требует? С учетом, что в секунду современный процессор выполняет миллиарды Если сделать по уму, с оптимизацией — это займет ничтожное время. Заново образы DLL читать не нужно — достаточно скопировать загруженные страницы, и в своп засовывать тоже не нужно — само свалится, когда время придет.


нууу, не так все радужно

ЕМ>Главная проблема, из-за которой системные DLL разнесли по адресам — размножение копий кода. Если для каждого процесса создать несколько десятков уникальных копий системных DLL, то NT4 потребует памяти, как XP И соответствующый размер свопа, который под них придется подложить.


Воот! Копии кода, реаллокация... вот это и тормозит при запуске процесса

NV>>Дык это я к чему — если можно отрубить на время этот механизм в висте (в смысле "ускоритель") то почему-б не попробовать?


ЕМ>А я не в курсе, что там за ускоритель такой, не интересовался. Тормозит гораздо заметнее, чем в XP — может, не ускоритель, а замедлитель?


я просто не видел еще висту живую, поэтому не могу помочь конструктивно
поройся, есть там что-то... точно говорю
Re[12]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 13:57
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>Воот! Копии кода, реаллокация... вот это и тормозит при запуске процесса


Блин, да не тормозит оно настолько, чтобы специально этим заморачиваться. Единственная реально заметная неприятность была бы исключительно в излишнем размножении копий. Сведение большинства DLL в единую общую копию сэкономило много памяти, и совсем чуть-чуть времени.

NV>я просто не видел еще висту живую, поэтому не могу помочь конструктивно

NV>поройся, есть там что-то... точно говорю

Файлы процессов открытыми она точно не держит
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Самоудаление под вистой
От: NeuroVirus Россия  
Дата: 17.01.07 14:01
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, NeuroVirus, Вы писали:


NV>>Воот! Копии кода, реаллокация... вот это и тормозит при запуске процесса


ЕМ>Блин, да не тормозит оно настолько, чтобы специально этим заморачиваться. Единственная реально заметная неприятность была бы исключительно в излишнем размножении копий. Сведение большинства DLL в единую общую копию сэкономило много памяти, и совсем чуть-чуть времени.


Это Вам с памятью везет, а где оперативки мало — сплошной своп

NV>>я просто не видел еще висту живую, поэтому не могу помочь конструктивно

NV>>поройся, есть там что-то... точно говорю

ЕМ>Файлы процессов открытыми она точно не держит


Нууу.... как ударит чтонить мне в голову висту попробывать — погляжу что к чему...
Re[14]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.07 15:13
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

ЕМ>>Блин, да не тормозит оно настолько, чтобы специально этим заморачиваться. Единственная реально заметная неприятность была бы исключительно в излишнем размножении копий. Сведение большинства DLL в единую общую копию сэкономило много памяти, и совсем чуть-чуть времени.


NV>Это Вам с памятью везет


"Везет" — это когда память сама собой в компе появляется А мне, увы, приходится ее покупать

NV>а где оперативки мало — сплошной своп


Правильно — свопинг возникает от нехватки памяти. Но никоим образом не от того, что система при загрузке процесса просматривает какие-то там таблицы переадресаций, настраивает DLL и т.п. — это все требует вычислительных ресурсов, причем мизерных, с современной точки зрения.

Если система не тормозит на программной обработке звука/видео в реальном времени — с чего ей вдруг тормозить на каких-то мелких таблицах?

NV>Нууу.... как ударит чтонить мне в голову висту попробывать — погляжу что к чему...


Дык, долго ли — засунул в VM, да и пробуешь... Еще б я эту гадость на железную машину ставил...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.01.07 12:00
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ZEN>виста здесь не причем, метод с FILE_FLAG_DELETE_ON_CLOSE не работает уже на 2ksp4 и xpsp2


То-то он у меня прекрасно работал от NT4 до Win2003, о чем я, кстати, упомянул в первом посте.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 13:24
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, ZENiTH, Вы писали:


ZEN>>виста здесь не причем, метод с FILE_FLAG_DELETE_ON_CLOSE не работает уже на 2ksp4 и xpsp2


ЕМ>То-то он у меня прекрасно работал от NT4 до Win2003, о чем я, кстати, упомянул в первом посте.


приведите пример вашего кода, простейший пример не работает как я описывал:
HANDLE hTmp = CreateFile(
"victim.exe", // victim.exe это копия winver.exe
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
FILE_FLAG_DELETE_ON_CLOSE,
0);

CreateProcess(
NULL,
"victim.exe",
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);

CloseHandle(hTmp);
// если не было вызова CreateProcess то здесь victim.exe уже удален, в противном случае victim.exe остается даже после ребута
Re[18]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.01.07 15:08
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ZEN>приведите пример вашего кода, простейший пример не работает как я описывал:


Так не забывайте добавлять право DELETE к GENERIC_READ — и будет чудненько работать в любой NT-системе, кроме висты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 15:24
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, ZENiTH, Вы писали:


ZEN>>приведите пример вашего кода, простейший пример не работает как я описывал:


ЕМ>Так не забывайте добавлять право DELETE к GENERIC_READ — и будет чудненько работать в любой NT-системе, кроме висты.


проверил, ни DELETE ни STANDARD_RIGHTS_ALL никакого влияния не оказывают (xpsp2)
Re[19]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 15:33
Оценка:
приведите пожалуйста пример вашего кода или прикрепите бинарь который удалит себя
Re[20]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.01.07 15:45
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ZEN>приведите пожалуйста пример вашего кода


Вот ваш собственный код, доведенный до рабочего состояния. Строить можно так:

cl delself.cpp /link /subsystem:windows /entry:Entry

#include <windows.h>

#pragma comment (lib, "kernel32.lib")
#pragma comment (lib, "user32.lib")

void Entry (void) {

  HANDLE hTmp = CreateFile(
  "victim.exe", // victim.exe ¤Єю ъюяш  winver.exe
  GENERIC_READ | DELETE,
  FILE_SHARE_READ | FILE_SHARE_DELETE,
  0,
  OPEN_EXISTING,
  FILE_FLAG_DELETE_ON_CLOSE,
  0);

  if (hTmp != INVALID_HANDLE_VALUE) {

    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory (&si, sizeof (si));
    si.cb = sizeof (si);

    BOOL Res = CreateProcess(
      NULL,
      "victim.exe",
      NULL,
      NULL,
      FALSE,
      NORMAL_PRIORITY_CLASS,
      NULL,
      NULL,
      &si,
      &pi
    );

    if (Res) {

      if (WaitForInputIdle (pi.hProcess, 5000) != 0) {

        MessageBox (0, "Cannot wait for idle state", "", MB_ICONERROR | MB_OK);

      }

    } else {

      MessageBox (0, "Cannot open file", "", MB_ICONERROR | MB_OK);

    }

    CloseHandle(hTmp);

  } else {

    MessageBox (0, "Cannot create process", "", MB_ICONERROR | MB_OK);

  }

  ExitProcess (0);

}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[21]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 16:12
Оценка:
ЕМ>Вот ваш собственный код, доведенный до рабочего состояния. Строить можно так:

ЕМ>cl delself.cpp /link /subsystem:windows /entry:Entry


собрал ваш код, запускается victim.exe, но ничего не удаляется

http://www.rsdn.ru/File/17683/selfdel.rar
Re[22]: Самоудаление под вистой
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 28.01.07 16:24
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ЕМ>>cl delself.cpp /link /subsystem:windows /entry:Entry

ZEN>собрал ваш код, запускается victim.exe, но ничего не удаляется

аналогично, windows 2003 SP1
... << RSDN@Home 1.2.0 alpha rev. 673 Windows 2003 5.2.3790.65536 >>
Re[22]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.01.07 16:38
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ZEN>собрал ваш код, запускается victim.exe, но ничего не удаляется

ZEN>http://www.rsdn.ru/File/17683/selfdel.rar

Скачал, запустил под 2k SP4, XP SP2, 2k3 SP1 — везде успешно удаляется. Причем из каталога файл пропадает еще при работающем winver. То ли вы запускаете как-то не так...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Самоудаление под вистой
От: ZENiTH  
Дата: 28.01.07 16:47
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Скачал, запустил под 2k SP4, XP SP2, 2k3 SP1 — везде успешно удаляется. Причем из каталога файл пропадает еще при работающем winver. То ли вы запускаете как-то не так...


запустил из explorer на чистой 2ksp4, victim.exe не удалился
Re[24]: Самоудаление под вистой
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.01.07 17:09
Оценка:
Здравствуйте, ZENiTH, Вы писали:

ZEN>запустил из explorer на чистой 2ksp4, victim.exe не удалился


Я вспомнил, что у меня на системных дисках везде FAT. Проверил на NTFS — там действительно не удаляется. А виста чистый диск принудительно форматирует в NTFS. Возможно, все дело в правах — надо будет подробнее поизучать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Самоудаление под вистой
От: ZENiTH  
Дата: 29.01.07 17:37
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я вспомнил, что у меня на системных дисках везде FAT. Проверил на NTFS — там действительно не удаляется. А виста чистый диск принудительно форматирует в NTFS. Возможно, все дело в правах — надо будет подробнее поизучать.


врядли права, у меня стоял полный доступ для Everyone и запуск был из-под админа
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.