Back in the day, I was involved in a project that needed to make a small
routine located in non-paged pool accessible from all processes on a
system. The problem was, that non-paged pool pages are protected at
ERKW - Exec Read, Kernel write. My routine needed to execute in User mode,
and thus could not work in those pages. I needed a routine to alter the
protection of the pages that the code resided in.
I wrote a little utility that would allow me to examing and change page
protection settings from DCL. It's a simple thing, really - it gets a
command line, parses it with TPARSE, and then looks up the existing page
protection in its PTE. If a new protection was specified on the command
line, it is updated. If not, it just prints out the existing value.
The syntax is simple...
Print the page protection for an address.
$ aprt 81000000
Page 81000000 protection = URKW
Print the page protections for the pages beteen address1 and address2
$ aprt 81000000:81000400
Page 81000000 protection = URKW
Page 81000200 protection = URKW
Page 81000400 protection = URKW
To modify a page...
$ aprt 81000000/prot=urew
Page 81000000 protection = URKW
To modify a range of pages...
$ aprt 81000000:81000400/prot=urew
Page 81000000 protection = URKW
Page 81000200 protection = URKW
Page 81000400 protection = URKW
Note that the protection listed is the protection BEFORE the change is
applied
The page protection can have values of...
NA ;no access
RESERVED ;invalid protection - never used
KW ;kernel write
KR ;kernel read
UW ;user write
EW ;executive write
ERKW ;exec read kernel write
ER ;exec read
SW ;supervisor write
SREW ;supervisor read exec write
SRKW ;supervisor read kernel write(bet this is never used)
SR ;supervisor read
URSW ;user read supervisor write
UREW ;user read exec write
URKW ;user read kernel write
UR ;user read
Now, I gotta warn ya - this utility is intended for people who know what
they are doing. You can jam up your system mighty quick if you set page
protections "funny". I would be particularly cautious about changing the
protection of pages that don't have write access to having it - I'm not
sure what backing store would get used if the page faulted.... so proceed
with caution...and as always, proceed at your own risk.
Here's aprt.mar
APRT.MAR
To build the program...
$ mac aprt
$ link aprt
$ aprt :==$disk[directory]aprt.exe
You need to substitute the disk and directory spec where aprt.exe is located.
No comments:
Post a Comment
Comments?