[comp.sys.apollo] proc2_$get_info 'secret' goodies

thompson@ELROND.SSEC.HONEYWELL.COM (John Thompson) (12/06/90)

(I was sure I kept the original message....)

A bit ago, people were asking about calls to find out process information.
Someone mentioned that there was extra stuff in proc2_$get_info that is
returned if you're sneaky enough to ask for it.  I decided to poke around,
and see what I could see.

Turns out that they're quite right.  There's (as I found it) 192 bytes
of information beyond the standard 'proc2_$info_t' type that will be returned
if you pass a large enough structure, and tell Domain/OS that it's that large.
(Anything above 192 (up to 1024) was 0, so I assume there's naught more.)

Here's the extended proc2_$info_t declaration, with everything that I could
tag listed.  Note that there are still unknown values.  Anyone who can 
discover them should feel free to sned that info to me.  :-)  
It should also go without saying that this is _NOT_ guaranteed to be true,
nor do I or Honeywell support it.  HP/Apollo probably won't support it either,
but I won't speak for them.

As people have mentioned, it might be a waste of time to use this stuff, 
since HP seems bent on killing Domain/OS.
<flame on>
I DON'T WANT AN HP MACHINE -- I WANT MY APOLLO!!!!!!!!!!!!!!!  IF I CAN'T
GET THAT, I MIGHT AS WELL GET A SUN.
<flame off>

============================================================================
typedef 
struct {
        short int       len;
        char            name[32];
       } string_t;

typedef 
union  {
        short int       i;             /* Just a convenience for unknowns */
        pinteger        p;
       } unknown_t;

typedef 
struct {
        uid_$t         stack_uid;      /* uid of user stack               */
        linteger       stack_base;     /* base address of user stack      */
        proc2_$state_t state;          /* ready, waiting, etc.            */
        pinteger       usr;            /* user sr                         */
        linteger       upc;            /* user pc                         */
        linteger       usp;            /* user stack pointer              */
        linteger       usb;            /* user sb ptr (A6)                */
        time_$clock_t  cpu_total;      /* cumulative cpu used by process  */
        unsigned short priority;       /* process priority                */
        /* Here are the extensions                                        */
        uid_$t         person_uid;     /* user's UID (not Unix ID)        */
        uid_$t         group_uid;      /* user's GID (not Unix ID)        */
        uid_$t         org_uid;        /* user's OID (not Unix ID)        */
        unknown_t      unknown1[11];   /* 22 bytes unknown                */
                                       /* bytes 9..12 appear to be nodeID */
        short int      low_pri;        /* low priority of process (1..16) */
        short int      high_pri;       /* hi  priority of process (1..16) */
        long unsigned  exec_faults;    /* execute faults                  */
        long unsigned  data_faults;    /* data faults                     */
        long unsigned  disk_pageIO;    /* disk paging                     */
        long unsigned  net_pageIO;     /* net  paging                     */
        unknown_t      unknown2[5];    /* 10 bytes unknown                */
        short int      unix_PID;       /* Unix process ID                 */
        short int      unix_PPID;      /* Unix Process Parent ID          */
        short int      unix_PGID;      /* UNix Process Group ID           */
        unknown_t      unknown3[2];    /* 4 bytes unknown                 */
        uid_$t         prog_disk_uid;  /* file uid of executable object   */
        string_t       progname;       /* leafname of invoked program     */
        string_t       procname;       /* name of process                 */
        uid_$t         unknown_uid;    /* in CRP connections, this was    */
                                       /* the CRP device -- as such, it   */
                                       /* seems related to I/O.  Child    */
                                       /* processes get the same value.   */
                                       /* However, it does NOT appear to  */
                                       /* be stdin, stdout, or errout ??? */
        short int      unknown_int1;   /*                                 */
        time_$clock_t  cpu_time;       /* cpu time again.  Why????        */
        unknown_t      unknown4[6];    /* 12 bytes unknown                */
        short int      unknown_int2;   /* appears to always be 0x411c ??? */
       } big_proc2_$info_t;
============================================================================

-- jt --
John Thompson (jt)
Honeywell, SSEC
Plymouth, MN  55441
thompson@pan.ssec.honeywell.com

As ever, my opinions do not necessarily agree with Honeywell's or reality's.
(Honeywell's do not necessarily agree with mine or reality's, either)