From: SMTP%"DSJ@WKUVX1.WKU.EDU" 7-FEB-1995 12:26:09.95 To: EVERHART CC: Subj: OCTOBER94.RGSTRY X-FileServer: Digital Systems Journal File Server Date: Tue, 07 Feb 1995 11:24:58 CST Sender: DSJ-Mgr@WKUVX1.WKU.EDU Errors-To: DSJ-Mgr@WKUVX1.WKU.EDU Warnings-To: <> From: DSJ-Mgr@WKUVX1.WKU.EDU Reply-To: DSJ@WKUVX1.WKU.EDU Subject: OCTOBER94.RGSTRY To: EVERHART@arisia.gce.com $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : RGSTRY $! By : Hunter Goatley $! Date : 7-NOV-1994 09:58:47.46 $! Using: VMS_SHARE 8.5-1, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! To unpack this archive: $! Minimum of VMS 4.4 (VAX) / OpenVMS 1.0 (Alpha) is required. $! Remove the headers of the first part, up to `cut here' line. $! Execute file as a command procedure. $! $! The following file(s) will be created after unpacking: $! 1. RGSTRY.DSJ;1 $! $ set="set" $ set symbol/scope=(nolocal,noglobal) $ f="SYS$SCRATCH:."+f$getjpi("","PID")+";" $ if f$trnlnm("SHARE_UNPACK") .nes. "" then $ - f=f$parse("SHARE_UNPACK_TEMP",f) $ e="write sys$error ""%UNPACK"", " $ w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack:subroutine!P1=file,P2=chksum,P3=attrib,P4=size,P5=fileno,P6=filetotal $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT/NOJOURNAL 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m; LOOP m:=MARK(NONE);EXITIF m=END_OF(CURRENT_BUFFER);DELETE(m);EXITIF INDEX( ERASE_LINE,"-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE; PROCEDURE ProcessLine LOCAL c,s,l,b,n,p;s := ERASE_LINE;c := SUBSTR(s,1,1);s := s-c;IF c = "X" THEN SPLIT_LINE; ENDIF;MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1);p := p+1;CASE c FROM ' ' TO '`' ['`'] : COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[' ']: p:=p+1;[INRANGE,OUTRANGE] : COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE;PROCEDURE Decode(b)LOCAL m; POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");o:=CREATE_BUFFER(f,f);Decode(o);WRITE_FILE(o, GET_INFO(COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl='f' 'f'-1 'f' $ fa=f$getdvi(f$parse(f),"ALLDEVNAM") $ Pa=f$getdvi(f$parse(P1),"ALLDEVNAM") $ if fa .eqs. Pa then $ rename &f 'f$parse(P1)' $ if fa .nes. Pa then $ copy &f 'f$parse(P1)' $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' Xenumreg.c X X#include`20 X#include`20 X#include`20 X X/*`20local`20constants`20*/ X X#define`20KEYNAME_MAX`20255 X#define`20VALUENAME_MAX`2032767 X#define`20VALUEDATA_MAX`208191 X#define`20MAXLEVEL`2050 X X/*`20function`20prototypes`20*/ X Xlong`09list_the_registry(HKEY`20this_level_key,`20DWORD`20nest_level); X Xlong Xmain() X`7B X`09long`09sts; X X`09/*`20call`20the`20main`20routine`20for`20each`20of`20the`20two`20"real"`20t Vop-level`20subkeys`20*/ X X`09printf("HKEY_LOCAL_MACHINE`5Cn"); X`09sts`20=`20list_the_registry(HKEY_LOCAL_MACHINE,`201); X`09if`20(sts`20==`20ERROR_SUCCESS) X`09`7B X`09`09printf("HKEY_USERS`5Cn"); X`09`09sts`20=`20list_the_registry(HKEY_USERS,`201); X`09`7D X`09printf("hit`20any`20key`20to`20continue...`20"); X`09getch(); X`09return`20sts; X`7D X Xlong Xlist_the_registry(HKEY`20this_level_key,`20DWORD`20nest_level) X`7B X`09DWORD`09i; X`09HKEY`09subkey; X`09char`09valuename`5BVALUENAME_MAX+1`5D,`20 X`09`09`09valuedata`5BVALUEDATA_MAX+1`5D, X`09`09`09keyname`5BKEYNAME_MAX+1`5D, X`09`09`09indentstr`5BMAXLEVEL*4+1`5D; X`09DWORD`09valuenamesize,`20valuedatasize,`20keynamesize,`20typecode; X`09LONG`09sts; X`09FILETIME`20changetime; X X`09/*`20set`20up`20the`20indent`20string`20for`20the`20display`20*/ X X`09strcpy(indentstr,`20""); X`09for`20(i`20=`200;`20i`20<`20nest_level;`20i++) X`09`09strcat(indentstr,`20"`20`20`20`20"); X X`09/*`20list`20the`20values`20at`20this`20level`20*/ X X`09i`20=`200; X`09while`20( X`09`20valuenamesize`20=`20VALUENAME_MAX, X`20`20`20`20`20valuedatasize`20=`20VALUEDATA_MAX, X`09`20sts`20=`20RegEnumValue( X`09`20`20this_level_key, X`09`20`20i, X`09`20`20valuename, X`09`20`20`26valuenamesize, X`09`20`20NULL, X`09`20`20`26typecode, X`09`20`20valuedata, X`09`20`20`26valuedatasize), X`09`20sts`20==`20ERROR_SUCCESS) X`09`7B X`09`09i++; X`09`09printf("%s%-25s",`20indentstr,`20valuename); X`09`09switch`20(typecode) X`09`09`7B X`09`09case`20REG_SZ`20: X`09`09`09printf("`20REG_SZ:`20%-20s`5Cn",`20valuedata); X`09`09`09break; X`09`09case`20REG_DWORD`20: X`09`09`09printf("`20REG_DW:`20%d`5Cn",`20valuedata); X`09`09`09break; X`09`09default`20: X`09`09`09printf("`20other:`20length`20%d`5Cn",`20valuedatasize); X`09`09`09break; X`09`09`7D X`09`7D X X`09if`20(sts`20!=`20ERROR_NO_MORE_ITEMS) X`09`09return`20sts; X X`09/*`20now,`20for`20each`20subkey,`20display`20the`20subkey`20and`20then`20ca Vll`20ourselves X`09`20*`20to`20display`20its`20contents`20*/ X X`09i`20=`200; X`09while`20( X`09`20keynamesize`20=`20KEYNAME_MAX, X`09`20sts`20=`20RegEnumKeyEx( X`09`09this_level_key, X`09`09i, X`09`09keyname, X`09`09`26keynamesize, X`09`09NULL, X`09`09NULL, X`09`09NULL, X`09`09`26changetime), X`09`20sts`20==`20ERROR_SUCCESS) X`09`7B X`09`09i++; X`09`09sts`20=`20RegOpenKeyEx( X`09`09`09this_level_key, X`09`09`09keyname, X`09`09`090, X`09`09`09KEY_ENUMERATE_SUB_KEYS`20`7C X`09`09`09`20KEY_QUERY_VALUE`20`7C X`09`09`09`20KEY_READ, X`09`09`09`26subkey); X X`09`09switch`20(sts) X`09`09`7B X`09`09case`20ERROR_SUCCESS`20: X`09`09`09printf("%s%-30s`5Cn",`20indentstr,`20keyname); X`09`09`09sts`20=`20list_the_registry(subkey,`20nest_level+1); X`09`09`09CloseHandle(subkey); X`09`09`09break; X`09`09 X`09`09case`20ERROR_ACCESS_DENIED`20: X`09`09`09printf("%s%s`20%s`5Cn",`20indentstr,`20keyname,`20"(access`20denied)" V); X`09`09`09sts`20=`20ERROR_SUCCESS; X`09`09`09break; X X`09`09default`20: X`09`09`09printf("%s%-30s`5Cn",`20indentstr,`20keyname,`20"unknown`20error`20co Vde"); X`20`20`20`20`20`20`20`20`20`20`20`20break; X`09`09`7D X`09`09if`20(sts`20!=`20ERROR_SUCCESS) X`09`09`09break; X`09`7D X`09if`20(sts`20==`20ERROR_NO_MORE_ITEMS) X`09`09return`20ERROR_SUCCESS; X`09else X`09`09return`20sts; X`7D X X(end) X X= X Xsetreg.c X X X#include`20 X#include`20 X#include`20 X X/*`20local`20constants`20*/ X X#define`20KEYNAME_MAX`20255 X#define`20VALUENAME_MAX`2032767 X#define`20VALUEDATA_MAX`208191 X#define`20MAXLEVEL`2050 X X#define`20VALUE1`20"Kernel`20Mode`20Systems" X#define`20VALUE2`20"Unauthorized`20Access`20is`20Prohibited!" X X/*`20forward`20references`20to`20routines`20*/ X Xlong`20modifyRegValue(HKEY`20parentKey, X`09char`20*keyString, X`09char`20*valueName, X`09void`20*valuevalue, X`09DWORD`20valuesize, X`09DWORD`20valuetype); X`20 Xlong Xmain() X`7B X`09long`09sts; X X`09sts`20=`20modifyRegValue(HKEY_LOCAL_MACHINE, X`09`20"SOFTWARE`5C`5CMicrosoft`5C`5CWindows`20NT`5C`5CCurrentVersion`5C`5CWinL Vogon", X`09`20"LegalNoticeCaption", X`09`20VALUE1,`20 X`09`20strlen(VALUE1), X`09`20REG_SZ); X X`09if`20(sts`20!=`20ERROR_SUCCESS) X`09`09return`20sts; X X`09sts`20=`20modifyRegValue(HKEY_LOCAL_MACHINE, X`09`20"SOFTWARE`5C`5CMicrosoft`5C`5CWindows`20NT`5C`5CCurrentVersion`5C`5CWinL Vogon", X`09`20"LegalNoticeText", X`09`20VALUE2,`20 X`09`20strlen(VALUE2), X`09`20REG_SZ); X X`09return`20sts; X`7D X`09`09 Xlong XmodifyRegValue( X`09HKEY`20`20parentKey, X`09char`20*keyString, X`09char`20*valueName, X`09void`20*valuevalue, X`09DWORD`20valuesize, X`09DWORD`20valuetype) X`7B X`09char`20`20remKeyString`5BKEYNAME_MAX+1`5D, X`09`09`20`20thisKeyString`5BKEYNAME_MAX+1`5D, X`09`09`20*bcksls; X X`09HKEY`20`20subkey; X`09long`20`20sts; X X`09//`20pick`20off`20the`20first`20(maybe`20only)`20piece`20of`20the`20keyStri Vng X X`09bcksls`20=`20strstr(keyString,`20"`5C`5C"); X`09if`20(bcksls`20==`20NULL) X`09`7B X`09`09strcpy(thisKeyString,`20keyString); X`09`09strcpy(remKeyString,`20""); X`09`7D X`09else X`09`7B X`09`09strncpy(thisKeyString,`20keyString,`20bcksls-keyString); X`09`09thisKeyString`5Bbcksls-keyString`5D`20=`20'`5C0'; X`09`09strcpy(remKeyString,`20bcksls+1); X`09`7D X X`09//`20open`20the`20key`20at`20this`20level X X`09sts`20=`20RegOpenKeyEx( X`09`09parentKey, X`09`09thisKeyString, X`09`090, X`09`09KEY_ENUMERATE_SUB_KEYS`20`7C X`09`09`20KEY_QUERY_VALUE`20`7C X`09`09`20KEY_READ`20`7C X`09`09`20KEY_SET_VALUE, X`09`09`26subkey); X X`09if`20(sts`20!=`20ERROR_SUCCESS) X`09`09return`20sts; X X`09//`20if`20there`20is`20more`20to`20the`20key`20string,`20call`20recursively V X`09//`20to`20do`20the`20next`20level,`20else`20do`20the`20change X X`09if`20(bcksls`20!=`20NULL) X`09`09sts`20=`20modifyRegValue( X`09`09`09subkey, X`09`09`09remKeyString, X`09`09`09valueName, X`09`09`09valuevalue, X`09`09`09valuesize, X`09`09`09valuetype); X`09else X`09`09sts`20=`20RegSetValueEx( X`09`09`09subkey,`20 X`09`09`09valueName,`20 X`09`09`090, X`09`09`09valuetype,`20 X`09`09`09valuevalue, X`09`09`09valuesize); X X`09//`20close`20the`20handle`20we`20just`20opened,`20and`20return X X`09CloseHandle(subkey); X`09return`20sts; X`7D X X(end) $ call unpack RGSTRY.DSJ;1 1081447319 "" 11 1 1 $ v=f$verify(v) $ exit