Как заменит системные файлы.
От: Donnie  
Дата: 13.07.02 11:21
Оценка:
Здравствуйте Все!

Иногда появляется необходимость заменить файлы, используемые в данный момент системой, например, какой-нибудь gdi.exe. Вопрос, как это можно сделать программным способом? Программы установки обычно перегружают комп, после чего файлы оказываются заменёнными. Можно, конечно, кустарным образом прописать досовскую программку в winstart.bat и ею в режиме DOS заменить, что нужно, но ведь должен быть стандартный способ, выводящий после перегрузки надпись "Completed updating system, continuig to load Windows". И потом, указанный кустарный способ не будет работать под Windows NT/2000, хотя и под ними ServicePack'и как-то умудряются заменять почти всё содержимое SYSTEM32.
Re: Как заменит системные файлы.
От: vasketsov Россия http://ntprog.by.ru
Дата: 13.07.02 11:40
Оценка: 10 (2)
Здравствуйте Donnie, Вы писали:

D>Здравствуйте Все!


D>Иногда появляется необходимость заменить файлы, используемые в данный момент системой, например, какой-нибудь gdi.exe. Вопрос, как это можно сделать программным способом? Программы установки обычно перегружают комп, после чего файлы оказываются заменёнными. Можно, конечно, кустарным образом прописать досовскую программку в winstart.bat и ею в режиме DOS заменить, что нужно, но ведь должен быть стандартный способ, выводящий после перегрузки надпись "Completed updating system, continuig to load Windows". И потом, указанный кустарный способ не будет работать под Windows NT/2000, хотя и под ними ServicePack'и как-то умудряются заменять почти всё содержимое SYSTEM32.


BOOL MoveFileEx(
LPCTSTR lpExistingFileName, // file name
LPCTSTR lpNewFileName, // new file name
DWORD dwFlags // move options
);

Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported (читай ниже как делается)

If the dwFlags parameter specifies MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileEx stores the locations of the files to be renamed at restart in the following registry value:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

The PendingFileRenameOperations value is of type REG_MULTI_SZ. Each rename operation stores a pair of NULL-terminated strings. The system uses these registry entries to complete the operations at restart in the same order that they were issued. For example, the following code fragment creates registry entries that delete szDstFile and rename szSrcFile to be szDstFile at restart:

MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);

The system stores the following entries in PendingFileRenameOperations:

szDstFile\0\0
szSrcFile\0szDstFile\0\0

Windows 2000/XP: The MoveFileEx function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved.

Windows 95/98/Me: The MoveFileEx function is not supported. To rename or delete a file at restart, use the following procedure.

To rename or delete a file on Windows 95/98/Me

Check for the existence of the WININIT.INI file in the Windows directory.
If WININIT.INI exists, open it and add new entries to the existing [rename] section. If the file does not exist, create the file and create a [rename] section.
Add lines of the following format to the [rename] section:
DestinationFileName=SourceFileName
Both DestinationFileName and SourceFileName must be short file names. To delete a file, use NUL as the value for DestinationFileName.

The system processes WININIT.INI during system boot. After WININIT.INI has been processed, the system names it WININIT.BAK.
Васкецов Сергей
http://registry.km.ru
Re[2]: Как заменит системные файлы.
От: Donnie  
Дата: 14.07.02 02:28
Оценка:
Здравствуйте vasketsov,

Спасибо большое! Именно то, что нужно
Re[2]: Как заменит системные файлы.
От: Noobi Россия fff
Дата: 19.01.05 12:59
Оценка:
Здравствуйте, vasketsov, Вы писали:

V>Здравствуйте Donnie, Вы писали:


D>>Здравствуйте Все!


D>>Иногда появляется необходимость заменить файлы, используемые в данный момент системой, например, какой-нибудь gdi.exe. Вопрос, как это можно сделать программным способом? Программы установки обычно перегружают комп, после чего файлы оказываются заменёнными. Можно, конечно, кустарным образом прописать досовскую программку в winstart.bat и ею в режиме DOS заменить, что нужно, но ведь должен быть стандартный способ, выводящий после перегрузки надпись "Completed updating system, continuig to load Windows". И потом, указанный кустарный способ не будет работать под Windows NT/2000, хотя и под ними ServicePack'и как-то умудряются заменять почти всё содержимое SYSTEM32.


V>BOOL MoveFileEx(

V> LPCTSTR lpExistingFileName, // file name
V> LPCTSTR lpNewFileName, // new file name
V> DWORD dwFlags // move options
V>);

V>Windows NT/2000/XP: Included in Windows NT 3.1 and later.

V>Windows 95/98/Me: Unsupported (читай ниже как делается)

V>If the dwFlags parameter specifies MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileEx stores the locations of the files to be renamed at restart in the following registry value:


V>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations


V>The PendingFileRenameOperations value is of type REG_MULTI_SZ. Each rename operation stores a pair of NULL-terminated strings. The system uses these registry entries to complete the operations at restart in the same order that they were issued. For example, the following code fragment creates registry entries that delete szDstFile and rename szSrcFile to be szDstFile at restart:


V>MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);

V>MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);

V>The system stores the following entries in PendingFileRenameOperations:


V>szDstFile\0\0

V>szSrcFile\0szDstFile\0\0

V>Windows 2000/XP: The MoveFileEx function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved.


V>Windows 95/98/Me: The MoveFileEx function is not supported. To rename or delete a file at restart, use the following procedure.


V>To rename or delete a file on Windows 95/98/Me


V>Check for the existence of the WININIT.INI file in the Windows directory.

V>If WININIT.INI exists, open it and add new entries to the existing [rename] section. If the file does not exist, create the file and create a [rename] section.
V>Add lines of the following format to the [rename] section:
V>DestinationFileName=SourceFileName
V>Both DestinationFileName and SourceFileName must be short file names. To delete a file, use NUL as the value for DestinationFileName.

V>The system processes WININIT.INI during system boot. After WININIT.INI has been processed, the system names it WININIT.BAK.




А дата у файла должна меняться?

(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)
Re[3]: Как заменит системные файлы.
От: algol Россия about:blank
Дата: 19.01.05 13:45
Оценка: 1 (1)
Здравствуйте, Noobi, Вы писали:

N>А дата у файла должна меняться?

N>(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)

Возможно система обнаружила замену системного файла и автоматически восстановила исходную версию из dllcache. Попробуй заменять файл и в system32/dllcache.
Re[4]: Как заменит системные файлы.
От: Noobi Россия fff
Дата: 19.01.05 14:05
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Noobi, Вы писали:


N>>А дата у файла должна меняться?

N>>(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)

A>Возможно система обнаружила замену системного файла и автоматически восстановила исходную версию из dllcache. Попробуй заменять файл и в system32/dllcache.


А как она узнала? я там всего 2 байта заменил! Причем если делать это вручную в сейф моде до загрузки експлорера — все ОК
Re[4]: Как заменит системные файлы.
От: Noobi Россия fff
Дата: 19.01.05 14:49
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Noobi, Вы писали:


N>>А дата у файла должна меняться?

N>>(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)

A>Возможно система обнаружила замену системного файла и автоматически восстановила исходную версию из dllcache. Попробуй заменять файл и в system32/dllcache.


Файл с такой датой, как тот отсутствует в дллкэше и есть только в систем32. Видимо, функция его просто не меняет


MoveFileEx(buf, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);

if(0==MoveFileEx(dir,buf,MOVEFILE_DELAY_UNTIL_REBOOT))
{
MessageBox(0,"error","DD",MB_OK);
}
Re[4]: Как заменит системные файлы.
От: Noobi Россия fff
Дата: 19.01.05 17:00
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Noobi, Вы писали:


N>>А дата у файла должна меняться?

N>>(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)

A>Возможно система обнаружила замену системного файла и автоматически восстановила исходную версию из dllcache. Попробуй заменять файл и в system32/dllcache.


Замена в дллкэш тоже не помогает + иногда пишет, что найдены нераспознанные версии файлов
Re[4]: Не меняются :((((((((
От: Noobi Россия fff
Дата: 19.01.05 17:35
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Noobi, Вы писали:


N>>А дата у файла должна меняться?

N>>(я все сдеелал так, как там написано, лдаже 4 вар-та попробовал, в реестр вносятся сведения об изменении, а после ребута все равно дата у файла, который я менял старая остается)

A>Возможно система обнаружила замену системного файла и автоматически восстановила исходную версию из dllcache. Попробуй заменять файл и в system32/dllcache.



Ничего не получается! Файл удаляется, но то, куда он должен был скопироваться — не меняется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.