en:docs:fapi:dossystrace

This is an old revision of the document!


Dos16SysTrace

Brief

Writes a trace record to the system trace buffer. It provides a high speed event recording mechanism which may be used by PM and non-PM threads in ring 3 and ring 2 and by detached processes.

Syntax

 APIRET16 APIENTRY16 Dos16SysTrace
        (USHORT major, USHORT cBuffer, USHORT minor, PCHAR pBuffer) 

Parameters

  • major (USHORT) input : Major code which identifies the trace record. Range reserved for user is 245-255. Valid range 0-255
  • cBuffer (USHORT) input : Length of optional buffer. Valid range
    • 0 - 512 (before 4.0 FP 10 and 3.0 FP 35)
    • 0 - 4099 (from 3.0 FP35 and 4.0 FP10 onwards).
  • minor (USHORT) input : Minor code which identifies the trace record. Major-minor code pair should uniquely identify the trace record. Valid range 1 - 255
  • pBuffer (PCHAR) input : Pointer to optional buffer. If cBuffer is 0, then pBuffer is ignored.

Return Code

ulrc (APIRET) returns

Dos16SysTrace returns one of the following values

  • 0 NO_ERROR
  • 150 ERROR_SYSTEM_TRACE

Remarks

DosSysTrace creates a trace record that includes the following items:

  • Header Major code, minor code, time stamp, PID of logging process
  • Optional System Data Controlled by the TRACE command
  • Optional User Data Specified by the pBuffer parameter

Example Code

int main(int argc, char *argv[], char *envp[]){
   APIRET16 rc=0;          /* default return code */
   USHORT major=255;       /* default major code */
   USHORT minor=1;         /* default minor code */
   USHORT cBuffer=0;       /* default buffer length */
   PCHAR  pBuffer=NULL;    /* default buffer address */
 
   if (argc>1)
   {
      pBuffer = argv[1];
      cBuffer = strlen(argv[1]);
   }
 
   if (argc>2) major = atol(argv[2]);
   if (argc>3) minor = atol(argv[3]);
 
   rc = Dos16SysTrace(major, cBuffer, minor, pBuffer);
 
   if (rc) printf("DosSysTrace retuned rc=%u\n", rc);
 
   return rc;
}