-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+ Vady`20\F606? X\4208BEQL\080410$`20\1408\0909\0B0B;`20If`20EQL...`20NO\3F09MOVL\0804#SS$_ILLS VELF,R0`20\370Asignal`20reference`20to`20itself\4509RET X X10$:`20\5206AB\D311\530A;`20Get`20VA`20of`20the`20\260B`20vector X\DC09ICL3\9D04`5EX1FF,R0,VECTOR`20\4B09Firs\4D05in\4D05associated`20page X\2A08ADDL\4A0B\4706\0707+4\4A04La\4925\930AC`5E\9508BWPAGE\9308BYTE`20within V`20page`20offset X X\4308MOVW\0804(R0)+,SS.MASK`20\1E08\4304New`20vector`20should`20preserve`20mas Vk\4A0CL`20\4A07,CHM\8407\4A0Bnew`20routine`20needs`20current`20\2F05# X\4C0CC3\D905X200,@VECTOR,SS.\DD06;`20Save`20contents`20of`20SYS$SETDDIR\EA05 V\4D0A$CMEXEC_S`20\1006ROUTIN=EXEC$ROUTIN\AB06;`20to`20executi\DD04ode X\4408BLBS\3C050,20$ X\1708RET X X20$:`20\B506L`20\2C04WPAGE,R0`20\FF0C\6004byte`20offset\6C04service`20vector V\FD0CAB\0803\EE07`5BR0`5D\4D0D;`20locate`20it`20in`20the`20copied\F806\470BQ V`20\4706HOOK,(R0)`20\8F0Dreplace`20original`20with`20'HOOK' X\4809$CMKRNL_S`20\F407OUTIN=KRNL$ROUTINE`20\5006to`20kernel`20mod\890ARET`20 V\790C\0D0D\3905all`20done! X;------\0606\0C0C\1818\1E1E\8409.ENTRY`20`20EXEC\B608,`5EM\2D09MO VVL\0804#R\2906_LEN,R1`20\B912place`20length`20of`20code`20in`20r1\4D09JSB`20 V\0804G`5EEXE$ALOP1PROC\4D13allocate`20that`20much`20p1`20space\4E09BLBS\0804R0 V,10$\4511\4E0Breturn`20if`20error`20occurred\4B09RET X X10$:`20\F30BR2,SS.ABSOLUTE_ADR\5810need`20to`20know`20where\0E04jump\5A09MOVC3 V\0803#ROUTINE_LEN,SS_HOOK_RTN,(R2)\4D05move`20code`20into`20p1`20area\490C V\9605\930F,R2`20\E609cover`20base`20of`20P1`20allocation X X_CHAN_E=CHAN_E-S\840A\4108\3905relative`20offset\D104exec`20channel`20storage X_PMTAST=PMTAST\4F2Cwrite`20attention`20AST X_NAMPTR=NAMPTR\4E2Cmbx`20descr.`20pointer X_NAMBUF=\0706\4D37buffer X X`20\3406`20$CREMBX_S\1007CHAN=_CHAN_E(R2),-\5D08create`20temp.`20mbx.`20`20Ass Vigning\4F09\0808\0808PROMSK=#`5EC`20\4F08hannel`20at`20exec`20mod V\5D03o`20keep\4F09BLBC\0804R0,20$\6518\4F04\E304al\F704after`20image`20rundown V X\2808MOVAB`20`20`20_NAMBUF(R2),_NAMPTR(R2)\4804ove`20address`20of`20buff\4F04n Vto`20pointer\4E1DDVI.ITMLST+4\4E1Eitmlst X X\4E08$GETDVI_S\1007CHAN=_CHAN_E(R2),-`20\EC07get`20the`20\F404device`20name. V\4B09\0808\0808\9106=D\9C09\2A09BLBC\0804R0,20$\8D0BQIO_\8A03EFN=#45,\8D1Aqueu Ve`20\8F04executive`20mode X\8D18FUNC=#IO$_SETMODE!IO$M_WRTATTN,\5907\5B04writ\481AP1=_PMTAST(R2),P2=#0 V`20\3805attention`20AST\4009MOVL\0804#SS$_NORMAL,R0\5812;`20done`20in`20\D10F2 V0$:\2104RET X;------\0606\0C0C\1818\1E1E X;`20The`20vector`20we`20want`20to`20'hook'`20is\9004a`20page`20of`20virtual V`20address`20space`20that`20was X;`20PFN`20mapped.`20`20(Note:`20Window`20bit`20(#21)\5604set`20in`20PTE X;--- X;SDA>`20SHOW`20PROCESS/PAGE_TABLE`20SYS$SETDDIR;0 X;Proc\7E04\9605table X;---\DC12`20`20\0303`20`20ADDRESS\0C05SVAPTE\0A04\0704**\0A04TYPE\1003ROT`20 V`20BITS`20PAGTYP\1B04LOC`20STATE X;\4D077FFEE200\0C048095FFC4`20FC202469`20\1503VALID`20UR\0B03M`20`20`20K X\8809\0808\1010**** X;SDA>`20EVALUATE/PTE`20\5606B4\2606.--`20Page`20was`20PFN`20mapped`20(Window V`20bit`20set) X\7021`7C X;`7C31\0D0728`7C27`20\0C074`7C23\2306`2020`7C19\180716`7C15`20\0C072`7C11 V\4A088`7C7 X;+--+--\0606\0C0C\1818\1E1E> X;`7C1`20`7C`20`201`201\0404\8C03\0F03--`7C`200`200`20\09051`7C\DC1A002469 V\9553Vld`20`20Prot=`20UR`20`20`20M`20\6F04Own=K`20\0A04W`20\9015Page`20Frame V`20Number X;`20\1A0Bis`20Active`20and`20Vali\6603\DE1A\0505Y X;---\2721\1C1C`7C X;`20This`20page`20fr\9F04number\9204used`20by`20all`20processes`20which`20ha V\AC03the`20`7Cs\3504VA\4305s X;`20PFN`20mapped`20into\2505\3E07.`20`20It`20is`20also\1905\2D04of\0B05S0`20se Vrvice`20vector.\E045SDA>`20SHOW`20PAGE_TABLE`20RMS$SETDDIR;1\4322ystem`20page V`20table\8630-(Same\ED04!) X;------\0606-----\D532\0B08ADDRESS`20\0C04SVAPTE\0A04\0704**\0A04TYPE\1003ROT V`20`20BITS`20PAGTYP`20`7C`20`20LOC`20STATE X\4E0880000400\0C06B26A08`20FC002469`20\1503VALID`20UR\0B03M`20`20`20K`20\9112 V\B418**\9106\D41BSDA>`20EVALUATE/PTE`20\7C06B4\5D20\8629\4323`7C31`20\0D0628 V`7C27`20\0C074`7C23\0C080`7C19\0C0716`7C15`20\0C072`7C11`20v\0D068`7C7 X;+--+--\0606\0C0C\1818\1E1E> X;`7C1`20`7C`20`201`201\0404\AF03\0F03--`7C`200`200`20\0906\1E03\DC18002469 V\9553Vld`20`20Prot=`20UR`20`20`20M`20\6F04Own=K`20\0A04W`20\9015Page`20Frame V`20Number X;`20\1A0Bis`20Active`20and`20Valid X;--- X;`20To`20modify`20the`20system`20service`20vector`20on`20a`20per-process`20bas Vis,`20we`20need`20\3A04VA X;`20page`20to`20be`20mapped`20by\3B03unique`20PFN.`20\7104do`20th\4107will`20s Vave`20the`20contents X;`20of\1206urrent`20VA\5E06(previously`20copi\7F04o`20SS.PAGE`20in`20user V\D304e)\ED05then, X;`20delete\7805\4C08\8D03A`20new`20PFN\B005ing`20is`20created`20us\1104\8504$C VRETVA`20system X;`20service,`20specifyi\2907original\6005's`20VAs.\F303he`20saved`20\E008`20( V\B207) X;`20ar\F904\CB08\A205new\E004\8907demand`20zero`20(DZRO)`20page\E005protection V`20is\9A05t`20\4605at`20of`20other`20pages`20in\A405\C506\C308`20vector`20tabl Ve\AC03NOTE:`20Since X;`20we`20have`20dele\8A04\4004VA\7E06containi\FB07\5715s`20from\2004 X;`20process,`20we`20can`20NOT`20use\3E14macros`20or`20reference\2705\5607 X;`20\CD07P1\BA06`20until\1305contents`20are`20copied`20back`20into\2205new`20 V\C603Page. X;`20Therefore\9A05will`20call`20\9805\CF17`20S0`20table. X;--------\0808\1010\2020\0E0E X;`20RTFM:`20VAX/VMS`20IDSM`20v5.2,`20Ruth`20Goldenberg,`20EY-C171E-DP,`20Ch.15 V,`20Mem.`20Mgt.`20S.S. X;`20Sec:`2015.4.1.2`20PFN-Mapped`20Process\2104tion,`20\2A087`20$SETPRT`20Syst Vem`20Service,\4E0B3.1`20`20$CRETVA\2710`20`20\26085.3\2603DELT\2612 X;\FF13\1313\2626-- X`20`20`20\0303`20`20.ENTRY`20`20KRNL$ROUTINE,`5EM\2D09MOVAB`20 V\2D0FVECTOR2`20\1803;`20lock\1F0D`20in`20the`20working X\4B16TN_END\4B08+4\4B04set`20to`20prevent`20page`20faulting`20with X\4C08$LKWSET_S`20\1006INADR=\980A;`20IPL>=IPL$_ASTDEL\3B09BLBS\0804R0,10$ V\1709RET X X10$:`20\AB0B\5106\F00C\2D06\F607\A105containing`20\2806`20in`20the X\F810\1E06+4\F40C\4D06work\4004set.`20`20We`20will`20be`20touching\F82Bthis V`20also`20at`20IPL>=IPL$_ASTDEL\4809BLBS\F6050,20$ X\1708RET X;------\0606\0C0C\1818\1E1E X;`20Raise\8C04`20to\0704\8E08\0F04block`20AST`20delivery.`20`20Specifically, V`20kernel`20mode X;`20ASTs`20which`20reference`20the`20system`20service`20vector`20table`20in V`20process`20P1`20space. X;`20There`20may`20be`20no\4317page`20avail\4C05then`20\B104is\B408ed! X;`20Ouch!`20Ac\6705violation`20in`20\C20B\DE04\6607huts`20down,`20_REAL_`20_FA VST_!!! X;--- X;`20For`20similar`20reasons,\ED05newly`20created`20DZRO\A706is`20LOCKed`20into V\2B05working X;`20set`20to`20avoid`20problems`20of`20faulting\AC04\3304\4B05should\100A_NOT_ V`20be`20valid X;`20when/if`20it\7704referenced`20at`20eleva\9B04IPLs\F403Ouch!`20Nasty`20PGFI VPLHI`20bugcheck!\F107---\0606\0C0C\1818\1E1E X20$:`20`20`20`20SETIPL`20`20#IPL$_ASTDEL\1804\0404\0404;`20block`20AST`20deliv Very X X`20\1E07CLRQ\0804-(SP)`20\380C\3E08acmode`20`26`20retadr`20(not`20specified) X\2A08PUSHAB`20`20VECTOR\4A14inadr\7A0AALLS\0803#3,G`5EEXE$DELTVA`20\300Aneed V`20to`20call`20S0`20vector`20here`20because X\2E08BLBS\0804R0,30$\7E14we'll`20have`20nothing\5C04return`20to!!! X\2D08RET X\4312\1212\5906out`20with`20the`20old\E904\110Anew X30$:`20\F304LRQ`20\0803-(SP)`20\4C14acmode`20`26\9804adr`20(not`20specified) X\2A08PUSHAB`20`20VECTOR\4A14inadr\3009CALLS`20`20`20#3,G`5EEXE$CRETVA\300Bcrea Vte`20DZRO`20page`20for`20S.S.`20vectors X\2C08BLBS\0804R0,50$\7C15f`20an`20error`20occurs`20here,`20we'd`20best\4D09 V\3F12\4D10$#!+can`20the`20process! X40$:`20\1F03SETIPL\D8030`20\3F17lower`20\2504or`20we'll`20crash`20on`20$EXIT V\8B09PUSH\4B03`20#SS$_NORMAL\1C09CALL\F504#1,G`5EEXE$EXIT\680Dbye`20bye X X50\9B06CLRQ\0804-(SP)`20\9B14acmode`20`26`20retadr`20(not`20specified) X\990CAB`20`20VECTOR\4A14inadr\AD123,\AD06LKWSET\300Block`20'em`20down X\1808BLBC\0804R0,40$\6814Error?`20Should'nt`20be!`20Outta`20here! X X\2C08MOVC3`20\8403`5EX200,SS.PAGE,@V\C407;`20put`20the`20table`20back! X;------\0606\0C0C\1818\1E1E X;`20Without`20an`20intervening`20REI,`20it`20is`20unwise`20use`20a`20modified V\2D03struction`20stream! X;`20Therefore,`20we'll`20call`20SETPRT`20in\D005S0\D306. X\CE50`20`20`20`20\0404PUSHL`20`20`20#0\1208\0808\0606;`20prvprt`20(not`20spec V\D405) X\4111PRT$C_UR`20\4112ot\2F09CLRQ\0804-(SP)`20\7014acmode`20`26`20retadr`20 V\791CAB`20`20VECTOR\4A14inadr\7A0AALLS\A9045,G`5EEXE$SETPRT\300Bset`20page V\B205.`20like`20rest`20of`20table X\2C08RET XKRNL$RTN_END: X;------\0606\0C0C\1818\1E1E X;`20The`20new`20service`20vector\8906`20now`20has`20the`20look`20and`20feel V`20\AC04he`20original`20with X;`20two`20exceptions.`201)\6105\5507for`20SYS$SETDDIR`20\5B04been`20modified V`20to`20call`20the X;`20'HOOK'`20routine.`202)\4E05Virtual`20Page`20is`20mapp\3C04hrough`20a`20uni Vque`20PFN. X;--- X;SDA>`20SHOW`20PROCESS/PAGE_TABLE\930C;0 X;Process`20page`20table X;------\0606\0606 X;`20`20`20\0303`20`20ADDRESS\0C05SVAPTE\0A04\0707\0303TYPE\1003ROT`20`20BITS V`20PAGTYP\1B04LOC`20STATE X\4E087FFEE200\0C04809307C4`20F8001E7A`20\1503VALID`20UR\3007K`20\D107`20ACTIV V\690387 X;\F107EVALUATE/PTE`20\450669 X; X;`7C31`20\400628`7C27`20\0C074`7C23\0C080`7C19\0C0716`7C15`20\0C072`7C11\FA088 V`7C7 X;+--+--+\0606\0C0C\1818\1E1D> X;`7C1`20`7C`20`201`201\0404`20`20`7C0`20`7C--`7C`200`20\0908\1E03\8208\0A0A V\0606001E7A\9553Vld`20`20Prot=`20UR`20`20`20M`20\6F04Own=K`20\0A04W`20\9015Pag Ve`20Frame`20Number X;`20\1A0Bis`20Active`20and`20Valid X;------\0606\0C0C\1818\1E1E X`20\7107.END\0804INSTALL$SS_HOOK $ call unpack SSHOOK.TXT;1 758392606 "" $ v=f$verify(v) $ exit