home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / book / pdguide.inf (.txt) < prev    next >
OS/2 Help File  |  1999-05-12  |  498KB  |  9,648 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. About This Book ΓòÉΓòÉΓòÉ
  3.  
  4. OS/2 Warp 4 consists of various products including OS/2 Warp Version 4, 
  5. BonusPak, IBM's OS/2 implementation of Sun Microsystems, Inc.'s Java 
  6. technology, VoiceType for OS/2 Warp, and networking products. 
  7.  
  8. This book provides programmers with guide and reference information for 
  9. collecting and managing problem determination data using OS/2 Warp Version 4. 
  10.  
  11. This book first provides conceptual and introductory information about OS/2 
  12. Warp Version 4 First Failure Support Technology (FFST). This sophisticated and 
  13. powerful tool requires thoughtful planning and code instrumentation.  These 
  14. topics present planning, setup, and examples that are used for collecting and 
  15. managing problem determination data. 
  16.  
  17. Separate sections are devoted to understanding the aids that are provided for 
  18. tracking, collecting, storing, and formatting problem determination data, such 
  19. as traces, dumps, and error logs. 
  20.  
  21. After reading this book you should understand the benefits of FFST and know how 
  22. to instrument your code.  This allows you to take advantage of the technology 
  23. and tools that are associated with problem determination data.  You should also 
  24. know how to use the APIs, trace, error logging, and dump functions.  These 
  25. functions retrieve, format, and analyze problem determination data. 
  26.  
  27. This book assumes that you have the IBM Developers Toolkit for OS/2 Warp 
  28. Version 4 installed and you are developing application programs. In the 
  29. chapters of this book refer to the IBM Developers Toolkit simply as the 
  30. Toolkit. 
  31.  
  32.  
  33. ΓòÉΓòÉΓòÉ 1.1. Related Publications ΓòÉΓòÉΓòÉ
  34.  
  35. The following publications contain additional information about the OS/2 Warp 
  36. Version 4 product: 
  37.  
  38.      OS/2 Warp Version 4 CP Reference in the Toolkit 
  39.      OS/2 Warp Version 4 Command Reference in the Toolkit 
  40.      Trace document in the Serviceability and Diagnostic Aids folder if the 
  41.       folder is installed 
  42.      Trace Customizer in the Toolkit 
  43.      DMI Programmer's Guide in the Toolkit 
  44.      SystemView Agent Client Guide in the Tasks folder 
  45.  
  46.  
  47. ΓòÉΓòÉΓòÉ 2. Introduction to Collecting and Managing Problem Determination Data ΓòÉΓòÉΓòÉ
  48.  
  49. Ideally, programs run forever, error-free, and within their performance 
  50. targets.  However, code failures do occur.  When this happens, programmers need 
  51. problem analysis tools and techniques that help find problems as quickly as 
  52. possible. 
  53.  
  54. OS/2 Warp Version 4 provides the architecture, tools, and support to help you 
  55. collect and manage problem determination data.  The goal is to get your code 
  56. back on track (that is, service the code) as quickly as possible. 
  57.  
  58. This chapter introduces the problem analysis elements and techniques that are 
  59. available to you.  The remainder of the book provides details about these 
  60. elements. 
  61.  
  62.  
  63. ΓòÉΓòÉΓòÉ 2.1. An Approach to Collecting and Managing Problem Determination Data ΓòÉΓòÉΓòÉ
  64.  
  65. Although there is no right or wrong way to repair code problems, this book 
  66. presents a three-step approach to collecting and managing problem determination 
  67. data. 
  68.  
  69.  
  70. ΓòÉΓòÉΓòÉ 2.1.1. Step 1 - Check the Error Log and Data Areas ΓòÉΓòÉΓòÉ
  71.  
  72. The first places you should check when code failures occur are the Error Log 
  73. and associated data areas.  OS/2 Warp has a technology called FFST (pronounced 
  74. "fist"), which stands for First Failure Support Technology. A failure in code 
  75. that uses FFST technology collects useful problem analysis information that is 
  76. stored in the error log and in data areas. This can happen without user or 
  77. programmer intervention.  Error log data provides information such as the date 
  78. and time an error occurred.  This data also identifies the module in which the 
  79. error occurred, the severity, and description of the error.  You can use data 
  80. areas to store user-specified information (data structures, for example) when 
  81. code fails.  The system saves the data area with the error log entry.  Many 
  82. code problems can be pinpointed by analyzing what the error log and data areas 
  83. tell you.  A utility called SYSLOG controls error logging and works with error 
  84. log contents. 
  85.  
  86. How does a programmer capture problem determination data?  FFST is the answer. 
  87. FFST is a technique of capturing problem determination data at the time of a 
  88. code failure.  You use FFST by placing calls to the FFSTProbe API in strategic 
  89. places in your code.  Each time you call FFSTProbe for a problem, the system 
  90. writes an entry to the error log.  The system also writes entries to data areas 
  91. if you have coded the FFSTProbe API to do so.  The data in the error log entry 
  92. includes information that identifies the product that encountered the problem. 
  93. The system stores product information in a database that conforms to the 
  94. Desktop Management Interface (DMI) standards. 
  95.  
  96. FFSTProbe is a powerful function and requires some planning and setup. You 
  97. instrument your code by placing calls to FFSTProbe at specific points in your 
  98. code, along with your instructions for the function.  Guide to Instrumenting 
  99. Your Code, provides an introduction to using this API and steps for planning 
  100. and using it. 
  101.  
  102. You may decide later that you want to override the calls to FFSTProbe. A Probe 
  103. Control Table, with a graphical utility, provides this function. Entries in the 
  104. Probe Control Table override the coded probe functions. This dynamic override 
  105. capability is very useful because it allows you to change what the probes do 
  106. without having to recode and recompile your programs. 
  107.  
  108. Guide to Instrumenting Your Code, provides detailed information about this 
  109. first phase of problem analysis.  It explains the data collected and provides 
  110. guidance for planning and instrumenting your code. Capturing and Saving 
  111. Failure-Related Information through Dumps, provides more details about how to 
  112. use the PM Dump Facility dump formatter to view the FFST dump.  Viewing and 
  113. Analyzing Error Log Entries, provides more details about the error log table, 
  114. what the error log table contains, and how you can work with the log. 
  115.  
  116.  
  117. ΓòÉΓòÉΓòÉ 2.1.2. Step 2 - Use Trace Facilities ΓòÉΓòÉΓòÉ
  118.  
  119. Step 1 requires no user or programmer intervention with failing code. Step 2 
  120. involves setting trace points and using trace data, and it does require 
  121. intervention.  The following functions are available in OS/2 Warp Version 4 to 
  122. help you use trace effectively: 
  123.  
  124.      A function to insert trace points in your code 
  125.      A command that describes the trace file to be used 
  126.      A command that turns trace on and off 
  127.      A utility called Trace Customization that lets you format entries in the 
  128.       trace file 
  129.      A utility called Trace Formatter that displays the contents of the trace 
  130.       file 
  131.  
  132.  Traces allow you to see and follow the course of events in code that lead to a 
  133.  failure.  You can use trace data: 
  134.  
  135.      To understand the order or determine the operating path of the code 
  136.      To understand parameter data changes during processing 
  137.      To examine inputs to functions and outputs from functions 
  138.      To examine resulting return codes 
  139.      To save intermediate data values 
  140.  
  141.  Analyzing Performance and Debugging Problems Using Trace, contains more 
  142.  information about the Trace facilities. 
  143.  
  144.  
  145. ΓòÉΓòÉΓòÉ 2.1.3. Step 3 - System Dump ΓòÉΓòÉΓòÉ
  146.  
  147. If steps 1 and 2 do not help you determine the cause of a code failure, step 3, 
  148. system dump, is the recommended final step.  This is the primary tool used by 
  149. service personnel to solve system code problems and application code problems. 
  150. Use a debugger for application problems. OS/2 Warp Version 4 has the technology 
  151. to initiate a system dump when code fails. The dump information that is stored 
  152. on disk provides information about the reasons for the code failure.  Use this 
  153. step as a final step because your system will restart after it stores the dump. 
  154.  
  155. This third step of problem analysis has three phases: 
  156.  
  157.    1. Configure: involves adding the TRAPDUMP statement to the CONFIG.SYS file, 
  158.       selecting the Enable System Dump choice on the Probe Control Table, and 
  159.       allocating disk space by using a disk partition for storing the system 
  160.       dump.  System dumps can be stored on diskettes but the number of 
  161.       diskettes required will depend on the amount of main storage memory your 
  162.       system has. 
  163.  
  164.    2. Trigger: the way you start a system dump: 
  165.  
  166.           by a keyboard sequence 
  167.           by calling the DosForceSystemDump API 
  168.           by using the Probe Control Table (PCT) to override the values that 
  169.            are specified in a call to FFSTProbe 
  170.           when an unhandled trap occurs. 
  171.  
  172.    3. Format and view: the step where you look at the system dump data using 
  173.       the PM Dump Facility dump formatter. 
  174.  
  175.  Refer to Capturing and Saving Failure-Related Information through Dumps for 
  176.  more information about System Dumps and the PM Dump Facility. 
  177.  
  178.  
  179. ΓòÉΓòÉΓòÉ 2.2. Summary ΓòÉΓòÉΓòÉ
  180.  
  181. The information in this book describes First Failure Support Technology and the 
  182. supporting trace and dump facilities that are used during problem analysis. 
  183. Note that trace utilities are not part of FFST.  The FFST technology provides 
  184. the tools (functions, commands, and graphical interface utilities) to help you 
  185. instrument and service your code to take advantage of this technology. 
  186.  
  187. Summary of Functions and Interfaces provides a summary of the functions, 
  188. commands, utilities, and interfaces that comprise FFST. 
  189.  
  190. Although problem determination can be done, whether or not your code is 
  191. instrumented, any time taken to instrument code is well spent.  By 
  192. instrumenting your code, you will be able to take full advantage of the FFST, 
  193. trace, and dump tools if code problems occur. 
  194.  
  195.  
  196. ΓòÉΓòÉΓòÉ 3. Guide to Instrumenting Your Code ΓòÉΓòÉΓòÉ
  197.  
  198. Code instrumentation improves problem analysis.  Instrumented components of 
  199. OS/2 Warp Version 4 use First Failure Support Technology (FFST) and trace. 
  200. This chapter defines the required steps for instrumentation, and things you 
  201. should consider before you instrument your code.  This chapter also tells you 
  202. what to expect when you use the FFSTProbe API and trace utility. 
  203.  
  204.  
  205. ΓòÉΓòÉΓòÉ 3.1. Introduction to FFST Instrumentation ΓòÉΓòÉΓòÉ
  206.  
  207. FFST is a programming concept that uses a set of software tools and services to 
  208. capture error information at the time of a code failure. You view the error 
  209. information using system error log or PM Dump Facility dump formatter to 
  210. determine the cause of the problem.  You capture error information by placing a 
  211. call to the FFSTProbe API in your code.  You instrument your code by calling 
  212. FFSTProbe and specifying which data to collect. 
  213.  
  214. When your properly instrumented code encounters an unsuspected or unrecoverable 
  215. error, the code immediately calls the FFSTProbe API to capture failure related 
  216. information.  Your code specifies the parameters to capture data when calling 
  217. the FFSTProbe function.  The system creates an error log entry each time your 
  218. code calls the FFSTProbe function.  The log entry will contain the information 
  219. your code specifies in the call to FFSTProbe.  After the call, the system 
  220. returns control to your code unless the system triggered a system dump. System 
  221. dumps automatically restart the system.  Additional error information can be 
  222. collected by using a Probe Control Table (PCT) entry. System dumps are 
  223. triggered by using PCT entries.  The captured information that is contained in 
  224. the error log entry can include event trace data, program error information, or 
  225. user-defined data. 
  226.  
  227. Therefore, FFST consists of a collection of functions, commands, and utilities 
  228. within the Problem Determination Tools folder. Use the utilities to do the 
  229. following: 
  230.  
  231.      collect problem determination data 
  232.      define the types of data collected 
  233.      specify where to store the collected error data 
  234.      override parameters on calls to the FFSTProbe function. 
  235.  
  236.  Summary of Functions and Interfaces, provides an overview of the interfaces to 
  237.  FFST. Problem Determination APIs, provides descriptions of the API functions. 
  238.  
  239.  This chapter provides the information you need to instrument your code. It may 
  240.  be helpful to have the OS/2 Warp Version 4 Tools Reference document available 
  241.  for reference while using this book.  The associated references are available 
  242.  on the Toolkit CD ROM. 
  243.  
  244.  
  245. ΓòÉΓòÉΓòÉ 3.1.1. Benefits of Instrumenting for FFST ΓòÉΓòÉΓòÉ
  246.  
  247. Instrumentation is key to providing adequate code serviceability.  If problems 
  248. occur, instrumented code allows you or service personnel to take full advantage 
  249. of the FFST technology in OS/2 Warp Version 4.  The system records problem 
  250. determination data with no user or additional programmer intervention. 
  251. Instrumentation decreases the need for reproducing user failures.  System dumps 
  252. and process dumps however do require intervention and problem reproduction. 
  253.  
  254. The captured information that is recorded in the error log is essential to 
  255. problem solving.  An error log entry contains information that indicates the 
  256. failing product, and the time the error occurred.  By analyzing the captured 
  257. information, you can determine the failing components, diagnose the causes of 
  258. the error, and correct the problems. 
  259.  
  260.  
  261. ΓòÉΓòÉΓòÉ 3.1.2. Overview of FFSTProbe API ΓòÉΓòÉΓòÉ
  262.  
  263. The FFSTProbe API is the key to problem analysis by signalling that your code 
  264. has encountered a problem.  FFSTProbe captures the requested data, and stores 
  265. the data in the error log for use in problem analysis. 
  266.  
  267.  
  268. ΓòÉΓòÉΓòÉ 3.1.2.1. FFSTProbe Parameters ΓòÉΓòÉΓòÉ
  269.  
  270. The FFSTProbe API parameters identify the product that reported the problem. 
  271. The parameters specify which data to collect for the problem. You can use the 
  272. parameters to specify the following: 
  273.  
  274.      the severity of the call 
  275.      the associated error message data 
  276.      the name of the formatting template that is used to display the error 
  277.       information 
  278.      any system process information 
  279.      any specific user data that you want collected. 
  280.  The system stores module name and time stamp automatically.  The FFSTProbe API 
  281.  can also initiate a system dump to capture data that resides in the main 
  282.  memory of the system.  Refer to Problem Determination APIs for the FFSTProbe 
  283.  API and its parameters. 
  284.  
  285.  
  286. ΓòÉΓòÉΓòÉ 3.1.3. FFST Flow ΓòÉΓòÉΓòÉ
  287.  
  288.  
  289. FFST Flow
  290.  
  291. The sequence of events that are shown in FFST Flow shows how FFST logs errors 
  292. and captures data when your code calls FFSTProbe. 
  293.  
  294. After you develop and install your code on the system, the application program 
  295. box that is shown in the diagram above signifies your code.  The FFSTProbe API 
  296. is called when your code discovers a problem.  If you specify to capture user 
  297. data in the call to FFSTProbe, the system captures the data with the other 
  298. error-related information. 
  299.  
  300. Your code calls FFSTProbe to gather the following product information: 
  301.  
  302.      dump information 
  303.      error message information 
  304.      other error-related data 
  305.  The system records the data in the error log entry.  If your code has entries 
  306.  in the Probe Control Table, FFST uses the entry values instead of the 
  307.  FFSTProbe parameters that are used in the calls.  The system records the data 
  308.  in the error log entry.  FFST uses the configuration values to create the 
  309.  error log entry. 
  310.  
  311.  After FFST gathers the error-related information, it stores the data as an 
  312.  error log entry.  The system stores FFST dump information in a file named 
  313.  FFxxxxxx.DMP, where xxxxxx signifies a six-digit identifier. If a trace 
  314.  snapshot is requested, a file named FFxxxxxx.TRC will be created.  If a 
  315.  process dump is requested, a file named FFxxxxxx.PRC will be created.  The 
  316.  error log information contains the name of the FFST dump file along with the 
  317.  trace file if applicable. 
  318.  
  319.  Use the SYSLOG utility to view the error log information.  SYSLOG uses message 
  320.  files and template files to format and display error log records.  Use SYSLOG 
  321.  to control the following log functions: 
  322.  
  323.      specify which error log file to use 
  324.      suspend or resume error logging 
  325.      change the size of the error log. 
  326.  
  327.  
  328. ΓòÉΓòÉΓòÉ 3.2. Steps for Instrumenting for FFST ΓòÉΓòÉΓòÉ
  329.  
  330. The steps for instrumenting your code are as follows: 
  331.  
  332.    1. Planning for Instrumenting Your Code 
  333.    2. Code the FFSTProbe API. 
  334.    3. Compile the code. 
  335.    4. Create the error record template file 
  336.    5. Create message files. 
  337.    6. Create DMI MIF files. 
  338.  
  339.  The remainder of the information in this chapter provides information about 
  340.  each step. 
  341.  
  342.  
  343. ΓòÉΓòÉΓòÉ 3.3. Planning for Instrumenting Your Code ΓòÉΓòÉΓòÉ
  344.  
  345. There are several things to consider before you begin putting calls to the 
  346. FFSTProbe API in your code.  This section describes the following 
  347. considerations and steps: 
  348.  
  349.    1. Define and ensure existence of Vital Product Data (VPD).  VPD is the 
  350.       description of your code to the system.  The system uses VPD to identify 
  351.       the product that is reporting a problem. 
  352.    2. Decide how and where you should code your calls to the FFSTProbe 
  353.       function. 
  354.    3. Decide what data you want the function to collect for code failures. 
  355.  
  356.  
  357. ΓòÉΓòÉΓòÉ 3.3.1. Defining Vital Product Data (VPD) ΓòÉΓòÉΓòÉ
  358.  
  359. The DMI facility provides a standard way to register the hardware and software 
  360. on the system.  This allows both system software and system-based software (for 
  361. example, application programs or device drivers) to register with the system. 
  362. This information is called Vital Product Data (VPD).  The system uses VPD to 
  363. identify the source of error log entries.  Various system management 
  364. applications require access to the VPD information.  When a product component 
  365. uses FFSTProbe to log an error, the error logging function automatically 
  366. includes the VPD information in the error record. 
  367.  
  368. The VPD information allows systems management applications to assume a base 
  369. level of VPD for all conforming products on a system.  The VPD information for 
  370. software products differs from the VPD information for hardware products.  You 
  371. can define additional specialized VPD information for your product. 
  372.  
  373. Both your component's install object (that the feature installer uses to 
  374. install your product) and the FFSTProbe parameter information must have 
  375. identical information.  This enables DMI to provide the template file that is 
  376. specified on the call to FFSTProbe.  Recommendations for these values are: 
  377.  
  378.      Vendor - a description of the organization or company that developed the 
  379.       product that is reporting an error (example: IBM). 
  380.  
  381.      Tag  - a unique description of the product that is reporting an error 
  382.       (example: FFSTProbe SAMPLE). 
  383.  
  384.      Revision - optional description of the development organization's 
  385.       revision level, change level, or version of the product that is reporting 
  386.       an error.  (example: 1.0.1c).  If a component within a product is 
  387.       reporting the error, the revision may not correspond to the revision 
  388.       level of the entire product. 
  389.  
  390.  Programmers refer to the Vendor, Tag, and Revision values as the DMI triplet. 
  391.  
  392.  When your code calls FFSTProbe, the DMI triplet values you specified must 
  393.  match the DMI values stored in the DMI database for your product. If the 
  394.  values do not match, FFSTProbe cannot find the VPD for your product in the DMI 
  395.  database. 
  396.  
  397.  If the DMI triplet for your product matches the DMI triplet of a different 
  398.  product, the results are unpredictable. 
  399.  
  400.  
  401. ΓòÉΓòÉΓòÉ 3.3.2. Deciding How and Where to Place Calls to FFSTProbe API ΓòÉΓòÉΓòÉ
  402.  
  403. Here are two common approaches to instrumentation.  One way is to place 
  404. numerous calls to FFSTProbe throughout your product to get broad coverage. 
  405. This approach might contain only a minimum amount of error data since you know 
  406. every error would be captured via a probe. The second approach is to use just a 
  407. few strategically placed calls that capture greater amounts of error data to 
  408. better isolate the the exact cause of the failure. 
  409.  
  410. The advantage to the broad coverage approach is that errors are most likely to 
  411. be identified because of the greater number of calls to FFSTProbe.  The 
  412. strategic approach usually involves instrumenting existing exception paths or 
  413. thoroughly understanding the code to identify where to place the call to 
  414. FFSTProbe. 
  415.  
  416. You might consider combining both approaches in your code.  The broad coverage 
  417. aspect identifies exactly where the error occurred, and the strategic aspect 
  418. identifies the cause. 
  419.  
  420. You should use FFSTProbe only to detect problems that would require a program 
  421. fix or a modification to user operation procedures. 
  422.  
  423.  
  424. ΓòÉΓòÉΓòÉ 3.3.2.1. Places to Instrument ΓòÉΓòÉΓòÉ
  425.  
  426. The following list contains situations and places in your code you should 
  427. consider for instrumentation: 
  428.  
  429.      When your code generates an error return, create an error log entry for 
  430.       the error condition that caused the error. 
  431.  
  432.      Some programmers use Print Debug and Print File for testing code. These 
  433.       instructions print certain variables and messages at various code failure 
  434.       points.  Convert the Print Debug and Print File instructions to calls to 
  435.       the FFSTProbe API.  The system disables the Print Debug and Print File 
  436.       functions after you install your code. 
  437.  
  438.      When you expect return codes, create an error log entry when you receive 
  439.       unexpected return codes. 
  440.  
  441.      In environment situations (circumstances that are not necessarily program 
  442.       errors but are worthy of creating an error log entry).  For example, 
  443.       resource shortages, time-out conditions, system-hang conditions, or lost 
  444.       physical connections. 
  445.  
  446.      In cleanup functions, your code may be tolerant of potential errors and 
  447.       may do some error recovery.  The cleanup functions in your code are 
  448.       candidates for logging if the recovery signifies an important event. 
  449.  
  450.  Consider that the number of log entries and the size of entries you log could 
  451.  cause too much information to be logged.  Creating excessive error log entries 
  452.  can cause the error log to wrap.  This causes previously logged information to 
  453.  be overwritten.  One of the most frequent questions that are asked about FFST 
  454.  is where and when to use it.  When instrumenting your product, you should 
  455.  consider several places: 
  456.  
  457.      Exception Paths 
  458.  
  459.       Many programmers already take some actions in various exception 
  460.       conditions.  These actions often include cleaning up execution 
  461.       environments, closing files, and ending the program.  Your code should 
  462.       call the FFSTProbe API to create an error log entry that contains the 
  463.       following information: 
  464.  
  465.         -  the program or module that failed 
  466.         -  why the failure occurred 
  467.         -  what corrective actions to take. 
  468.  
  469.      Incorrect Conditionals (for example, switch case) 
  470.  
  471.       As developers write programs, they make assumptions of what can or cannot 
  472.       happen, and add various conditionals and execution blocks to programs. 
  473.  
  474.       Conditionals that are not valid are ideal candidates for a call to the 
  475.       FFSTProbe API to log these failures.  By calling the FFSTProbe function 
  476.       at these points, you can quickly and accurately pinpoint the failure and 
  477.       capture the associated data at the time of failure. 
  478.  
  479.      External Calls 
  480.  
  481.       OS/2 Warp Version 4 does not expect calls to external programs to fail. 
  482.       However, unexpected return codes, when not handled, can result in program 
  483.       failure.  Your code should call FFSTProbe after each external call that 
  484.       results in an unexpected return code. 
  485.  
  486.       Some development groups use someone other than the developer instrument 
  487.       all calls.  Other groups spend more time anticipating the potential 
  488.       problem areas and placing probes only in those areas.  Your code should 
  489.       do what is achievable for the current circumstances.  You should then 
  490.       evaluate how well your calls to FFSTProbe work before you begin the next 
  491.       development cycle. 
  492.  
  493.  For FFSTProbe API calls to be useful in debugging a problem, the calls must 
  494.  specify: 
  495.  
  496.      A unique probe ID 
  497.      Descriptive text explaining the problem 
  498.      Data that is relevant to the failure 
  499.      Instructions on how to resolve the problem if appropriate. 
  500.  
  501.  With well-instrumented code, several benefits of using the FFSTProbe function 
  502.  are evident.  You can use FFST to capture error information. You can also 
  503.  identify areas in your code that did not cause the problem.  If instrumented 
  504.  code made no calls to FFSTProbe, you can focus on code without calls to 
  505.  FFSTProbe. 
  506.  
  507.  Your code should not call the FFSTProbe function inside a loop.  Call 
  508.  FFSTProbe only once per error situation.  Repeated calls may cause system 
  509.  performance problems and cause wrapping of FFST data by storing unnecessary 
  510.  data. 
  511.  
  512.  Problem-prone components in products are good candidates for the FFSTProbe 
  513.  function. 
  514.  
  515.  Your decision about using instrumentation depends on the possible errors and 
  516.  the cost of solving an error. 
  517.  
  518.  
  519. ΓòÉΓòÉΓòÉ 3.3.3. Deciding What Data You Want to Collect ΓòÉΓòÉΓòÉ
  520.  
  521. After you decide where to call the FFSTProbe function, you need to decide what 
  522. data to capture.  The question to ask is, "What data would I need to see to 
  523. have a good chance of determining the source of the error?"  Consider capturing 
  524. data items that are global variables and control blocks. 
  525.  
  526. Other things to consider are: 
  527.  
  528.      How much data you need to determine the cause of the problem? 
  529.      Has this problem been encountered before? 
  530.      How complex is the code? 
  531.      Are other components or products being called? 
  532.      Does the error message information point to the problem? 
  533.  
  534.  Make every effort to collect enough data to solve the problem without 
  535.  requiring the user to re-create the problem. 
  536.  
  537.  The amount of data collected could also be affected by the amount of system 
  538.  storage that is available or allocated to store error data. 
  539.  
  540.  
  541. ΓòÉΓòÉΓòÉ 3.3.3.1. Error Types to Consider ΓòÉΓòÉΓòÉ
  542.  
  543. When an error occurs, call the FFSTProbe function to log the error.  The 
  544. following examples describe several error types you should consider when you 
  545. instrument your code and the types of data to capture for the error: 
  546.  
  547.  Error return 
  548.          Determine the severity of an error so that you call the FFSTProbe 
  549.          function only when the error return indicates a serious problem.  When 
  550.          a calling program has a significant failure that causes an error 
  551.          return, the program calls FFSTProbe.  Be careful not to cause a 
  552.          "cascade" of calls to FFSTProbe as the system passes error returns 
  553.          back up through a set of higher level function calls. 
  554.  
  555.          Failure-related data may include: 
  556.  
  557.              Return code 
  558.              Input parameters to the function 
  559.              Returned values from the function 
  560.              Any internal variables that determine or affect the erroneous 
  561.               results 
  562.  
  563.  Damaged data structures 
  564.          Product data structures can become damaged with data that is not 
  565.          valid.  To capture data for this type of error during normal 
  566.          processing, your code could have a method for periodically checking 
  567.          important internal data structures.  Such logic is an important step 
  568.          toward improving the reliability and availability of the product. 
  569.  
  570.          Failure-related data may include: 
  571.  
  572.              Data structures 
  573.              Historical information that indicates when your code found the 
  574.               product data structure to be correct 
  575.              General system data showing other programs in use by the system 
  576.               when the error occurred. 
  577.  
  578.  Time-outs and detected hangs 
  579.          To detect time-outs and hangs, design your code to sense how long a 
  580.          given request should take. 
  581.  
  582.          Failure-related data may include: 
  583.  
  584.              Current time-out values 
  585.              Any state information that describes what the timed-out function 
  586.               is currently doing 
  587.              States of resources that may relate to the time-out or hang 
  588.              Historical information that describes what the timed-out function 
  589.               had been doing before the error occurred. 
  590.  
  591.  Slow performance of a service 
  592.          In order to detect a slow performance condition, design code to sense 
  593.          how long a given service should take before calling FFSTProbe. 
  594.  
  595.          Failure-related data may include: 
  596.  
  597.              Internal resource states that may relate to the slow performance 
  598.               of the service 
  599.              Historical information that indicates who has been using that 
  600.               service and what requests the user made of the service. 
  601.  
  602.  Traps 
  603.          It is difficult to detect a failure within a product and determine its 
  604.          cause after an exception management routine has received control. 
  605.          Well-designed and instrumented code can detect a failure before 
  606.          exception management routines get control. 
  607.  
  608.          Failure-related data may include: 
  609.  
  610.              Exception blocks that contain the hardware state when the trap 
  611.               occurred 
  612.              Context data indicates what was being run when the trap occurred 
  613.               (for example, call stacks or internal state variables) 
  614.  
  615.  
  616. ΓòÉΓòÉΓòÉ 3.3.4. Ways to Collect Data ΓòÉΓòÉΓòÉ
  617.  
  618. FFST takes care of storing the collected data in the error log and optional 
  619. FFST dump.  This information is available for viewing through use of the SYSLOG 
  620. utility.  For more information on error logs and the SYSLOG utility, see 
  621. Viewing and Analyzing Error Log Entries. 
  622.  
  623. User data could be data areas, control blocks, complete files, or any other 
  624. form of data that could be used to determine the problem. 
  625.  
  626. Two parameters on the FFST Probe function allow user-specified data to be 
  627. collected: 
  628.  
  629.      The pDmpUsrData parameter saves information in the FFST Dump. You can 
  630.       specify up to 30 items, each having a maximum size of 32 KB. For example, 
  631.       you use this parameter to save large control structures or buffers. 
  632.  
  633.      The LogUsrData parameter save saves user data in the error log.  The 
  634.       maximum amount of logged data is 2 KB.  You need to determine what data 
  635.       you want as part of the 2 KB.  For example, you use this parameter to 
  636.       save small items such as return codes, function names, or system names. 
  637.  
  638.  
  639. ΓòÉΓòÉΓòÉ 3.3.4.1. FFST Dump Data ΓòÉΓòÉΓòÉ
  640.  
  641. The system creates FFST dumps when you use the pDumpUserData parameter with the 
  642. FFSTProbe function.  The Enable FFST Dump option on the FFST Probe Control 
  643. Table Entry Summary window must be selected before the system will create a 
  644. FFST dump (see Probe Control Table (PCT) Entry Add or Change Summary Window). 
  645.  
  646. If you did not specify the parameter to collect the FFST dump in the original 
  647. call to the FFSTProbe function, you can dynamically change the call.  You use 
  648. the Probe Control Table (PCT) to request the FFST dump the next time the 
  649. specified call to FFSTProbe occurs.  The system stores the FFST dump 
  650. information in the file that is defined on the FFST Setup (FFSTCONF) window 
  651. (see Using FFST Setup (FFSTCONF)). You can select the path but not the file 
  652. name. 
  653.  
  654. To delete FFST dumps, use the FFSTCONF command and select the Actions option. 
  655. Then choose the Dumps option to display the FFST Dump File Summary window. 
  656. Select the dump file to delete and click on the File menu bar option. Click on 
  657. Delete to delete the dump file. 
  658.  
  659. The FFST dump data can be of the various types.  Some types may not be part of 
  660. dump, depending on availability of data.  The system displays the information 
  661. when you format the dump.  The various types are: process environment data, 
  662. process status data, trace buffer data, user data, error log data, and process 
  663. errors. 
  664.  
  665.  
  666. ΓòÉΓòÉΓòÉ 3.3.4.1.1. Process Environment Data ΓòÉΓòÉΓòÉ
  667.  
  668. If you requested the process environment data, FFST collects and stores the 
  669. data as part of the FFST dump.  The system displays this information when you 
  670. use the PM Dump Facility dump formatter. 
  671.  
  672. You can specify to have the process environment data captured by selecting the 
  673. Capture Process Environment checkbox on the FFST PCT Entry window (see Probe 
  674. Control Table (PCT) Entry Add or Change Summary Window). 
  675.  
  676.  
  677. ΓòÉΓòÉΓòÉ 3.3.4.1.2. System Process Status Data ΓòÉΓòÉΓòÉ
  678.  
  679. Process status data is a record of all processes and threads that are running 
  680. on the system.  This information is similar to information you get when you use 
  681. the PSTAT command. 
  682.  
  683. If you requested process status data, FFST collects and stores the data as part 
  684. of the FFST dump.  The system displays this information when you use the PM 
  685. Dump Facility dump formatter. 
  686.  
  687. You can specify to have the process status data captured by selecting the 
  688. Capture System Processes checkbox on the FFST PCT Entry window (see Probe 
  689. Control Table (PCT) Entry Add or Change Summary Window). 
  690.  
  691.  
  692. ΓòÉΓòÉΓòÉ 3.3.4.1.3. Trace Data ΓòÉΓòÉΓòÉ
  693.  
  694. When you enable your code for trace, FFST collects and stores trace data.  You 
  695. can specify to have the trace snapshot captured by selecting the Capture Trace 
  696. Snapshot checkbox on the FFST PCT Entry window (see Probe Control Table (PCT) 
  697. Entry Add or Change Summary Window).  The system stores trace information in a 
  698. separate file. 
  699.  
  700. You display trace information either by using the TRACEFMT command or by using 
  701. the Display Trace File option in the SYSLOG Tools menu. For information about 
  702. using the trace functions and formatter, see Analyzing Performance and 
  703. Debugging Problems Using Trace. 
  704.  
  705.  
  706. ΓòÉΓòÉΓòÉ 3.3.4.1.4. User Storage Data ΓòÉΓòÉΓòÉ
  707.  
  708. If you requested user storage data, FFST collects and stores the data as part 
  709. of the dump.  Using the function parameters, you can capture up to 30 data 
  710. areas.  The system displays this information when you use the PM Dump Facility 
  711. dump formatter.  For information about using the dump functions and formatter, 
  712. see Capturing and Saving Failure-Related Information through Dumps. 
  713.  
  714.  
  715. ΓòÉΓòÉΓòÉ 3.3.4.1.5. Additional Error Log User Data ΓòÉΓòÉΓòÉ
  716.  
  717. If you requested additional error log user data in the FFSTProbe call, FFST 
  718. generates a FFST dump and stores the data as part of the dump. This information 
  719. is identical to the error log entry that is stored in the error log.  The 
  720. system displays this information when you use the PM Dump Facility dump 
  721. formatter.  For information about using the error log functions and formatter, 
  722. see Viewing and Analyzing Error Log Entries. 
  723.  
  724.  
  725. ΓòÉΓòÉΓòÉ 3.3.4.1.6. FFST Dump Process Errors ΓòÉΓòÉΓòÉ
  726.  
  727. FFST collects and stores FFST dump-processing errors that occurred when the 
  728. system creates the dump.  The system includes error message identifiers in this 
  729. information.  The system displays this information when you use the PM Dump 
  730. Facility dump formatter. 
  731.  
  732.  
  733. ΓòÉΓòÉΓòÉ 3.3.4.1.7. Process Dumps ΓòÉΓòÉΓòÉ
  734.  
  735. FFST collects and stores a process dump only when the Capture process dump 
  736. option is selected on the Probe Control Table (PCT) Entry Summary window. 
  737. Refer to FFST Probe Control Table Entry Summary Window. 
  738.  
  739.  
  740. ΓòÉΓòÉΓòÉ 3.3.4.1.8. System Dumps ΓòÉΓòÉΓòÉ
  741.  
  742. FFST collects and stores a system dump only when the Capture system dump is 
  743. selected on the Probe Control Table (PCT) Entry Summary window.  Refer to FFST 
  744. Probe Control Table Entry Summary Window. 
  745.  
  746.  
  747. ΓòÉΓòÉΓòÉ 3.4. Coding the FFSTProbe Functions ΓòÉΓòÉΓòÉ
  748.  
  749. You can code the FFSTProbe function to capture data in several ways: 
  750.  
  751.      By direct call to the FFSTProbe function 
  752.      By coding a macro that uses FFSTProbe 
  753.      By creating a subroutine to call the FFSTProbe function if you specify 
  754.       certain parameter values. 
  755.  
  756.  The best way to call the FFSTProbe function is through the subroutine method. 
  757.  
  758.  
  759. ΓòÉΓòÉΓòÉ 3.4.1. Direct Calls ΓòÉΓòÉΓòÉ
  760.  
  761. Your code calls the FFSTProbe function at each specific instrumentation point. 
  762. All pertinent parameters need to be specified on each call to capture the 
  763. required data. 
  764.  
  765. As you can see, when you use several calls to the FFSTProbe function, you 
  766. greatly increase your coding efforts.  You need to specify every parameter for 
  767. each call in order to capture the required error data for problem analysis. 
  768. This method requires you to change each call to FFSTProbe in your code if you 
  769. decide to change parameters and is difficult to maintain. 
  770.  
  771.  
  772. ΓòÉΓòÉΓòÉ 3.4.2. Using Macros to Call the FFSTProbe Function ΓòÉΓòÉΓòÉ
  773.  
  774. You can also use a macro to call the FFSTProbe function; however, this is not 
  775. recommended.  When you use a macro, the macro gets expanded into working code 
  776. when you compile your code.  Using a macro causes your components to increase 
  777. in size.  Macros could have a dramatic effect on the size your product if your 
  778. code has numerous calls to FFSTProbe. 
  779.  
  780.  
  781. ΓòÉΓòÉΓòÉ 3.4.3. Using Subroutines to Call the FFSTProbe Function ΓòÉΓòÉΓòÉ
  782.  
  783. An effective way to instrument a call to FFSTProbe is to create a subroutine in 
  784. your code components.  Many FFSTProbe parameters for your code contain the same 
  785. values for each call.  Using the subroutine allows you to code these parameters 
  786. once rather than requiring all parameter information for each individual call 
  787. as in the direct call approach. 
  788.  
  789. Using the subroutine provides common parameter information for all calls to 
  790. FFSTProbe in your code.  When you need to change parameter information, you 
  791. only change the parameters in the FFST subroutine rather than the parameters on 
  792. every call to FFSTProbe. 
  793.  
  794. See Example of an Application Program Using a Subroutine for an example of how 
  795. you use the subroutine method to call the FFSTProbe function. 
  796.  
  797.  
  798. ΓòÉΓòÉΓòÉ 3.5. Creating Template Files ΓòÉΓòÉΓòÉ
  799.  
  800. Use the MKTMPF (Make Template File) command to create template files with 
  801. message IDs that refer to text information about the error.  Use a text editor 
  802. to create an input file for your template. Input files may have any file name 
  803. that is valid for your file system. 
  804.  
  805. SYSLOG uses template files to format and display error data and user data in 
  806. the error log entry.  There should be a unique template file entry for each 
  807. template ID used by your code. 
  808.  
  809. For information regarding the template files and MKTMPF command, see the 
  810. documentation in the OS/2 Warp Version 4 Tools Reference located in the 
  811. Toolkit. 
  812.  
  813.  
  814. ΓòÉΓòÉΓòÉ 3.5.1. Why Template Files Are Important ΓòÉΓòÉΓòÉ
  815.  
  816. In the template file are the identification numbers of the error messages and 
  817. possible recovery actions for the error messages.  The template file also 
  818. contains the formatting instructions for LogUsrData entries in the system error 
  819. log.  Each template in the file has a unique identifier that is specified in 
  820. the parameters of the call to the FFSTProbe function. 
  821.  
  822. The system creates an error log entry that contains the information that is 
  823. specified on the call to FFSTProbe.  The system also stores the VPD information 
  824. that is related to the calling product in the error log entry. 
  825.  
  826. When you instrument your code, ensure that an appropriate error record template 
  827. entry exists in DMI for your product.  The FFSTProbe function needs to point to 
  828. a specific error record template entry within a the template file.  Each 
  829. product should maintain a separate error record template file. 
  830.  
  831. See Creating an Error Record Template Input File for an example of an error 
  832. record template input file. 
  833.  
  834.  
  835. ΓòÉΓòÉΓòÉ 3.6. Creating Message Files ΓòÉΓòÉΓòÉ
  836.  
  837. Message files contain the text of the error messages that error log entries 
  838. use.  The process of producing message files begins with creating an input 
  839. file.  The contents of the input file define the product the messages belong 
  840. to, the message numbers, and text of the messages.  The message text can 
  841. include the substitution variables provided by FFSTProbe's MSGINSDATA 
  842. parameter. After you complete the input file, use MKMSGF to compile the file. 
  843. The output of the compiler is the message file. 
  844.  
  845. A description of how you create an input file and use MKMSGF to create the 
  846. message text file is in the Toolkit OS/2 Warp Version 4 Tools Reference. 
  847.  
  848. See Message Input File Example for an example of a message input file. 
  849.  
  850.  
  851. ΓòÉΓòÉΓòÉ 3.7. Setting Up (Instrumenting) for Trace ΓòÉΓòÉΓòÉ
  852.  
  853. OS/2 Warp Version 4 applications can be instrumented for trace by adding calls 
  854. to the TraceCreateEntry function to collect user-specified data.  When running 
  855. the program, the system collects specified data and stores the data in a trace 
  856. file.  Use the trace format (TRACEFMT) command discussed Analyzing Performance 
  857. and Debugging Problems Using Trace to view and analyze the data stored in the 
  858. trace file. 
  859.  
  860. Using trace points is one of the best ways to collect serviceability 
  861. information on a customer system.  It allows service personnel and developers 
  862. to follow the course of events that lead to the failure. 
  863.  
  864.  
  865. ΓòÉΓòÉΓòÉ 3.8. What Is Trace? ΓòÉΓòÉΓòÉ
  866.  
  867. Trace is a tool that you use for performance analysis and service level 
  868. debugging.  Use the trace tool after you perform development and debugging at 
  869. the individual module level or object level.  Microkernel, operating system, 
  870. and application programmers as well as service personnel can use the trace 
  871. facilities to assist in tracking code problems.  For more information about 
  872. using trace, refer to Analyzing Performance and Debugging Problems Using Trace. 
  873.  
  874.  
  875. ΓòÉΓòÉΓòÉ 3.9. Creating a Trace File Entry Using the TraceCreateEntry Function ΓòÉΓòÉΓòÉ
  876.  
  877. Use the TraceCreateEntry function to create an entry in a trace file when trace 
  878. is being performed. 
  879.  
  880. The TraceCreateEntry function uses a single parameter packet structure, 
  881. TCEREQUEST, that is defined in the trace.h file that is part of the Toolkit. 
  882. Use the packet to specify the following information: 
  883.  
  884.      Major and minor codes 
  885.      An optional set of state-related data that is to be logged within the 
  886.       trace entry that the trace point creates 
  887.  
  888.  A parameter packet is a structure that contains values or parameters. 
  889.  
  890.  The TraceCreateEntry caller does not have to provide any logic to check 
  891.  whether you turned on the trace point.  The TraceCreateEntry function performs 
  892.  all necessary checking. 
  893.  
  894.  Note:  Some additional overhead exists when you use the TracecCreateEntry 
  895.  function without checking the state of the trace first.  The trace service 
  896.  automatically time-stamps all trace entries that TraceCreateEntry creates. 
  897.  
  898.  For more information about these and other trace related functions, refer to 
  899.  Problem Determination APIs. 
  900.  
  901.  In the example that is described in Examples of Code when Instrumenting for 
  902.  FFST and Trace, the code calls the TraceCreateEntry function.  This example 
  903.  logs two data variables for the trace point.  The first variable is a 32-bit 
  904.  status code. The second variable is a 16-bit flag word: 
  905.  
  906.  An application program can add trace points to a program.  The program adds 
  907.  trace points by using the TraceCreateEntry function.  Refer to Problem 
  908.  Determination APIs for information about the TraceCreateEntry function. 
  909.  
  910.  
  911. ΓòÉΓòÉΓòÉ 3.10. Defining Trace Information Format ΓòÉΓòÉΓòÉ
  912.  
  913. You create the defined format for a major code by using TRCUST.  The system 
  914. formats trace entries to represent the actual major code by descriptive text 
  915. instead of just numbers.  In addition, the system can format data saved by the 
  916. trace entries instead of being displaying the data as hexadecimal numbers.  The 
  917. use of TRCUST is completely optional. 
  918.  
  919. The trace source file (.TSF) contains lines that describe the format of each 
  920. major and minor code.  TRCUST uses the .TSF file to generate .TFF files (trace 
  921. format files).  TRCUST generates one .TFF file for each major code.  The trace 
  922. formatter program uses the .TFF files to determine how to format the trace 
  923. point entries being displayed. 
  924.  
  925.  
  926. ΓòÉΓòÉΓòÉ 3.10.1. Creating Trace Entry Formatting Directives ΓòÉΓòÉΓòÉ
  927.  
  928. To define trace entry formatting directives, you should place entries in a 
  929. Trace Source File (.TSF) file.  The .TSF file is an ASCII text file that 
  930. defines the trace points being traced in the program.  The TRCUST Trace Point 
  931. Definition tool uses the .TSF file.  TRCUST converts the information in the 
  932. .TSF file into Trace Format Files (.TFF) having the name of TRC00xxx.TFF, where 
  933. xxx is the major code defined in the .TSF file.  The trace formatter uses the 
  934. TFF file to format and displays the trace information. 
  935.  
  936. The following file TEST.TSF is an example of a simple .TSF file.  You use the 
  937. .TSF file to specify the formatting directives for a trace entry that 
  938. TraceCreateEntry creates: 
  939.  
  940.  
  941. TEST.TSF Trace Source File Example
  942.  
  943.  
  944. MODNAME = probe.exe
  945. MAJOR = 220
  946.  
  947. TRACE MINOR=1,
  948.   TP=@STATIC,
  949.   DESC="Tracepoint example start",
  950.   FMT ="Data %D String %S"
  951.  
  952. TRACE MINOR=0x8001,
  953.   TP=@STATIC,
  954.   DESC="Tracepoint example end",
  955.   FMT ="Data %D String %S"
  956.  
  957. For more information about the TRCUST command, the .TSF file and syntax used in 
  958. the file, refer to the Trace Customizer User's Guide in the Toolkit. 
  959.  
  960.  
  961. ΓòÉΓòÉΓòÉ 3.11. Creating DMI MIF Files ΓòÉΓòÉΓòÉ
  962.  
  963. The Desktop Management Interface (DMI) Management Interface Format (MIF) file 
  964. is an ASCII text file that contains the attributes that describe manageable 
  965. products.  The MIF defines a standard way of providing the product information 
  966. to be retrieved by product management applications. 
  967.  
  968. A manageable product provides information about itself in the form of 
  969. attributes in a MIF file that is stored in the MIF database.  There is a MIF 
  970. file for each manageable product on the system. 
  971.  
  972. You use the attributes in the MIF file to describe components and 
  973. characteristics of your product.  Attributes can define the component version 
  974. and revision date, the date you installed the product, or the hardware 
  975. requirements that are needed to use your product.  Group the specific 
  976. attributes together.  In this example, the component version and the revision 
  977. date would be one group in the MIF file, and hardware requirements would be in 
  978. a different group. 
  979.  
  980. Management applications retrieve the information in your MIF file.  You use the 
  981. management applications to list information about your specific manageable 
  982. product or all manageable products that are installed on a system. 
  983.  
  984. The management applications, such as SystemView Agent or DMI Browser, contain 
  985. functions that can change the DMI information for a specific manageable 
  986. product.  You can change the DMI information of a manageable product without 
  987. reinstalling the product.  The product monitors its own DMI information for any 
  988. changes.  When changes occur, the product updates the functions that it 
  989. performs based on the new DMI information. 
  990.  
  991. You can find the MIF file requirements in the SystemView Agent Programmer's 
  992. Guide in the Toolkit in the Problem Determination Tools folder. 
  993.  
  994. There is an example MIF file in the Toolkit that you can copy as a base for the 
  995. MIF file for your product.  The file name is PROBEMXP.MIF. 
  996.  
  997. For an example of a MIF file, see MIF File Example. 
  998.  
  999.  
  1000. ΓòÉΓòÉΓòÉ 3.11.1. How to Install Your Software Product ΓòÉΓòÉΓòÉ
  1001.  
  1002. You can use the software installer to install your product and the associated 
  1003. MIF file.  The Software Install Reference documents the steps required to 
  1004. install your product and MIF file.  This document is in the Software Install 
  1005. Package in the Software Developer Kit and is also available on The Developers 
  1006. Connection for OS/2 compact disk. 
  1007.  
  1008. The Getting Started with Software Install in the Software Developer Kit 
  1009. explains how to install and use the Software Developer Kit tools. 
  1010.  
  1011. For more information about DMI and MIF, refer to the The Desktop Management 
  1012. Interface (DMI). 
  1013.  
  1014.  
  1015. ΓòÉΓòÉΓòÉ 3.12. FFST-Related Functions ΓòÉΓòÉΓòÉ
  1016.  
  1017. You can change the configuration information with a program by using the 
  1018. FFSTQueryConfiguration and FFSTSetConfiguration functions in your code. 
  1019.  
  1020. When you call FFSTQueryConfiguration, the system returns the configuration 
  1021. information into a structure that you specify.  Your code then compares the 
  1022. configuration information in the structure to the configuration values your 
  1023. code is expecting.  If any of the values are different, your code can change 
  1024. them by calling the FFSTSetConfiguration function.  You then specify the 
  1025. configuration information for the system to use. 
  1026.  
  1027. Refer to Problem Determination APIs for more information about these functions. 
  1028.  
  1029.  
  1030. ΓòÉΓòÉΓòÉ 3.13. Examples of Code when Instrumenting for FFST and Trace ΓòÉΓòÉΓòÉ
  1031.  
  1032. This section contains the following examples: 
  1033.  
  1034.      how you instrument a product by using subroutines to call FFSTProbe and 
  1035.       TraceCreateEntry 
  1036.      a template input file 
  1037.      a message input file 
  1038.      a MIF file 
  1039.  
  1040.  
  1041. ΓòÉΓòÉΓòÉ 3.13.1. Example of an Application Program Using a Subroutine ΓòÉΓòÉΓòÉ
  1042.  
  1043. This example shows the user application PROBE.C.  The application uses the 
  1044. subroutine approach to call the FFSTProbe function. 
  1045.  
  1046.  
  1047. User Application using FFST and Trace Subroutines
  1048.  
  1049.   /**************************************************************************/
  1050.   /* probe.c: FFSTProbe sample                                              */
  1051.   /*                                                                        */
  1052.   /* This test program gives an example of using the FFSTProbe API and the  */
  1053.   /* TraceCreateEntry API by using 'wrapper' functions.  The dummy API      */
  1054.   /* My_Dummy_Api returns a return code which is then used as the basis of  */
  1055.   /* firing a FFSTProbe via the wrapper function, callFFST.  callFFST can   */
  1056.   /* be modified to include more or less data as needed.                    */
  1057.   /*                                                                        */
  1058.   /**************************************************************************/
  1059.  
  1060.   #define INCL_DOS
  1061.   #define INCL_DOSMEMMGR
  1062.   #define INCL_DOSPROCESS
  1063.   #define INCL_FFST
  1064.   #define NO_ERROR 0
  1065.  
  1066.   #include <os2.h>
  1067.   #include <stdio.h>
  1068.   #include <stdlib.h>
  1069.   #include <string.h>
  1070.   #include <FFST.h>
  1071.   #include <trace.h>
  1072.  
  1073.   /**************************************************************************/
  1074.   /* Define probe ID for FFSTProbe called when dummy API fails.  Probe ID   */
  1075.   /* is the unique identifier you use later to find the source of the       */
  1076.   /* failure.  It should be unique within a DMI triplet (explained later)   */
  1077.   /* or within your product                                                 */
  1078.   /**************************************************************************/
  1079.   #define DUMMY_API_PROBE 22222
  1080.  
  1081.   void callFFST ( ULONG input_version,           /* FFST 'Wrapper' Function */
  1082.               /* input version lets you change the wrapper     */
  1083.               /* without changing each call, just make sure    */
  1084.               /* the wrapper still treats the 'old' version    */
  1085.               /* the same and that any new code is             */
  1086.               /* conditioned on a new input_version #          */
  1087.  
  1088.                   ULONG input_probe_flags,         /* FFSTProbe probe flags */
  1089.                   ULONG input_severity,               /* FFSTProbe severity */
  1090.                   ULONG input_probe_id,                     /* FFSTProbe ID */
  1091.                   CHAR* input_module_name,   /* module name passed to probe */
  1092.                   ULONG input_log_data_length, /* log data length for the
  1093.                                                   system error log          */
  1094.                   PVOID input_pError_log_data,  /* pointer to the data for
  1095.                                                    system error log         */
  1096.                   int   argc);
  1097.  
  1098.   /*****************************************************/
  1099.   /* This is for a common trace entry routine          */
  1100.   /*****************************************************/
  1101.   #define HKWD_TEST            220        /* major code */
  1102.   #define hkwd_test_entry      0x0001     /* minor code for entry */
  1103.   #define hkwd_test_exit       0x8001     /* minor code for exit */
  1104.  
  1105.   struct
  1106.   {
  1107.     int count;
  1108.     char text╨¥12Γöÿ;
  1109.   } trace_capture_start, trace_capture_end;
  1110.  
  1111.   APIRET trace_out(ULONG major, ULONG minor, void *trace_data,
  1112.                     ULONG data_len);      /* trace wrapper function */
  1113.  
  1114.   /**************************************/
  1115.   /* End of trace declarations for Main */
  1116.   /**************************************/
  1117.  
  1118.   ULONG My_Dummy_API(ULONG Mydata);
  1119.  
  1120.  
  1121.   /**************************************************************************/
  1122.   /*                                                                        */
  1123.   /*  Main Application (this uses the callFFST wrapper function).           */
  1124.   /*                                                                        */
  1125.   /**************************************************************************/
  1126.  
  1127.   int main ( int argc, char * argv╨¥Γöÿ, char * envp  )
  1128.   {
  1129.      ULONG  rc          = 0;
  1130.      ULONG  Mydata      = 2;
  1131.      ULONG  userDataLen = 0;
  1132.      PVOID  pUserData   = NULL;
  1133.  
  1134.      printf ( "Starting FFSTProbe Sample\n" );
  1135.  
  1136.   /**************************************/
  1137.   /* Do the trace entry point           */
  1138.   /**************************************/
  1139.  
  1140.      trace_capture_start.count = 3; /* just a number */
  1141.      strncpy(trace_capture_start.text, "Start main", 12);
  1142.  
  1143.   /******** CALL TraceCreateEntry function ****/
  1144.      trace_out(HKWD_TEST,
  1145.         hkwd_test_entry,
  1146.         &trace_capture_start,
  1147.         sizeof(trace_capture_start));
  1148.  
  1149.      /***********************************************************************/
  1150.      /* call the 'dummy'  API so it returns a non-zero rc                   */
  1151.      /***********************************************************************/
  1152.      rc = My_Dummy_API ( Mydata );
  1153.      if ( rc != NO_ERROR )
  1154.      {
  1155.         /********************************************************************/
  1156.         /* The API has failed. Setup the userData to contain the failing rc */
  1157.         /********************************************************************/
  1158.         pUserData = calloc ( 2, sizeof ( ULONG ) );
  1159.         memcpy ( pUserData, &rc, sizeof ( ULONG ) );
  1160.         memcpy ( ( PBYTE ) pUserData + sizeof ( ULONG )
  1161.                , &Mydata, sizeof ( ULONG ) );
  1162.   /****************************************************************************/
  1163.   /* Call the FFSTProbe wrapper function with a version of 1,                 */
  1164.   /* Have FFST post the process status and environment variables in the       */
  1165.   /* syslog, a severity of 4, a probe id of DUMMY_API_PROBE which was         */
  1166.   /* previously defined as 22222, a module name of 'my_module_1', the length  */
  1167.   /* of logusrdta, the logUserData (equal to the failing rc (1) as            */
  1168.   /* setup above) and Argc is passed in to determine whether or not data      */
  1169.   /* should be retrieved from DMI.                                            */
  1170.   /****************************************************************************/
  1171.  
  1172.  
  1173.            callFFST ( 1
  1174.                  , PSTAT_FLAG Γòæ PROC_ENV_FLAG
  1175.                  , SEVERITY4
  1176.                  , DUMMY_API_PROBE
  1177.                  , "my_module_1"
  1178.                  , 2 * sizeof ( ULONG )
  1179.                  , pUserData
  1180.                  , argc );
  1181.      }
  1182.  
  1183.      if (pUserData != NULL)
  1184.      {
  1185.        free(pUserData);
  1186.        pUserData = NULL;
  1187.      }
  1188.  
  1189.      if (argc > 1)
  1190.      {
  1191.         printf("\nFFSTProbe sample ended not using DMI component:\n\n\n");
  1192.      }
  1193.      else
  1194.      {
  1195.         printf("\nFFSTProbe sample ended using DMI component:\n\n\n");
  1196.      }
  1197.  
  1198.   /**************************************/
  1199.   /* Do the trace end point             */
  1200.   /**************************************/
  1201.  
  1202.      trace_capture_end.count = 99;
  1203.      strncpy(trace_capture_end.text, "End main", 12);
  1204.  
  1205.   /******** CALL TraceCreateEntry function ****/
  1206.      trace_out(HKWD_TEST,
  1207.         hkwd_test_entry,
  1208.         &trace_capture_end,
  1209.         sizeof(trace_capture_end));
  1210.  
  1211.      return 0;
  1212.   }
  1213.  
  1214.  
  1215.  
  1216.   /**************************************************************************/
  1217.   /* callFFST is the FFSTProbe wrapper function. It allows you to code the  */
  1218.   /* FFSTProbe API once with data that is static as far as your usage is    */
  1219.   /* concerned and allows you to pass in dynamic data.   It also helps      */
  1220.   /* insulate your code if you decide to change your 'static' options       */
  1221.   /**************************************************************************/
  1222.  
  1223.   void callFFST ( ULONG input_version,           /* FFST 'Wrapper' Function */
  1224.                   ULONG input_probe_flags,         /* FFSTProbe probe flags */
  1225.                   ULONG input_severity,               /* FFSTProbe severity */
  1226.                   ULONG input_probe_id,                     /* FFSTProbe ID */
  1227.                   CHAR* input_module_name,   /* module name passed to probe */
  1228.                   ULONG input_log_data_length, /* log data length for the
  1229.                                                   system error log          */
  1230.                   PVOID input_pError_log_data,   /* pointer to the data for
  1231.                                                     system error log        */
  1232.                   int   argc)
  1233.   {
  1234.     APIRET  rc = 0;
  1235.     PVOID   pvar_n0;
  1236.     ULONG   pvar_n1;
  1237.  
  1238.     /***********************************************************************/
  1239.     /* FFSTProbe API structures.    Described in the API Guide             */
  1240.     /***********************************************************************/
  1241.     FFSTPARMS     FFSTParms;
  1242.     PRODUCTINFO   productInfo;
  1243.     PRODUCTDATA   productData;
  1244.     DMIDATA       DMIData;
  1245.     DUMPUSERDATA  dumpUserData;
  1246.     MSGINSDATA    msgInsData;
  1247.  
  1248.     /***********************************************************************/
  1249.     /* The PRODUCTDATA structure defines the DMI triplet which allows      */
  1250.     /* additional product information, including template repository       */
  1251.     /* filename, to be retrieved from DMI.   DMI is a industry standard    */
  1252.     /* for desktop mgt                                                     */
  1253.     /***********************************************************************/
  1254.     productData.packet_size            = sizeof ( productData );
  1255.     productData.packet_revision_number = PRODUCTDATA_ASCII;
  1256.                                                /* data can be ASCII or UNI */
  1257.     productData.DMI_tag                = "FFSTProbe Sample";
  1258.                                              /* Customize for your program */
  1259.     productData.DMI_vendor_tag         = "IBM";
  1260.                                               /*Customize for your company */
  1261.     productData.DMI_revision           = "1.00";             /* Customize  */
  1262.  
  1263.     /***********************************************************************/
  1264.     /* The DMIDATA structure below is the information which can either be  */
  1265.     /* retrieved by DMI or passed in by the FFSTProbe function. The        */
  1266.     /* preferred method is to use DMI. In the example below, you can see   */
  1267.     /* the use of either depending on whether or not a parm was passed on  */
  1268.     /* call to this program                                                */
  1269.     /***********************************************************************/
  1270.  
  1271.     if ( !(argc > 1) )
  1272.     {
  1273.        /********************************************************************/
  1274.        /* Setting this structure to NULL indicates that the information is */
  1275.        /* to be retrieved from DMI using the DMI triplet as defined in the */
  1276.        /* productData structure.  This is the preferred method.            */
  1277.        /* Other files in this example show how to build your own DMI       */
  1278.        /********************************************************************/
  1279.        productInfo.pDMIData = NULL;
  1280.  
  1281.        /********************************************************************/
  1282.        /* Note: This shows the usage of message insert text and is NOT part*/
  1283.        /* of the information that could or could not be retrieved from DMI */
  1284.        /* This is included as an example of MsgInsTxt and how it can be    */
  1285.        /* used to send probe specific data to the SYSLOG (System Error Log)*/
  1286.        /********************************************************************/
  1287.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_number = 1;
  1288.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_text   = "We did use a DMI component";
  1289.     }
  1290.     else
  1291.      {
  1292.        /********************************************************************/
  1293.        /* fill the DMI data structure - useful only in test environments   */
  1294.        /********************************************************************/
  1295.        DMIData.packet_size              = sizeof ( DMIData );
  1296.        DMIData.packet_revision_number   = DMIDATA_ASCII;
  1297.                                                /* could be unicode instead */
  1298.        DMIData.DMI_product_ID           = "FFST_toolkt_sample";
  1299.                                         /* note this is different than tag */
  1300.        DMIData.DMI_modification_level   = "000000";
  1301.        DMIData.DMI_fix_level            = "010101";
  1302.        DMIData.template_filename        = "PROBE.REP";
  1303.                                          /* this file must be on the DPATH */
  1304.        DMIData.template_filename_length = strlen (DMIData.template_filename)
  1305.                                                  * sizeof ( char );
  1306.                                               /* since ascii is being used */
  1307.        productInfo.pDMIData             = &DMIData;
  1308.  
  1309.        /********************************************************************/
  1310.        /* Note: This shows the usage of message insert text and is NOT a   */
  1311.        /* of the information that could or could not be retrieved from DMI */
  1312.        /********************************************************************/
  1313.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_number = 1;
  1314.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_text   = "We did not use a DMI component";
  1315.       }
  1316.  
  1317.      /***********************************************************************/
  1318.      /* set the pointers up for PRODUCTINFO                                 */
  1319.      /***********************************************************************/
  1320.  
  1321.      productInfo.pProductData = &productData;   /* This points to the DMI
  1322.                                                    related data             */
  1323.  
  1324.      /***********************************************************************/
  1325.      /* set up some DUMPUSERDATA items                                      */
  1326.      /***********************************************************************/
  1327.      pvar_n0 = "Dump user data";              /* Anything can be dumped
  1328.                                                  here up to 32 Kbytes       */
  1329.      pvar_n1 = 2;
  1330.      dumpUserData.no_of_variables = 2;
  1331.      dumpUserData.DumpDataVar╨¥0Γöÿ.var_n_length = strlen(pvar_n0) + 1;
  1332.      dumpUserData.DumpDataVar╨¥0Γöÿ.var_n        = pvar_n0;
  1333.      dumpUserData.DumpDataVar╨¥1Γöÿ.var_n_length = sizeof(ULONG);
  1334.      dumpUserData.DumpDataVar╨¥1Γöÿ.var_n        = (PVOID)(&pvar_n1);
  1335.  
  1336.      /***********************************************************************/
  1337.      /* set up a couple of MSGINSDATA messages- just to show it can be done */
  1338.      /***********************************************************************/
  1339.      msgInsData.no_inserts   = 2;
  1340.      msgInsData.MsgInsTxt╨¥1Γöÿ.insert_number = 2;
  1341.      msgInsData.MsgInsTxt╨¥1Γöÿ.insert_text   = "Message insert variable 2";
  1342.  
  1343.      /***********************************************************************/
  1344.      /* set the FFSTPARMS structure, most values from DEFINEs above.        */
  1345.      /* See API GUIDE for details on each field and their possible values   */
  1346.      /***********************************************************************/
  1347.      FFSTParms.packet_size            = sizeof ( FFSTParms );
  1348.      FFSTParms.packet_revision_number = FFSTPARMS_OS2_ASCII;
  1349.                                                     /* ASCII vs UNICODE data */
  1350.      FFSTParms.module_name            = input_module_name;
  1351.      FFSTParms.probe_ID               = input_probe_id;
  1352.      FFSTParms.severity               = input_severity;
  1353.      FFSTParms.template_record_ID     = input_probe_id;
  1354.      FFSTParms.pMsgInsData            = &msgInsData;
  1355.      FFSTParms.probe_flags            = input_probe_flags;
  1356.      FFSTParms.pDumpUserData          = &dumpUserData;
  1357.                                        /* dump data is stored in .DMP files */
  1358.      FFSTParms.log_user_data_length   = input_log_data_length;
  1359.      FFSTParms.log_user_data          = input_pError_log_data;
  1360.                           /* log data is stored as part of the SYSLOG entry */
  1361.  
  1362.      /***********************************************************************/
  1363.      /* Call the FFSProbe API                                               */
  1364.      /***********************************************************************/
  1365.      if ( input_version == 1)
  1366.      {
  1367.         rc = FFSTProbe ( &productInfo, &FFSTParms);
  1368.      }
  1369.  
  1370.      printf("\n----- Fired the FFSTProbe, rc=%d\n",rc);
  1371.                  /* for example only, do not do this in customer level code */
  1372.  
  1373.   }
  1374.  
  1375.   /**************************************************************************/
  1376.   /*  This is the dummy  API for use in the example.  It can easily set     */
  1377.   /*  non-zero rc's                                                         */
  1378.   /**************************************************************************/
  1379.  
  1380.   ULONG My_Dummy_API ( ULONG Mydata )
  1381.   {
  1382.      if ( Mydata != 123456 )
  1383.      {
  1384.         return 1;
  1385.      }
  1386.      else
  1387.      {
  1388.         return 0;
  1389.      }
  1390.   }
  1391.  
  1392.   /**************************************************************************/
  1393.   /*  Trace events function                                                 */
  1394.   /**************************************************************************/
  1395.   APIRET trace_out(ULONG major, ULONG minor, void *trace_data, ULONG data_len)
  1396.   {
  1397.     TCEREQUEST packet;
  1398.     APIRET      rc;
  1399.  
  1400.     packet.packet_size = sizeof packet;      /* Size of packet in bytes       */
  1401.     packet.packet_revision_number = TRACE_RELEASE; /* Revision level of trace */
  1402.     packet.major_event_code = major;         /* Major code event to be logged */
  1403.     packet.minor_event_code = minor;         /* Minor code event to be logged */
  1404.     packet.event_data_length = data_len;     /* Length of callers event buffer*/
  1405.     packet.event_data = trace_data;          /* Pointer to callers buffer     */
  1406.  
  1407.     /* call the TraceCreateEntry function */
  1408.     rc = TraceCreateEntry(&packet);
  1409.     return rc;
  1410.   }
  1411.  
  1412.  
  1413. ΓòÉΓòÉΓòÉ 3.13.2. Creating an Error Record Template Input File ΓòÉΓòÉΓòÉ
  1414.  
  1415. You use a text editor to create an input file.  MKTMPF uses this file to create 
  1416. error record template files.  There should be one set of default path names and 
  1417. one or more sets of template entries for each use of MKTMPF. 
  1418.  
  1419. The following example shows a template input text file to use with the MKTMPF 
  1420. command for the procedure in the PROBE.C example. 
  1421.  
  1422.  
  1423. Error Record Template Input File
  1424.  
  1425.   Descriptive_Name         = 'System Management Example Template file'
  1426.   *
  1427.   * 'File name only' can be specified as long as the message files are on the
  1428.   * system's DPATH otherwise full path must be specified.
  1429.   * NOTE:  MESSAGE FILES WILL BE 6 CHAR file name with a .MSG Extension
  1430.   * Created by MKMSGF utility
  1431.   *
  1432.   * A single template file can contain entries for an entire product or a
  1433.   * single program *depending solely on the development teams preferences.
  1434.   * The only requirement is that all users of the template file use the
  1435.   *same DMI triplet or hardcode to the same path
  1436.   *
  1437.   Default_message_pathname = probe.msg
  1438.   Default_causes_pathname  = probe.msg
  1439.   Default_actions_pathname = probe.msg
  1440.   Default_details_pathname = probe.msg
  1441.   *
  1442.   * Template number is associated with the FFSTProbe call
  1443.   *
  1444.   Template_number          = 11111
  1445.   *
  1446.   * Message_number is the message number you want displayed on the SYSLOG
  1447.   * summary screen
  1448.   *
  1449.   Message_number           = 1
  1450.   *
  1451.   * Log_class 1 is hardware, 2 is software
  1452.   *
  1453.   Log_class                = 2
  1454.   *
  1455.   * Default_xxxxx_pathname can be overridden on a template entry basis
  1456.   * like this:
  1457.   * Causes_pathname          = c:\os2\system\othrCmsg.msg
  1458.   * Actions_pathname         = c:\os2\system\othrAmsg.msg
  1459.   * Details_pathname         = c:\os2\system\othrDmsg.msg
  1460.   *
  1461.   * On the right of the = sign you specify which message number you want
  1462.   * displayed in the relevant _causes _actions section of the SYSLOG
  1463.   * display. Here message 4 is displayed from PROBE.MSG in the
  1464.   * Fail_causes section of SYSLOG.
  1465.   *
  1466.   Fail_causes              = 4,0,0,0
  1467.   Fail_actions             = 0,0,0,0
  1468.   Install_causes           = 0,0,0,0
  1469.   Install_actions          = 0,0,0,0
  1470.   User_causes              = 0,0,0,0
  1471.   User_actions             = 0,0,0,0
  1472.   *
  1473.   Template_number          = 22222
  1474.   Message_number           = 2
  1475.   Log_class                = 2
  1476.   Fail_causes              = 4,0,0,0
  1477.   Fail_actions             = 0,0,0,0
  1478.   Install_causes           = 0,0,0,0
  1479.   Install_actions          = 0,0,0,0
  1480.   User_causes              = 5,0,0,0
  1481.   User_actions             = 6,0,0,0
  1482.   *
  1483.   * Detail data allows you to format the FFSTProbes log_user_data (if
  1484.   * used). You can use as many Detail data phrases as needed.  The
  1485.   * format is:  Detail_data = L,O,H,T where L is Length of data, O is the
  1486.   * Offset it starts at, T is the Type of data as it was sent and how you
  1487.   * want it formatted (e.g. binary show as hex) and H is the heading
  1488.   * message number you want to display with it.  When your run the example
  1489.   * you will notice the difference in formatting.
  1490.   *
  1491.   Detail_data              = 4,0,7,3
  1492.   Detail_data              = 4,4,9,2
  1493.   *
  1494.  
  1495.  
  1496. ΓòÉΓòÉΓòÉ 3.13.2.1. Template File Tips ΓòÉΓòÉΓòÉ
  1497.  
  1498. The following list contains other helpful tips about the error record 
  1499. templates: 
  1500.  
  1501.      Template files use message-file path names without drive letters.  You 
  1502.       must ensure the following: 
  1503.  
  1504.         -  you place the message files in the proper directory 
  1505.         -  you place the directory in the DPATH statement of CONFIG.SYS 
  1506.         -  the template entries in the file point to the proper message file. 
  1507.  
  1508.      The message resource files (xxx.mes) that are specified in the templates 
  1509.       are created by using MKMSGF.  You install these files on the system 
  1510.       during product installation. 
  1511.  
  1512.      The error logging facility directly accesses the error record template 
  1513.       files to find error messages, causes of the error, and corresponding 
  1514.       recovery actions in various message files.  The system stores this 
  1515.       information in a file in the form of message identifier numbers and 
  1516.       message file path names. 
  1517.  
  1518.  
  1519. ΓòÉΓòÉΓòÉ 3.13.3. Message Input File Example ΓòÉΓòÉΓòÉ
  1520.  
  1521. You use a text editor to create an input file. MRES utility uses this file to 
  1522. create message files.  The following example shows what you can entered in a 
  1523. message text file.  You use the input file with MKMSGF to create messages. 
  1524.  
  1525.  
  1526. Message Input File
  1527.  
  1528. ;Input file for MKMSGF the resulting .MSG file must be placed in the DPATH or
  1529. ;the template file specification must specify the path on the boot drive.
  1530. ;
  1531. ;The 'number' component of the msg id must be 4 numeric chars.
  1532. ;This 'number' is what is used in the template file _causes _actions phrases
  1533. ;between the comma's. e.g. Fail Causes = 4,5,0,0 will cause SYSLOG to display
  1534. ;message BNB0004I followed by BNB0005I in its fail causes section.
  1535. ;Message text can continue across multiple lines if so desired.
  1536. BNB
  1537. BNB0001I: Message for probe 11111, with 2 substitution vars: %1 and %2
  1538. BNB0002I: Message for probe 22222, with 2 substitution vars: %1 and %2
  1539. BNB0003I: Hello World!
  1540. BNB0004I: Hello World! My_Dummy_API returned a non-zero rc
  1541. BNB0005I: A non-zero rc is the result of 123456 not being sent to My_Dummy_API
  1542. BNB0006I: Call My_Dummy_API with 123456 passed as Mydata.
  1543. BNB0007I: Is the Log User Data sent with this probe, formatted to hexidecimal
  1544. BNB0008I: Is the Log User Data sent with this probe, formatted to ASCII
  1545. BNB0009I: Is the Log User Data sent with this probe, formatted as decimal
  1546.  
  1547.  
  1548. ΓòÉΓòÉΓòÉ 3.13.4. MIF File Example ΓòÉΓòÉΓòÉ
  1549.  
  1550. This is an example of the MIF file for the sample program. You can find this 
  1551. file in the Toolkit.  The file name is PROBEXMP.MIF. 
  1552.  
  1553.  
  1554. MIF File Example
  1555.  
  1556.   start component
  1557.       name        = "FFST Example code"
  1558.       description = "This is the FFST Example code Component"
  1559.   //                                                                      //
  1560.   // This is a particularly complicated file.  Fortunately you only need  //
  1561.   // to deal with the section at the very bottom, where you put in the    //
  1562.   // information related to your DMI triplet (Vendor Tag, Tag, and        //
  1563.   // Revision. The rest of this file defines itself to DMI and layouts    //
  1564.   // the fields of information that DMI will manage                       //
  1565.   //                                                                      //
  1566.   //////////////////////////////////////////////////////////////////////
  1567.   //                                                                  //
  1568.   //                      component id group                          //
  1569.   //                                                                  //
  1570.   //////////////////////////////////////////////////////////////////////
  1571.   // Component ID Group
  1572.  
  1573.   //
  1574.   //   Enumerations for this group
  1575.   //
  1576.              Start Enum
  1577.                Name = "Verify_Type"
  1578.                Type = Integer
  1579.                0x00 = "An error occurred; check status code"
  1580.                0x01 = "This component does not exist"
  1581.                0x02 = "The verify is not supported"
  1582.                0x03 = "Reserved"
  1583.                0x04 = "This component exists, but the functionality is untested"
  1584.                0x05 = "This component exists, but the functionality is unknown"
  1585.                0x06 = "This component exists, and is not functioning correctly"
  1586.                0x07 = "This component exists, and is functioning correctly"
  1587.              End Enum
  1588.  
  1589.  
  1590.       start group
  1591.           name    = "ComponentID"
  1592.           id      = 1
  1593.           class   = "DMTFΓòæComponentIDΓòæ1.0"
  1594.           description = "This group defines attributes common to all
  1595.                          components.  This group is required."
  1596.  
  1597.           start attribute
  1598.               name    = "Manufacturer"
  1599.               id      = 1
  1600.               description = "The name of the manufacturer that
  1601.                              produces this component."
  1602.               access  = READ-ONLY
  1603.               storage = COMMON
  1604.               type    = STRING(64)
  1605.               value   = "IBM Corp."
  1606.           end attribute
  1607.  
  1608.           start attribute
  1609.               name    = "Product"
  1610.               id      = 2
  1611.               description = "The name of the component."
  1612.               access  = READ-ONLY
  1613.               storage = COMMON
  1614.               type    = STRING(64)
  1615.               value   = "FFST Example code"
  1616.           end attribute
  1617.  
  1618.           start attribute
  1619.               name    = "Version"
  1620.               id      = 3
  1621.               description = "The version for the component."
  1622.               access  = READ-ONLY
  1623.               storage = COMMON
  1624.               type    = STRING(64)
  1625.               value   = ""
  1626.           end attribute
  1627.  
  1628.           start attribute
  1629.               name    = "Serial Number"
  1630.               id      = 4
  1631.               description = "The serial number for this instance of
  1632.                              this component."
  1633.               access  = READ-ONLY
  1634.               storage = SPECIFIC
  1635.               type    = STRING(64)
  1636.               value   = ""
  1637.           end attribute
  1638.  
  1639.           start attribute
  1640.               name    = "Installation"
  1641.               id      = 5
  1642.               description = "The time and date of the last install of
  1643.                              this component."
  1644.               access  = READ-ONLY
  1645.               storage = SPECIFIC
  1646.               type    = DATE
  1647.               value   = ""
  1648.           end attribute
  1649.  
  1650.           Start Attribute
  1651.               Name = "Verify"
  1652.               Id = 6
  1653.               Access = Read-Only
  1654.               Storage = Specific
  1655.               Type = "Verify_Type"
  1656.               Description = "A code that provides a level of verification "
  1657.                             "that the component is still installed and working."
  1658.               Value = 0x07
  1659.           End Attribute
  1660.  
  1661.       end group
  1662.  
  1663.   //
  1664.   //  Software Product Group
  1665.   //
  1666.   //      This is the group that contains the software Vital Product
  1667.   //      Data attributes that identify the software product that is
  1668.   //      represented by this DMI component
  1669.   //
  1670.   //      This group is a template that defines the software product group
  1671.   //
  1672.   //      This definition should not be modified the actual values are found in
  1673.   //       the table which is after this template definition
  1674.   //
  1675.   //      There are two sample rows defined for the table, however the table can
  1676.   //       have one or more rows, what ever is correct for your component
  1677.   //
  1678.  
  1679.       start group
  1680.           name    = "OS/2 Warp Software Product"
  1681.           class   = "IBM_OS/2 WarpΓòæSoftwareProductΓòæ1.0"
  1682.           description = "OS/2 Warp standard Software Product attributes"
  1683.           key=2,4,5              // The (Tag, VendorTag, Revision) triplet acts
  1684.                                     //   as the key to this group
  1685.  
  1686.           start attribute
  1687.               name    = "Title"
  1688.               id      = 1
  1689.               access  = READ-ONLY
  1690.               type    = STRING(256)
  1691.               value   = "     "
  1692.               description = "Long name for software product package unit"
  1693.           end attribute
  1694.  
  1695.           start attribute
  1696.               name    = "Tag"
  1697.               id      = 2
  1698.               access  = READ-ONLY
  1699.               type    = STRING(256)
  1700.               value   = "     "
  1701.               description = "Short name for software product package unit"
  1702.           end attribute
  1703.  
  1704.           start attribute
  1705.               name    = "VendorTitle"
  1706.               id      = 3
  1707.               access  = READ-ONLY
  1708.               type    = STRING(256)
  1709.               value   = "     "
  1710.               description = "Long name for manufacturer of software
  1711.                              product package unit"
  1712.           end attribute
  1713.  
  1714.           start attribute
  1715.               name    = "VendorTag"
  1716.               id      = 4
  1717.               access  = READ-ONLY
  1718.               type    = STRING(256)
  1719.               value   = "     "
  1720.               description = "Short name for manufacturer of software
  1721.                              product package unit"
  1722.           end attribute
  1723.  
  1724.           start attribute
  1725.               name    = "Revision"
  1726.               id      = 5
  1727.               access  = READ-ONLY
  1728.               type    = STRING(256)
  1729.               value   = "     "
  1730.               description = "Major, Minor and Modification levels for software
  1731.                              product package unit"
  1732.           end attribute
  1733.  
  1734.           start attribute
  1735.               name    = "ModificationLevel"
  1736.               id      = 6
  1737.               access  = READ-ONLY
  1738.               type    = STRING(256)
  1739.               value   = "     "
  1740.               description = "Current CSD level for software product
  1741.                              package unit"
  1742.           end attribute
  1743.  
  1744.           start attribute
  1745.               name    = "SelectiveFixLevel"
  1746.               id      = 7
  1747.               access  = READ-ONLY
  1748.               type    = STRING(256)
  1749.               value   = "     "
  1750.               description = "Selective Fix level for software product
  1751.                              package unit"
  1752.           end attribute
  1753.  
  1754.           start attribute
  1755.               name    = "Description"
  1756.               id      = 8
  1757.               access  = READ-ONLY
  1758.               type    = STRING(256)
  1759.               value   = "     "
  1760.               description = "String that describes the software product
  1761.                              package unit"
  1762.           end attribute
  1763.  
  1764.           start attribute
  1765.               name    = "ParentTag"
  1766.               id      = 9
  1767.               access  = READ-ONLY
  1768.               type    = STRING(256)
  1769.               value   = "     "
  1770.               description = "Short name for the parent package unit of this
  1771.                              software product package unit"
  1772.           end attribute
  1773.  
  1774.           start attribute
  1775.               name    = "ParentVendorTag"
  1776.               id      = 10
  1777.               access  = READ-ONLY
  1778.               type    = STRING(256)
  1779.               value   = "     "
  1780.               description = "Short manufacturer name for the parent package unit
  1781.                              of this software product package unit"
  1782.           end attribute
  1783.  
  1784.           start attribute
  1785.               name    = "ParentRevision"
  1786.               id      = 11
  1787.               access  = READ-ONLY
  1788.               type    = STRING(256)
  1789.               value   = "     "
  1790.               description = "Short revision string for the parent package unit
  1791.                              of this software product package unit"
  1792.           end attribute
  1793.  
  1794.           start attribute
  1795.               name    = "Error Record Template File"
  1796.               id      = 12
  1797.               access  = READ-ONLY
  1798.               type    = STRING(508)
  1799.               value   = "     "
  1800.               description = "Name of the Error Record Template file for this
  1801.                              software product package unit"
  1802.           end attribute
  1803.  
  1804.       end group
  1805.  
  1806.   //
  1807.   //  Software product group table with actual values
  1808.   //
  1809.   //      This is the group that contains the software Vital Product
  1810.   //      Data attributes that identify the software product that is
  1811.   //      represented by this DMI component
  1812.   //
  1813.   //      There are two sample rows defined for the table, however the table can
  1814.   //       have one or more rows, what ever is correct for your component
  1815.   //
  1816.   //       Note each of the fields assigned a position value below
  1817.   //       are defined in the sections above.
  1818.   //
  1819.   //       THIS IS THE ONLY SECTION YOU NEED TO DEAL WITH FOR THE PURPOSE OF
  1820.   //       BUILDING YOUR OWN EXAMPLE
  1821.   //
  1822.       start table
  1823.           name = "Software components and their VPD"
  1824.           id = 2
  1825.           class   = "IBM_OS/2 WarpΓòæSoftwareProductΓòæ1.0"
  1826.  
  1827.           {"",
  1828.            "FFSTProbe Sample",       //Tag - Part of the triplet,
  1829.                                      //    identifies your product
  1830.            "",
  1831.            "IBM",                    // Vendor Tag - Part of the triplet,
  1832.                                      //    identifies your company
  1833.            "1.00",                   //  Revision - Part of Triplet
  1834.            "000000",                 // Modification Level - Specified in your
  1835.                                      //    code if not looked up
  1836.            "010101",                 // Selective Fix Level - Specified in your
  1837.                                      //    code if not looked up
  1838.            "FFSTProbe Example Program", // Description
  1839.            "",
  1840.            "",
  1841.            "",
  1842.            "PROBE.REP"}              // Repository (Template File) Name.
  1843.                                      // Should be on your DPATH
  1844.                                      // Otherwise full path would be specified.
  1845.                                      // This field is the prime
  1846.                                      // reason FFSTProbe uses DMI. The triplet
  1847.                                      // above forms the key
  1848.                                      // to retrieve the repository file
  1849.                                      // name so that the probe can be
  1850.                                      // formatted by SYSLOG
  1851.  
  1852.       end table
  1853.  
  1854.   end component
  1855.  
  1856.  
  1857. ΓòÉΓòÉΓòÉ 4. Controlling FFSTProbe Calls ΓòÉΓòÉΓòÉ
  1858.  
  1859. After you install your code on the system, you can choose to capture data other 
  1860. than that specified on the call to the FFSTProbe function. This section 
  1861. describes how to temporarily change the values that FFSTProbe uses while your 
  1862. code is running.  This eliminates the need to change the parameter values and 
  1863. recompile your code. 
  1864.  
  1865.  
  1866. ΓòÉΓòÉΓòÉ 4.1. Controlling FFSTProbe ΓòÉΓòÉΓòÉ
  1867.  
  1868. First Failure Support Technology (FFST) provides graphical user interfaces 
  1869. (GUIs) that are used to control how the FFSTProbe function captures 
  1870. information. 
  1871.  
  1872. You use the FFST commands or the user interface icons in the Problem 
  1873. Determination Tools folder. 
  1874.  
  1875. FFST provides the following user interfaces: 
  1876.  
  1877.      FFST Setup icon 
  1878.      FFSTCONF command 
  1879.  
  1880.  You can view and change the FFST setup information by using the FFSTCONF 
  1881.  command.  You can also update and view probe control table (PCT) information 
  1882.  through the setup GUI.  You can control probes from the SYSLOG utility by 
  1883.  using the Tools menu option from any details window and selecting the Modify 
  1884.  Entry Collection option. 
  1885.  
  1886.  
  1887. ΓòÉΓòÉΓòÉ 4.2. Using FFST Setup (FFSTCONF) ΓòÉΓòÉΓòÉ
  1888.  
  1889. You can use the FFST setup utility to define the following configuration 
  1890. information: 
  1891.  
  1892.      where to store dump files 
  1893.      total maximum size for all FFST files in kilobytes (KB) 
  1894.      whether you allow files to be wrapped 
  1895.      whether you allow files to be appended. 
  1896.  
  1897.  The FFST setup contains the following configuration information: 
  1898.  
  1899.      Information that is required for FFST data collection 
  1900.  
  1901.         -  Location of dumps, space for dumps, and so on 
  1902.         -  Suppression of calls to groups of calls to FFSTProbe 
  1903.  
  1904.      Information that is required to control FFST outputs (Probe Control Table 
  1905.       Configuration) 
  1906.  
  1907.  The system saves your updated configuration information.  FFST can dynamically 
  1908.  start using the new options when you are finished with the utility. 
  1909.  
  1910.  You can use the FFSTCONF command or select the FFST Setup icon in the Problem 
  1911.  Determination Tools folder to access the FFST Setup window (FFST Setup 
  1912.  Window). 
  1913.  
  1914.  
  1915.   FFST Setup Window
  1916.  
  1917.  You use the FFST Setup window to maintain information dealing with FFST files. 
  1918.  The information specifies: 
  1919.  
  1920.      where the files reside 
  1921.      total maximum size for all FFST files 
  1922.      whether the file should wrap when the space is full 
  1923.      how to control duplicate dumps 
  1924.      probe suppression for a product. 
  1925.  
  1926.  The options on the FFST Setup window are: 
  1927.  
  1928.      File, which uses the Printer Setup, Print, and Exit functions. 
  1929.  
  1930.      Actions, which has two options: 
  1931.  
  1932.         -  Dumps takes you to the FFST Dump Files Summary window, where you can 
  1933.            select a dump to view using the PM Dump Facility dump formatter. 
  1934.  
  1935.         -  PCT takes you to the PCT Summary window, where you can view or edit 
  1936.            individual calls to FFSTProbe (see Probe Control Table (PCT) User 
  1937.            Interface). 
  1938.  
  1939.  The following actions are descriptions of the fields on the FFST Setup window. 
  1940.  FFST dump management uses the fields to control the FFST files by defining the 
  1941.  storage size and characteristics. 
  1942.  
  1943.  FFST Files Directory     This field specifies where to keep files that FFST 
  1944.                           creates.  You can change the displayed pathname or 
  1945.                           select a new pathname.  To select a new pathname, you 
  1946.                           can enter the new path name in the entry field or 
  1947.                           click on the list box selector to bring up a list of 
  1948.                           pathnames and drives.  Then click on a new pathname 
  1949.                           or drive.  To move up in the file tree, click on the 
  1950.                           double dot (..) entry.  The default pathname is 
  1951.                           <boot-drive>\OS2\SYSTEM\RAS. 
  1952.  
  1953.  Space for FFST Files     Use this field to specify the disk storage space for 
  1954.                           FFST files. Note that the size is in kilobytes (KB). 
  1955.                           The default size is 1024 (1 MB).  The number of files 
  1956.                           the system keeps depends on each file size, and on 
  1957.                           the total space that is available for FFST files.  If 
  1958.                           an FFST dump exceeds the specified size, the system 
  1959.                           stores only part of the dump.  The dump file 
  1960.                           information contains the reason for the partial dump 
  1961.                           and the stored parts of the dump. You will see this 
  1962.                           information when you display the dump file. 
  1963.  
  1964.  File Wrap                Select the ON value to overwrite old dumps when the 
  1965.                           specified dump file is full. Note: if this option is 
  1966.                           ON, it will not overwrite dump files that are saved 
  1967.                           by the Save Output choice from the PM Dump Facility 
  1968.                           dump formatter Files menu. 
  1969.  
  1970.  Keep Duplicate Dumps     When this option is ON, the system keeps each dump 
  1971.                           that the call to FFSTProbe creates, even when the 
  1972.                           system previously stored a dump. 
  1973.  
  1974.                           If this option is not used (OFF), the system requires 
  1975.                           FFST to check all the dump files.  FFST checks to 
  1976.                           ensure that a dump file does not exist for this call 
  1977.                           to FFSTProbe.  When you use this option, processing 
  1978.                           is slower than normal processing.  Use this option to 
  1979.                           control runaway probes that create unneeded dumps 
  1980.                           that take up disk space. 
  1981.  
  1982.                           Even though the snapshot trace files are separate 
  1983.                           physical files, they are part of the FFST dump file 
  1984.                           so this option also affects them.  This option works 
  1985.                           in conjunction with file wrap option. 
  1986.  
  1987.  
  1988. ΓòÉΓòÉΓòÉ 4.2.1. Probe-Suppression Entry Summary Area ΓòÉΓòÉΓòÉ
  1989.  
  1990. This area displays the DMI triplet of each product for which calls to FFSTProbe 
  1991. are to be suppressed.  To start suppressing calls for your product, click on 
  1992. the Add push button at the bottom of the window.  The Probe Suppression Entry 
  1993. window appears so that you can specify your product information. 
  1994.  
  1995.  
  1996. ΓòÉΓòÉΓòÉ 4.2.2. Probe Suppression Entry Window (Add or Change Functions) ΓòÉΓòÉΓòÉ
  1997.  
  1998. The Probe Suppression Entry window (Probe Suppression Entry - Add Window) 
  1999. appears when you select the Add or Change push buttons from the FFST Setup 
  2000. window.  This window uses the DMI triplet for your product to control an entire 
  2001. group of calls to FFSTProbe within your product. Specifically, FFST uses the 
  2002. following DMI information: 
  2003.  
  2004.      Vendor Tag 
  2005.      Tag 
  2006.      Revision 
  2007.  
  2008.  
  2009.   Probe Suppression Entry - Add Window
  2010.  The differences among the Add, Change, and Delete screens are: 
  2011.  
  2012.  Add       Title bar reads "FFST - Probe Suppression - Add", and all fields are 
  2013.            empty.  You can add required information. 
  2014.  
  2015.  Change    Title bar reads "FFST - Probe Suppression - Change", and all fields 
  2016.            contain information about the selected entry.  You can change 
  2017.            required information. 
  2018.  
  2019.            You can click the list box selector that is located on the right 
  2020.            side of each entry area or enter the information directly.  When you 
  2021.            click on the list box selector, all values currently stored in the 
  2022.            PCT will be displayed. You can select the desired item from the 
  2023.            list. 
  2024.  
  2025.  Delete    Used to delete a group of probes from Probe Suppression.  This will 
  2026.            enable information logging when calling FFSTProbe for these probes. 
  2027.            The system will request a confirmation that you want to delete 
  2028.            suppression. 
  2029.  
  2030.  
  2031. ΓòÉΓòÉΓòÉ 4.3. Probe Control Table ΓòÉΓòÉΓòÉ
  2032.  
  2033. When your code calls FFSTProbe, FFST generates the requested outputs such as 
  2034. dumps or log entries.  These outputs can be dynamically controlled by defining 
  2035. an entry in the Probe Control Table (PCT). Options that are specified in a PCT 
  2036. entry override all other options. You can use PCT entries to do the following: 
  2037.  
  2038.      Control the individual calls to FFSTProbe by enabling or disabling them 
  2039.      Specify whether FFST and System Dump information is to be collected 
  2040.      Specify whether system process information is to be collected 
  2041.      Specify whether system environment information is to be collected 
  2042.      Dynamically request additional system information that is not requested 
  2043.       in the call to FFSTProbe. 
  2044.  
  2045.  Each PCT entry consists of five identifiers: 
  2046.  
  2047.      DMI_vendor_tag 
  2048.      DMI_tag 
  2049.      DMI_revision 
  2050.      Module identifier name 
  2051.      Probe ID 
  2052.  
  2053.  The entries in the PCT describe what is to be done on the call to FFSTProbe: 
  2054.  
  2055.      You cannot use duplicate entries in PCT 
  2056.      You cannot use wildcards for identifiers 
  2057.  
  2058.  The PCT mechanism looks for specific entries that match all five identifiers. 
  2059.  If the system cannot find a match for the entry, it ignores the probe control 
  2060.  entry.  The PCT entry makes the final decision about what to do.  The entry 
  2061.  can overwrite parameters that are specified in the configuration and change 
  2062.  the actual call to FFSTProbe. 
  2063.  
  2064.  FFST provides no default PCT entries. 
  2065.  
  2066.  Note:  It is important to understand that the Probe Control Table is used to 
  2067.  control individual calls to FFSTProbe and that Probe Suppression is used for 
  2068.  an entire group of calls within a product. 
  2069.  
  2070.  
  2071. ΓòÉΓòÉΓòÉ 4.3.1. Probe Control Table (PCT) User Interface ΓòÉΓòÉΓòÉ
  2072.  
  2073. Use the Probe Control Table to control individual calls to the FFSTProbe 
  2074. function. 
  2075.  
  2076. Access the Probe Control Table by entering the FFSTCONF command, or by clicking 
  2077. on the FFST Setup icon in the Problem Determination Tools folder.  When the 
  2078. FFST Setup window appears, select the Actions option and choose PCT. 
  2079.  
  2080. You can use the following window to view all the defined PCT entries. 
  2081.  
  2082.  
  2083. Probe Control Table Summary Window
  2084.  
  2085. After you select an entry on the window, use the following action-bar items. 
  2086.  
  2087.      File uses the Printer Setup, Print, and Exit functions. 
  2088.      View displays the details of the entry. 
  2089.      Edit lets you add an entry; change details of an entry; or delete an 
  2090.       entry. 
  2091.  
  2092.  
  2093. ΓòÉΓòÉΓòÉ 4.3.2. Probe Control Table (PCT) Entry Add or Change Summary Window ΓòÉΓòÉΓòÉ
  2094.  
  2095. Use the Probe Control Table Entry Summary window (FFST Probe Control Table 
  2096. Entry Summary Window) to either add or change individual calls to the FFSTProbe 
  2097. function in a product. 
  2098.  
  2099. Use the options on the Probe Control Table window to capture information that 
  2100. was not requested in the original call to the FFSTProbe function. Use the PCT 
  2101. options to specify system process information (PSTAT) or process environment 
  2102. information not in the parameters of the original call.  You can also capture 
  2103. trace information, capture a system dump, and capture a process dump through 
  2104. the PCT for a specific FFSTProbe call.  The system uses PCT values if the 
  2105. parameters on the FFSTProbe call and PCT are different. 
  2106.  
  2107. For the PCT values to be used, the Enable Probe box must be "checked."  The 
  2108. Enable FFST Dump box can be "checked" to have a FFST dump generated by the 
  2109. probe.  The Enable FFST Dump box must be "checked" before the Capture Trace 
  2110. Snapshot, Capture Process Dump, Capture System Processes, or Capture Process 
  2111. Environment data will be captured. To capture a system dump you only need to 
  2112. "check" the Enable Probe and the Capture System Dump boxes. 
  2113.  
  2114.  
  2115. FFST Probe Control Table Entry Summary Window
  2116.  
  2117. The following list defines the fields on the FFST Probe Control Entry Summary 
  2118. window: 
  2119.  
  2120.  Vendor Tag, Tag, and Revision This is the VPD information for your product 
  2121.                                that is stored in DMI. 
  2122.  
  2123.  Module and Probe ID           Parameters on the call to the FFSTProbe function 
  2124.                                that identify the individual call. 
  2125.  
  2126.  Enable Probe                  Used to enable or disable (turn on or turn off) 
  2127.                                the individual call to FFSTProbe. 
  2128.  
  2129.  Enable FFST Dump              Used to specify whether to save FFST Dump 
  2130.                                information for the individual call. 
  2131.  
  2132.  Capture Trace Snapshot        Used to collect trace data if your code did not 
  2133.                                specify trace in the original call to FFSTProbe. 
  2134.  
  2135.  Capture System Dump           Use this option to perform a system dump for 
  2136.                                calls to the FFSTProbe function.  Note that the 
  2137.                                system restarts after storing the system dump 
  2138.                                information. 
  2139.  
  2140.  Capture Process Dump          Use this option to allow the system to capture 
  2141.                                process dump data. You can view the process dump 
  2142.                                data when you format the FFST dump associated 
  2143.                                with this probe ID. 
  2144.  
  2145.  Capture System Processes      Used to capture information about all the 
  2146.                                processes and threads that are running on the 
  2147.                                system.  This information is similar to the 
  2148.                                PSTAT information that is viewed by using the 
  2149.                                PSTAT command.  For more information about the 
  2150.                                PSTAT command, refer to the OS/2 Warp Version 4 
  2151.                                Command Reference. 
  2152.  
  2153.  Capture Process Environment   Used to capture the values of environment 
  2154.                                variables for the process. 
  2155.  
  2156.  You access this window by using the following: 
  2157.  
  2158.      From the PCT summary window, select an entry and click on either the 
  2159.       Details or Change push button. 
  2160.  
  2161.         -  Details - Displays the details about the selected entry.  You can 
  2162.            only view the information. 
  2163.  
  2164.         -  Change  - Displays the selected entry and allows information to be 
  2165.            changed. 
  2166.  
  2167.      From the PCT summary window, select Add, or Change from the Edit options. 
  2168.  
  2169.       All fields are empty, and you add information as required. 
  2170.  
  2171.      From the SYSLOG utility, use the Tools menu-bar option from any details 
  2172.       window and select the Modify Entry Collection option. 
  2173.  
  2174.       All fields contain information about the selected entry.  You can change 
  2175.       the information.  If an entry is not in the PCT file, the system displays 
  2176.       the default settings. 
  2177.  
  2178.  You cannot use wild card characters for Vendor Tag, Tag, Revision, module 
  2179.  name, or probe ID.  When you add a new entry, the system checks the PCT for 
  2180.  duplicate entries. 
  2181.  
  2182.  
  2183. ΓòÉΓòÉΓòÉ 5. Viewing and Analyzing Error Log Entries ΓòÉΓòÉΓòÉ
  2184.  
  2185. This chapter assumes that you have read the information and are familiar with 
  2186. the defined terms in Guide to Instrumenting Your Code. 
  2187.  
  2188. This chapter describes error logging and the error log formatter that is used 
  2189. to format, display, and analyze error information. 
  2190.  
  2191. When your program encounters an error, the FFSTProbe API records information 
  2192. about the error in the system error log. 
  2193.  
  2194. This chapter refers to the following types of error logs: 
  2195.  
  2196.      Active error log:  The name of the log that is currently used.  When you 
  2197.       suspend logging, the system will not write entries to the active error 
  2198.       log. 
  2199.      Default error log:  The system uses this log after you power on the 
  2200.       system.  The system assumes this log until you specify another log to 
  2201.       work with. 
  2202.      Current error log:  The error log that a user is currently working with. 
  2203.  
  2204.  
  2205. ΓòÉΓòÉΓòÉ 5.1. What is an Error Record? ΓòÉΓòÉΓòÉ
  2206.  
  2207. An error record is created by the system when an error in a system or 
  2208. application program triggers a probe in that program.  Error records contain 
  2209. detailed information to help you diagnose the error. Error records are also 
  2210. called DET1 records.  Records created by a back level logging system are called 
  2211. DET4 records. 
  2212.  
  2213.  
  2214. ΓòÉΓòÉΓòÉ 5.2. What is a Control Record? ΓòÉΓòÉΓòÉ
  2215.  
  2216. A control record is created by the system when you make changes to the way 
  2217. errors are logged.  For example, when you suspend error logging or direct error 
  2218. logging to a new file, the system records that change in a control record. 
  2219. Control records are also called DET2 records.  Control records are new for FFST 
  2220. technology and are not available in records created by a back level logging 
  2221. system. 
  2222.  
  2223.  
  2224. ΓòÉΓòÉΓòÉ 5.3. Controlling Error Logs by Using the SYSLOG Command ΓòÉΓòÉΓòÉ
  2225.  
  2226. Use the SYSLOG command and its various parameters to access the SYSLOG utility. 
  2227. If you do not specify parameters when you use the command, the system loads the 
  2228. active system error log and displays the SYSLOG Summary window (see Working 
  2229. with the Error Log and Controlling Error Logging).  If the system cannot find 
  2230. the file name you requested, SYSLOG displays a message. 
  2231.  
  2232. If logging is not active, an error message will be shown stating 
  2233.  
  2234.   "The OS/2 Logging Facility device driver LOG$ is not
  2235.    loaded.  To activate logging enter DEVICE=\OS2\LOG.SYS
  2236.    and RUN=\OS2\SYSTEM\LOGDAEM.EXE in config.sys and reboot.
  2237.  
  2238. The available parameters of the SYSLOG command are as follows: 
  2239.  
  2240.  Parameter                Action 
  2241.  
  2242.  /V:<error log pathname>  Use this parameter with the error log pathname to 
  2243.                           access the error log.  If you specify no pathname, 
  2244.                           the system accesses the active error log. 
  2245.  
  2246.  /S:<error log pathname>  Use this parameter to suspend error logging.  Note 
  2247.                           that when you use this parameter, the system writes 
  2248.                           an error log entry to the current active error log 
  2249.                           that indicates that you suspended logging. 
  2250.  
  2251.  /R:<error log pathname>  Use this parameter to resume error logging to the 
  2252.                           suspended file.  If the system cannot find the 
  2253.                           pathname, the system does not resume logging.  If the 
  2254.                           system finds the pathname but cannot find the error 
  2255.                           log file, the system creates the error log file and 
  2256.                           resumes logging.  Note that when you use this 
  2257.                           parameter the system writes an error log entry to the 
  2258.                           current active error log that indicates that you 
  2259.                           resumed logging. 
  2260.  
  2261.  /P:<error log pathname>  Use this parameter to redirect error logging to 
  2262.                           another error log.  Note that when you use this 
  2263.                           parameter the system writes an error log entry to the 
  2264.                           current active error log that indicates you 
  2265.                           redirected logging.  The error log entry contains the 
  2266.                           pathname of the error log file that logging was 
  2267.                           directed from and the pathname of the error log file 
  2268.                           that logging was directed to. 
  2269.  
  2270.  /W:xx                    Use this parameter along with the /P parameter and 
  2271.                           the error log pathname to change the maximum size 
  2272.                           (xx) of the specified error log.  The default size of 
  2273.                           the error log is 64 KB. 
  2274.  
  2275.  
  2276. ΓòÉΓòÉΓòÉ 5.4. Viewing Error Log Contents by Using SYSLOG ΓòÉΓòÉΓòÉ
  2277.  
  2278. SYSLOG is also a function you use to view the contents of an error log entry. 
  2279. This function resides in the Problem Determination Tools folder. 
  2280.  
  2281. SYSLOG supports formatting and viewing error log entries created either from 
  2282. the DosProbe or FFSTProbe APIs.  Entries created by DosProbe will not have as 
  2283. much data 
  2284.  
  2285. You can start SYSLOG by any of the following methods: 
  2286.  
  2287.      Clicking on the SYSLOG icon that is located in the Problem Determination 
  2288.       Tools folder of the OS2 System folder. 
  2289.  
  2290.      Using the SYSLOG command without any parameters.  The Problem 
  2291.       Determination Users Guide in the Problem Determination Tools folder 
  2292.       describes the SYSLOG command. 
  2293.  
  2294.      Dragging an error log file and dropping it onto the SYSLOG icon. 
  2295.  
  2296.  If you drop multiple error log files onto the SYSLOG icon, the system starts a 
  2297.  separate session of the formatter for each file. 
  2298.  
  2299.  You can select another error log file to view by selecting the Open... choice 
  2300.  of the File pull-down option within SYSLOG.  The active file appears as the 
  2301.  default.  You can change the file name to any other error log. 
  2302.  
  2303.  You can select which error log entry to view by double clicking on an error 
  2304.  log entry.  SYSLOG windows contain the following system error log information: 
  2305.  
  2306.      A summary panel containing an entry for each error log record in a given 
  2307.       error log file with limited information on each. 
  2308.  
  2309.      One or more panels containing detailed information on specific error log 
  2310.       entries. 
  2311.  
  2312.      A browseable pop-up window containing the header information for the 
  2313.       error log being viewed. 
  2314.  
  2315.      An entry into the PM Dump Facility dump formatter tool using parameters 
  2316.       the error log record contains. 
  2317.  
  2318.      An entry into the trace formatter tool using the parameters that are 
  2319.       contained in the error log record. 
  2320.  
  2321.      An entry into the Modify Enter Collection tool used to change 
  2322.       data-collection parameters. 
  2323.  
  2324.  In addition to its display capabilities, SYSLOG also provides controls to 
  2325.  change the system parameters that pertain to logging.  Use the controls to do 
  2326.  the following: 
  2327.  
  2328.      activate logging 
  2329.      suspend active logging 
  2330.      redirect logging 
  2331.      increase the maximum size of the error log file. 
  2332.  
  2333.  The following information describes the SYSLOG Summary window and explains how 
  2334.  you use SYSLOG to view, change, and control the error log and error log 
  2335.  contents. 
  2336.  
  2337.  
  2338. ΓòÉΓòÉΓòÉ 5.5. Working with the Error Log and Controlling Error Logging ΓòÉΓòÉΓòÉ
  2339.  
  2340. When the system opens the error log, SYSLOG displays a Summary window with the 
  2341. following information for each error log entry: 
  2342.  
  2343.      the date and time the system detected the error 
  2344.      entry ID number 
  2345.      severity of the error 
  2346.      module name 
  2347.      error description. 
  2348.  You use the Summary window to work with error logs, error log entries, and 
  2349.  control the error-logging function. 
  2350.  
  2351.  To see all the details for each error log entry, use the horizontal slider 
  2352.  bar.  You can select Help on the menu bar for descriptions of the fields and 
  2353.  options on the Summary window. 
  2354.  
  2355.  
  2356.   SYSLOG Summary Window
  2357.  
  2358.  The Summary window is a snapshot of the error log.  It allows selection of 
  2359.  single or multiple entries. 
  2360.  
  2361.  Be aware that, when you use the active log, the log may change during the 
  2362.  session if the system records another error.  The error log details for a 
  2363.  selected entry may no longer be available from the error log file if the error 
  2364.  log wraps.  When wrapping occurs, the system adds new entries at the top of 
  2365.  the error log and erases the oldest entries.  The system erases only enough 
  2366.  old information to make room for the new for the new information.  If you 
  2367.  select an erased error entry, the system displays an error message. 
  2368.  
  2369.  The following information contains a description of the options on the Summary 
  2370.  window. 
  2371.  
  2372.  
  2373. ΓòÉΓòÉΓòÉ 5.5.1. File Choices ΓòÉΓòÉΓòÉ
  2374.  
  2375. The File choices that are accessed from the SYSLOG Summary window are the 
  2376. standard OS/2 choices:  Open..., Printer Setup..., and Print. 
  2377.  
  2378. When you select the Open... choice, the system displays the Open an Error Log 
  2379. File window. 
  2380.  
  2381. The system uses the default error log named LOG001.DAT when opening the error 
  2382. log for the first time.  LOG001.DAT remains the summary log until you redirect 
  2383. logging to another log (see Redirect Logging). 
  2384.  
  2385.  
  2386. ΓòÉΓòÉΓòÉ 5.5.2. Edit Choices ΓòÉΓòÉΓòÉ
  2387.  
  2388. The Edit choices that you access from the SYSLOG Summary window are the 
  2389. standard OS/2 choices: Copy, Select All, and Deselect All. 
  2390.  
  2391.  
  2392. ΓòÉΓòÉΓòÉ 5.5.3. View Choices ΓòÉΓòÉΓòÉ
  2393.  
  2394. The View choices from the SYSLOG Summary window are Refresh Now, Header, Error 
  2395. Details, Search, All Records, and Active File Name. The description of the View 
  2396. choices follow. 
  2397.  
  2398.  
  2399. View Menu-Bar Choices on SYSLOG Summary Window
  2400.  
  2401.  
  2402. ΓòÉΓòÉΓòÉ 5.5.3.1. Refresh Now ΓòÉΓòÉΓòÉ
  2403.  
  2404. The Refresh Now choice updates the Summary window with any changes that 
  2405. occurred in the error log after you initially displayed the log.  If the error 
  2406. log being viewed is the system's active log and logging is not suspended, the 
  2407. contents of the error log could change during the SYSLOG session.  Values that 
  2408. are displayed on the Search window have no effect on the records displayed in 
  2409. the Summary window when you use this option.  The system ignores prior search 
  2410. operations. 
  2411.  
  2412.  
  2413. ΓòÉΓòÉΓòÉ 5.5.3.2. Header ΓòÉΓòÉΓòÉ
  2414.  
  2415. The Header choice displays the header information of the error log entry being 
  2416. viewed. 
  2417.  
  2418.  
  2419. SYSLOG Header Information Window
  2420.  
  2421.  
  2422. ΓòÉΓòÉΓòÉ 5.5.3.3. Error Details ΓòÉΓòÉΓòÉ
  2423.  
  2424. The Error Details choice displays a SYSLOG Details window that can be used to 
  2425. access dump and trace data and to change error-entry collections.  This choice 
  2426. associates various tools and appears later in this chapter under the heading 
  2427. Displaying Error Log Entry Data. 
  2428.  
  2429.  
  2430. ΓòÉΓòÉΓòÉ 5.5.3.4. Search Choice ΓòÉΓòÉΓòÉ
  2431.  
  2432. The Search choice uses your search values to select the log entries that are 
  2433. displayed on the Summary window.  The Search choice has three associated 
  2434. windows:  Search window, Add Criteria dialog, and Change Criteria dialog. 
  2435.  
  2436. The Search window is a dialog window with fields for you to select, create, 
  2437. change, and delete search criteria.  You can use search values alone (by 
  2438. specifying OR) or combined (by specifying AND) to provide either specific or 
  2439. general filtering. 
  2440.  
  2441.  
  2442. Search Window
  2443.  
  2444.  
  2445. Add Criteria Dialog
  2446.  
  2447. Use the Add Criteria dialog to add criteria to the search for log entries.  Use 
  2448. the three entry fields (Attribute, Comparison Type, and Comparison Value) to 
  2449. construct the criteria.  Each entry field has a pull-down list box that 
  2450. contains valid values for the field.  You can select an item from the list box, 
  2451. or enter text in the field. 
  2452.  
  2453. The valid values for the Attribute field are: 
  2454.  
  2455.      Date 
  2456.      Time 
  2457.      Entry ID 
  2458.      Record type 
  2459.      Severity 
  2460.      Directory name 
  2461.      Module 
  2462.      Probe 
  2463.      DMI vendor tag 
  2464.      DMI tag 
  2465.      Machine type 
  2466.      Serial number 
  2467.      User data 
  2468.  
  2469.  The Comparison Type values are the standard OS/2 values.  Note that some 
  2470.  values may not be valid with certain Attributes.  For example, the Greater 
  2471.  Than type is not valid with the Directory Name attribute.  In this case, the 
  2472.  system displays an error message box. 
  2473.  
  2474.  The Comparison Value may not always have a pull-down list box, depending on 
  2475.  the Attribute value being selected. 
  2476.  
  2477.  Use the Change Criteria dialog to change the highlighted criteria on the 
  2478.  Search window.  It is similar to the Add Criteria dialog. 
  2479.  
  2480.  
  2481. ΓòÉΓòÉΓòÉ 5.5.3.5. All Records ΓòÉΓòÉΓòÉ
  2482.  
  2483. The All Records choice restores the contents of the Summary window to the 
  2484. previous search values. 
  2485.  
  2486.  
  2487. ΓòÉΓòÉΓòÉ 5.5.3.6. Active Log Name ΓòÉΓòÉΓòÉ
  2488.  
  2489. The Active Log Name choice displays the active log name, which is the error log 
  2490. that is currently being used for the logging of errors.  This may or may not be 
  2491. the log you are currently viewing. 
  2492.  
  2493.  
  2494. ΓòÉΓòÉΓòÉ 5.5.4. Action Choices ΓòÉΓòÉΓòÉ
  2495.  
  2496. The Action choices from the SYSLOG Summary window are Suspend/Activate Logging, 
  2497. Redirect Logging, Change Log Size, and Clear Log File. 
  2498.  
  2499. All the Action menu choices pertain to the actual collection of system error 
  2500. information.  For each action you take, the system records the action in the 
  2501. appropriate error log. 
  2502.  
  2503.  
  2504. Action Menu-Bar Choices on the SYSLOG Summary Window
  2505.  
  2506.  
  2507. ΓòÉΓòÉΓòÉ 5.5.4.1. Suspend/Activate Logging ΓòÉΓòÉΓòÉ
  2508.  
  2509. The Suspend/Activate Logging choice causes the system to either activate or 
  2510. suspend the logging of errors to the current log.  If logging is active when 
  2511. you select this option, the system suspends logging.  When logging is inactive, 
  2512. selecting this option reactivates logging.  After suspending logging, you can 
  2513. delete the log file and reactivate logging.  The system creates a new log file 
  2514. with the same name as the deleted file and resumes logging to the new file. 
  2515.  
  2516. The system writes a record entry to the current error log file for each change 
  2517. in logging status. 
  2518.  
  2519.  
  2520. ΓòÉΓòÉΓòÉ 5.5.4.2. Redirect Logging ΓòÉΓòÉΓòÉ
  2521.  
  2522. The Redirect Logging choice displays a standard file dialog for you to choose a 
  2523. different destination for error logging.  You can select an existing log file 
  2524. or a new log file.  If you direct logging to a log file that does not exist, 
  2525. the system creates the file and directs logging to the new file. The system 
  2526. writes an entry to the previously active error log file to indicate the change 
  2527. in logging status. 
  2528.  
  2529.  
  2530. ΓòÉΓòÉΓòÉ 5.5.4.3. Change Log Size ΓòÉΓòÉΓòÉ
  2531.  
  2532.  
  2533. Change Log Size Window
  2534.  
  2535. The Change Log Size choice allows users to change the maximum size of the log 
  2536. file that the system allocates.  You can either increase or decrease the size 
  2537. of the log.  You cannot make the size smaller than the current size.  Selecting 
  2538. this choice displays the path name of the system's current log file as well as 
  2539. any other log files that are known to the system.  The system also displays the 
  2540. current maximum size and an input field allowing the maximum size to be 
  2541. changed.  When complete, a message box informs the user of the new status. 
  2542. This choice does not change the maximum size of log files other than the 
  2543. selected log.  The system writes a log entry to the error log file you 
  2544. specified to indicate the change in size. 
  2545.  
  2546.  
  2547. ΓòÉΓòÉΓòÉ 5.5.5. Displaying Error Log Entry Data ΓòÉΓòÉΓòÉ
  2548.  
  2549. Select the Error Details choice from the View menu on the SYSLOG Summary window 
  2550. to display a Details screen for the selected log entry.  The Details screen 
  2551. below shows DET1 detailed information about a log entry created using the 
  2552. current FFST technology. The File and Edit menu-bar choices are standard OS/2 
  2553. choices. 
  2554.  
  2555.  
  2556. SYSLOG DET1 Record Details Window
  2557.  
  2558. The following screen shows an example of User Data that was requested in the 
  2559. parameters when the FFSTProbe API was called. 
  2560.  
  2561.  
  2562. SYSLOG DET1 Record User Data Info
  2563.  
  2564. The Details screen shown below is an example of a DET4 error record detailed 
  2565. information created using back level FFST technology.  The formats of the data 
  2566. may vary. 
  2567.  
  2568.  
  2569. SYSLOG DET4 Record Details Window
  2570.  
  2571. Select the Tools menu-bar choice from the Details window that is shown in Error 
  2572. Details to access dump and trace data and change entry collections. 
  2573.  
  2574.  
  2575. Tools Menu-Bar Choices on the SYSLOG Details Window
  2576.  
  2577. The Display Dump File choice starts the PM Dump Facility dump formatter by 
  2578. using the parameters that are contained in the log record being displayed. 
  2579. Capturing and Saving Failure-Related Information through Dumps contains more 
  2580. information about dumps. 
  2581.  
  2582. The Display Trace File choice starts the trace formatter by using the 
  2583. parameters that are contained in the log record being displayed.  Analyzing 
  2584. Performance and Debugging Problems Using Trace contains more information about 
  2585. trace. 
  2586.  
  2587. The Modify Entry Collection choice starts the PCT (probe control table) 
  2588. function of FFST.  You can use the PCT tool to change options that are 
  2589. associated with the call to FFSTProbe that generated this log entry.  For more 
  2590. information about the PCT function, see Probe Control Table. 
  2591.  
  2592.  
  2593. ΓòÉΓòÉΓòÉ 5.6. Accessing Error-Log Information through Functions ΓòÉΓòÉΓòÉ
  2594.  
  2595. You can also work with error log information through functions that provide an 
  2596. open interface by allowing OS/2 applications to access error log entries. 
  2597. These functions are: 
  2598.  
  2599.      LogOpenFile - used to open a log file for subsequent reading. 
  2600.  
  2601.      LogReadEntry - used to read entries from the log file.  The call supports 
  2602.       both a direct access mechanism and a log-file search mechanism. 
  2603.  
  2604.      LogFormatEntry - used to obtain a set of ASCII or UniCode strings that 
  2605.       you can display after formatting the log entry. 
  2606.  
  2607.      LogCloseFile - used to close a Log File that a LogOpenFile call opened. 
  2608.  
  2609.  As described in Problem Determination APIs, these APIs can be used with either 
  2610.  ASCII or UniCode data. 
  2611.  
  2612.  
  2613. ΓòÉΓòÉΓòÉ 5.6.1. Event Notification ΓòÉΓòÉΓòÉ
  2614.  
  2615. Each time your code calls the FFSTProbe function, the system creates an error 
  2616. log entry.  This action is known as an event.  You can request to be notified 
  2617. when the system records errors.  The system notifies you through a process that 
  2618. is known as event notification. 
  2619.  
  2620. You use an event-notification filter, a flexible data structure, to specify the 
  2621. type of events for notification. 
  2622.  
  2623. The functions that are associated with event notification are: 
  2624.  
  2625.      LogOpenEventNotification 
  2626.  
  2627.       This function enables your product to register with the logging service 
  2628.       so that the system notifies you when it creates specific records.  You 
  2629.       specify which log records you would like to be notified about by 
  2630.       providing filtering information.  If you do not provide filter 
  2631.       information, the system notifies you of every entry. 
  2632.  
  2633.      LogChangeEventFilter 
  2634.  
  2635.       This function enables you to change the event-notification filter for a 
  2636.       registered product.  In addition to changing the filter, you can specify 
  2637.       current event-notification filter entries for the system to delete before 
  2638.       the filter change takes effect. 
  2639.  
  2640.      LogWaitEvent 
  2641.  
  2642.       After the LogOpenEventNotification function registers your product with 
  2643.       the logging service, use the LogWaitEvent function to request 
  2644.       notification.  The system notifies you of the next error log entry that 
  2645.       meets the registration values.  The system returns the log entry into a 
  2646.       buffer area your product specified. 
  2647.  
  2648.      LogCloseEventNotification 
  2649.  
  2650.       This function enables you to close event-notification requests and remove 
  2651.       product registration with the logging service. 
  2652.  
  2653.  For more information about these functions, refer to Problem Determination 
  2654.  APIs. 
  2655.  
  2656.  
  2657. ΓòÉΓòÉΓòÉ 5.7. Remote Error Reporting ΓòÉΓòÉΓòÉ
  2658.  
  2659. A local system uses remote error reporting to notify a remote managing system 
  2660. that an error has occurred.  You must enable remote error reporting by added 
  2661. the /r option on the SMSTART statement in the CONFIG.SYS file. 
  2662.  
  2663. The remote error-reporting application on the local system monitors the error 
  2664. log.  When the system records an error, the remote error-reporting application 
  2665. converts the error into a Desktop Management Interface (DMI) indication and 
  2666. notifies the SystemView Agent of the error.  The SystemView Agent converts the 
  2667. indication into an SNMP trap and sends the trap to a remote error-managing 
  2668. system.  The indications that the remote error-reporting application creates 
  2669. are also available to local system applications through the DMI Management 
  2670. Interface. 
  2671.  
  2672. As the system records errors through use of the FFSTProbe function, the remote 
  2673. error logging application uses the logging event-notification functions to 
  2674. receive the error log entries.  The remote error logging application translates 
  2675. the entries into DMI indications.  The system sends DMI indications to the DMI 
  2676. service-layer program.  The DMI service layer forwards the indications to DMI 
  2677. management application programs. One of these applications, the DMI Subagent, 
  2678. is a SystemView program that converts the DMI indications into SNMP (Simple 
  2679. Network Management Protocol) traps.  After conversion, the system sends the 
  2680. traps to an SNMP manager program that resides on a remote system.  The SNMP 
  2681. manager receives the traps and displays error log fields so that a network 
  2682. administrator can read the traps to determine appropriate action. 
  2683.  
  2684. The current implementation translates a Unicode-format error log entry into an 
  2685. ISO8859-1 format DMI indication.  The system changes any Unicode characters 
  2686. that cannot be displayed in ISO8859-1 to a period (.). 
  2687.  
  2688.  
  2689. ΓòÉΓòÉΓòÉ 5.7.1. Building and Sending an Indication ΓòÉΓòÉΓòÉ
  2690.  
  2691. When the remote error reporting application receives an entry from the error 
  2692. log, it translates the entry into a DMI indication.  An error log entry 
  2693. contains multiple fields of information that describe the error being logged. 
  2694. The remote error reporting application translates several of the fields into 
  2695. DMI attributes.  The attributes match the remote error-reporting System 
  2696. Management Information Format (MIF) the system installed in the DMI MIF 
  2697. database. 
  2698.  
  2699. The DMI indication sends only a portion of the error log entry.  The indication 
  2700. contains a total of 17 attributes from three error groups. The IBM Event 
  2701. Indication group contains general attributes that identify the error.  The FFST 
  2702. Error and OS/2 Software groups contain fields that provide specific 
  2703. information.  For more detail of these error groups, view the remote 
  2704. error-reporting MIF (REMOTERR.MIF). 
  2705.  
  2706. Because the lengths of some attributes can be as long as 508 bytes.  The 
  2707. indication, once converted into an SNMP trap, could exceed the maximum length 
  2708. of 4096 bytes.  Normally indications do not exceed the maximum size. 
  2709.  
  2710. The system sends DMI indications for Only error records with severity of the 
  2711. following levels:  critical error, major error, and minor error. 
  2712.  
  2713. For additional information that is related to remote error reporting, refer to 
  2714. SystemView Agent User's Guide and the SystemView Agent Programmer's Guide. 
  2715.  
  2716.  
  2717. ΓòÉΓòÉΓòÉ 6. Analyzing Performance and Debugging Problems Using Trace ΓòÉΓòÉΓòÉ
  2718.  
  2719. This chapter describes trace and the benefits of the various types of trace 
  2720. points.  The chapter contains an overview of instrumenting (setting up) your 
  2721. code to use trace and explains how to display and analyze trace information. 
  2722.  
  2723. This chapter also describes the following programs that are used to analyze 
  2724. trace information: 
  2725.  
  2726.      Trace Formatter (TRACEFMT) 
  2727.      Trace Commands (TRACE and TRACEBUF) 
  2728.      Trace Customizer (TRCUST) 
  2729.      Trace Capture (TRACEGET) 
  2730.  
  2731.  
  2732.   Trace Flow
  2733.  
  2734.  
  2735. ΓòÉΓòÉΓòÉ 6.1. Turning on Trace Points Using the TRACE Command ΓòÉΓòÉΓòÉ
  2736.  
  2737. Use the TRACE command to control (turn on and off) trace points in your 
  2738. product.  When you turn on a trace point, the system considers the trace point 
  2739. to be active and stores information for trace point in the trace file. 
  2740.  
  2741. Refer to OS/2 Warp Version 4 Command Reference for information about using the 
  2742. TRACE command and its parameters. 
  2743.  
  2744. The following two statements need to be added to your CONFIG.SYS file before 
  2745. you use the TRACE command: 
  2746.  
  2747.  TRACEBUF=x          x is used to set the trace buffer size.  Valid values are 
  2748.                      from 1 to 63 kilobytes (KB).  The default size of the 
  2749.                      buffer is 4 KB. 
  2750.  
  2751.  TRACE=╨¥ ON | OFF Γöÿ  Used to turn trace on or off. 
  2752.  
  2753.  If neither statement (TRACEBUF nor TRACE) is included in the CONFIG.SYS file 
  2754.  on your system, trace is disabled. 
  2755.  
  2756.  
  2757. ΓòÉΓòÉΓòÉ 6.2. Trace Scenario ΓòÉΓòÉΓòÉ
  2758.  
  2759. Use the TRACE command to store trace data in the trace buffer.  The following 
  2760. list of commands and descriptions define what happens when you use the TRACE 
  2761. command. 
  2762.  
  2763.  Command Entered          Description of Function 
  2764.  
  2765.  TRACE=ON                 Statement added to CONFIG.SYS 
  2766.  
  2767.  TRACEBUF=4               Statement added to CONFIG.SYS 
  2768.  
  2769.  TRCUST TEST.TSF          Creates trace information for both formatting output 
  2770.                           text and for controlling dynamic trace.  For more 
  2771.                           information about the TRCUST command and its 
  2772.                           parameters, refer to the TRCUST document in the 
  2773.                           Toolkit. 
  2774.  
  2775.  TRACE ON 240             Turn trace ON and specify the major code for the 
  2776.                           trace points to be traced. 
  2777.  
  2778.  TRACE ON TEST.TDF        Modifies the .DLL file and starts dynamic trace 
  2779.                           points in the .DLL file specified in the TEST.TSF 
  2780.                           file. 
  2781.  
  2782.  Run your program         Perform normal system operations 
  2783.  
  2784.  TEST 
  2785.  
  2786.  TRACE OFF                Use the TRACE command and OFF parameter to end 
  2787.                           tracing 
  2788.  
  2789.  TRACEFMT                 Use the TRACEFMT command to format event trace buffer 
  2790.                           data. 
  2791.  
  2792.  For information about the TRACE and TRACEBUF commands, refer to the OS/2 Warp 
  2793.  Version 4 Command Reference. 
  2794.  
  2795.  
  2796. ΓòÉΓòÉΓòÉ 6.3. Saving Trace Data ΓòÉΓòÉΓòÉ
  2797.  
  2798. You save trace point entries that are created within the system trace buffer in 
  2799. the following ways: 
  2800.  
  2801.      Use TRACE ON to turn on all static trace points 
  2802.  
  2803.      Use TRACE ON 220 to turn on trace points for major code 220 
  2804.  
  2805.      Use TRACE ON PRE to turn on the trace points for the PRE grouping. There 
  2806.       are several other groupings available. 
  2807.  
  2808.      Use TRACE ON TEST.TDF to patch the .DLL file named in the TEST.TSF file. 
  2809.       TRCUST uses the TEST.TSF file to create the TEST.TDF file.  After the 
  2810.       .DLL is patched, the system will save trace points when the .DLL is 
  2811.       loaded into the system and run. 
  2812.  
  2813.  There are several other combinations of using the TRACE command.  Refer to the 
  2814.  OS/2 Warp Version 4 Command Reference for more information. 
  2815.  
  2816.  
  2817. ΓòÉΓòÉΓòÉ 6.4. Formatting Trace Data ΓòÉΓòÉΓòÉ
  2818.  
  2819. The system saves collected trace points in the system trace buffer. This buffer 
  2820. can be displayed by using the trace formatter.  This section includes 
  2821. descriptions of the execution methods, user interface, supported files, and the 
  2822. formatting of data. 
  2823.  
  2824. As seen in the example in Trace Format, you can display two types of 
  2825. information when you use the trace formatter.  Summary data at the top of the 
  2826. file includes information about the file, trace buffer, and possibly vital 
  2827. product data (VPD).  This information changes with each trace file. 
  2828.  
  2829. The second type of data are the actual trace point entries.  Each entry 
  2830. includes the following: 
  2831.  
  2832.      event number 
  2833.      timestamp 
  2834.      major and minor codes 
  2835.      process ID information 
  2836.      any optional data saved by the system. 
  2837.  
  2838.  
  2839. ΓòÉΓòÉΓòÉ 6.4.1. Starting the Trace Formatter ΓòÉΓòÉΓòÉ
  2840.  
  2841. You start the trace formatter by using any of the following methods: 
  2842.  
  2843.      On an OS/2 command line, type TRACEFMT (followed by an optional trace 
  2844.       file name). 
  2845.  
  2846.      Double-click on the trace formatter program icon. 
  2847.  
  2848.      Drag and drop the icon for a trace data file onto the trace format 
  2849.       program icon. 
  2850.  
  2851.      Double-click on the icon for a trace data file that is associated with 
  2852.       the trace format program. 
  2853.  
  2854.      Start the trace formatter option from the SYSLOG program or the PMDF 
  2855.       program. 
  2856.  
  2857.  
  2858. ΓòÉΓòÉΓòÉ 6.4.2. Using the Trace Formatter to View, Change, and Analyze Trace Data ΓòÉΓòÉΓòÉ
  2859.  
  2860. This section describes the user interface that the trace formatter uses. 
  2861.  
  2862.  
  2863. ΓòÉΓòÉΓòÉ 6.4.2.1. Menu-Bar Choices ΓòÉΓòÉΓòÉ
  2864.  
  2865. The pull-downs available within the trace formatter are: 
  2866.  
  2867.  
  2868. Trace Format
  2869.  
  2870.  File      Use this pull-down to select a trace file to viewed and what to do 
  2871.            to the contents: 
  2872.  
  2873.            Open                Used to select a .TRC file to view; 
  2874.  
  2875.            Save unformatted    Used to save unformatted trace data to a file 
  2876.                                usually with the file extension of .itf.  The 
  2877.                                .itf file can be reloaded into the trace 
  2878.                                formatter. 
  2879.  
  2880.            Save formatted      Used to save the contents to a text file (with 
  2881.                                the extension .FTF for Formatted Trace File). 
  2882.                                This data can be viewed with an editor such as 
  2883.                                the system editor. 
  2884.  
  2885.            Print Setup         Used to select the output destination of 
  2886.                                formatted data when you select the Print option. 
  2887.                                Output can go to either a printer or a file; 
  2888.                                check the corresponding box to choose the 
  2889.                                destination.  Select a printer name from the 
  2890.                                drop-down choices or type a file name directly 
  2891.                                into the field. 
  2892.  
  2893.            Print               Used to send the currently formatted data to the 
  2894.                                destination selected in the Printer Setup 
  2895.                                option. 
  2896.  
  2897.            Recapture buffer    Recaptures the current trace buffer and 
  2898.                                refreshes the display. 
  2899.  
  2900.            Set .TFF search path Set where to look for .TFF trace formatting 
  2901.                                files to use when you format trace data. 
  2902.  
  2903.            Exit                Ends the trace formatter program. 
  2904.  
  2905.  View      Allows you to change the view of the trace file contents: 
  2906.  
  2907.            Select                   Allows a combination of criteria to be 
  2908.                                     selected.  You can choose the trace 
  2909.                                     contents important to viewing; this is 
  2910.                                     similar to the SYSLOG Search function as 
  2911.                                     shown in Search Choice.  You select the 
  2912.                                     following items in various combinations: 
  2913.  
  2914.                                         Major codes 
  2915.                                         Minor codes 
  2916.                                         Event number 
  2917.                                         Process ID 
  2918.                                         Time and date 
  2919.  
  2920.                                     The search combination allows you to build 
  2921.                                     search selections by adding, deleting, or 
  2922.                                     changing conditions before you start the 
  2923.                                     search.  In addition, you can save the 
  2924.                                     search values for reuse.  The system 
  2925.                                     refreshes the window with the selected 
  2926.                                     contents. 
  2927.  
  2928.            Display all events       Cancels the previous Select or summary 
  2929.                                     display and shows all contents. 
  2930.  
  2931.            Display summary by Process ID Displays a sorted listing by process 
  2932.                                     ID 
  2933.  
  2934.            Display summary by Major Code Displays a sorted listing by major 
  2935.                                     code 
  2936.  
  2937.            Find                     Allows you to search for any particular 
  2938.                                     text in the displayed contents. 
  2939.  
  2940.            Repeat find              Repeats the search for the string of text. 
  2941.  
  2942.            Mark all                 Marks all the text being displayed so you 
  2943.                                     can then copy the text to the clipboard. 
  2944.  
  2945.            Copy                     Copy the selected text contents to the 
  2946.                                     clipboard. You cannot paste from the 
  2947.                                     clipboard to the trace formatter. 
  2948.  
  2949.            Fonts                    Select the font used to display formatted 
  2950.                                     data. 
  2951.  
  2952.  Help 
  2953.  
  2954.            Using help               General help on using trace formatter 
  2955.  
  2956.            General help             General help on using help 
  2957.  
  2958.            Keys help                General help on using trace formatter keys 
  2959.  
  2960.            Help index               Index of help key words 
  2961.  
  2962.            Product Information      Copyright and program information 
  2963.  
  2964.  
  2965. ΓòÉΓòÉΓòÉ 6.5. TRACEGET Command ΓòÉΓòÉΓòÉ
  2966.  
  2967. When you enter the command TRACEGET nnn.trc, the system captures the contents 
  2968. of the trace buffer into the file named nnn.trc.  The TRACEGET command is a 
  2969. supplement to the trace formatter.  You use the command when the trace 
  2970. formatter cannot be used (such as when a Presentation Manager failure occurs). 
  2971. The file nnn.trc can be saved on removable media and sent to your service 
  2972. organization.  You can also copy nnn.trc to another system and use the trace 
  2973. formatter to display the contents of the file. 
  2974.  
  2975.  
  2976. ΓòÉΓòÉΓòÉ 6.6. Summary ΓòÉΓòÉΓòÉ
  2977.  
  2978. This chapter has covered the user interface functions and commands that are 
  2979. associated with trace. 
  2980.  
  2981. You use trace to understand data and functions both outside and inside of 
  2982. applications.  Use this data to correct problems and resolve unwanted 
  2983. conditions. 
  2984.  
  2985. The trace facility gives you a means to track, save, display, and analyze this 
  2986. diagnostic program data. 
  2987.  
  2988.  
  2989. ΓòÉΓòÉΓòÉ 7. Capturing and Saving Failure-Related Information through Dumps ΓòÉΓòÉΓòÉ
  2990.  
  2991. This chapter describes FFST dumps, process dumps, and system dumps. This 
  2992. chapter also instructs you how to set up for and enable system dumps.  This 
  2993. chapter instructs you on how to use the Presentation Manager Dump Facility 
  2994. (PMDF) dump formatter to display and analyze FFST (First Failure Support 
  2995. Technology) dumps, process dump, and system dump information. 
  2996.  
  2997. The FFST dump portion of this chapter assumes that you are familiar with the 
  2998. information and terms that are described in Guide to Instrumenting Your Code. 
  2999.  
  3000.  
  3001. ΓòÉΓòÉΓòÉ 7.1. What Is A Dump? ΓòÉΓòÉΓòÉ
  3002.  
  3003. A dump is a file created by the system at the time of a failure that contains a 
  3004. collection of system data.  The collected data is analyzed by software service 
  3005. personnel to determine the cause of a software problem. There are three types 
  3006. of dumps possible for OS/2 Warp Version 4. 
  3007.  
  3008.      FFST dump 
  3009.  
  3010.       The system generates a FFST dump when the FFSTProbe function requests 
  3011.       certain user and process data.  The dump collects the 
  3012.       application-oriented and program-specific information that you specify. 
  3013.       Guide to Instrumenting Your Code covers the FFSTProbe function, the FFST 
  3014.       dump function, and code instrumentation for this type of activity.  This 
  3015.       chapter contains information about formatting and displaying the contents 
  3016.       of the FFST dump. 
  3017.  
  3018.      Process dump 
  3019.  
  3020.       A process dump contains limited information about a single process that 
  3021.       was running at the time of the failure.  The system dump contains greater 
  3022.       detail about all processes that were running when the failure occurred. 
  3023.       The process dump can be formatted using the PM Dump Facility dump 
  3024.       formatter described in this chapter. 
  3025.  
  3026.      System dump 
  3027.  
  3028.       A system dump covers system-wide activities.  When a system dump occurs, 
  3029.       the system automatically stops and stores the contents of main memory. 
  3030.       After the data is stored, the system automatically reboots and any 
  3031.       operating data that is not in main memory is lost.  In other words, when 
  3032.       the operating system software encounters a serious problem, the system 
  3033.       triggers a system dump.  The dump contains the important failure-related 
  3034.       information held in the system main memory.  The system records this 
  3035.       information in a system dump file.  You use the information to debug and 
  3036.       solve system problems.  This chapter discusses the system dump file 
  3037.       later. 
  3038.  
  3039.  
  3040. ΓòÉΓòÉΓòÉ 7.2. Where Are Dumps Stored? ΓòÉΓòÉΓòÉ
  3041.  
  3042. FFST dumps are stored stored in the directory specified in the FFST setup.  If 
  3043. you do not specify where to store FFST dumps, the system will store the FFST 
  3044. dump file in the default directory of <boot-drive>\OS2\SYSTEM\RAS. The FFST 
  3045. dump file will have the extention of DMP. 
  3046.  
  3047. Process dumps can be stored only in the root directory of the drive specified 
  3048. in the DUMPPROCESS statement in the CONFIG.SYS file (see Setting Up for a 
  3049. Process Dump). The file name will be PDUMP.nnn where nnn is a number that is 
  3050. incremented each time a process dump is generated. 
  3051.  
  3052. System dumps are stored either in a dedicated FAT hard disk partition on your 
  3053. system or on a diskette.  For details on setting up the dump partition refer to 
  3054. Setting Up for a System Dump for more information. 
  3055.  
  3056. System dumps taken to a hard disk partition may be used directly by the PM Dump 
  3057. Facility dump formatter. 
  3058.  
  3059. Any system dump stored on diskettes is compressed and needs to be decompressed 
  3060. to produce a single dump file. This may be done directly from PMDF by selecting 
  3061. the Decompress Dump option of the File pull-down.  PMDF offers the additional 
  3062. facility of decompressing diskette dumps directly from diskette images (see PM 
  3063. Dump Facility Dump Formatter File Option). 
  3064.  
  3065.  
  3066. ΓòÉΓòÉΓòÉ 7.3. System Dump ΓòÉΓòÉΓòÉ
  3067.  
  3068. A System dump requires that the following steps are performed in order: 
  3069.  
  3070.    1. You set up for a system dump by adding statements to the CONFIG.SYS file 
  3071.       and adding instrumentation to your code 
  3072.    2. The system performs the dump 
  3073.    3. You use the PM Dump Facility dump formatter to format and display dump 
  3074.       information in a way that you can analyze it. 
  3075.  
  3076.  
  3077. ΓòÉΓòÉΓòÉ 7.3.1. Setting Up for a System Dump ΓòÉΓòÉΓòÉ
  3078.  
  3079. You must prepare your system to store system dumps before the dump occurs.  You 
  3080. add the TRAPDUMP statement described below to the CONFIG.SYS file on your 
  3081. system.  The TRAPDUMP statement enables your system to store dump data. 
  3082.  
  3083. The TRAPDUMP statement controls the system dump facility of OS/2.  It will 
  3084. enable initiation of a system dump the instant a trap (error) occurs.  The 
  3085. TRAPDUMP statement tells the system where to store the dump information: either 
  3086. on formatted diskettes or on your system's disk storage.  Dumping to diskette 
  3087. is the default. A dump is stored on disk storage if the second parameter is 
  3088. used shown as X: in the TRAPDUMP statement example below. 
  3089.  
  3090. The disk storage device on your system must have a file allocation table (FAT) 
  3091. partition with the volume label of SADUMP.  TRAPDUMP accesses this partition 
  3092. when the dump information is stored.  You specify the partition with second 
  3093. parameter in the TRAPDUMP statement. 
  3094.  
  3095. Note:  Do not specify a partition that contains vital data.  When a dump is 
  3096. written to the partition, it overwrites any data that is in the partition. 
  3097.  
  3098. To enable system dumps to be performed you need to add the following statement 
  3099. to the CONFIG.SYS file on your system: 
  3100.  
  3101.  TRAPDUMP= ╨¥ OFF | ON | R0 Γöÿ ╨¥ , Γöÿ X: 
  3102.  
  3103.  OFF 
  3104.            Specifies that the stand-alone dump process will not initiate 
  3105.            automatically when an unrecoverable trap occurs.  This is the 
  3106.            default option. It does not prohibit the use of the 
  3107.            Ctrl-Alt-Numlock-Numlock key sequence, Ctrl-Alt-F10-F10 key 
  3108.            sequence, or the use of DosForceSystemDump in your code to force a 
  3109.            system dump to be performed. 
  3110.  
  3111.  ON 
  3112.            Specifies that the stand-alone dump process will be automatically 
  3113.            initiated whenever an unrecoverable trap occurs. 
  3114.  
  3115.  R0 
  3116.            Specifies that only ring zero traps will automatically initiate the 
  3117.            system dump process. 
  3118.  
  3119.  X: 
  3120.            specifies the hard-disk FAT partition to which OS2DUMP will write a 
  3121.            stand-alone dump.  The partition letter must have the colon suffix. 
  3122.  
  3123.            Note: 
  3124.  
  3125.              1. The partition may be specified with either ON or OFF. When 
  3126.                 specified with OFF it will allow a stand-alone dump initiated 
  3127.                 by Ctrl-Alt-Numlock-Numlock or Ctrl-Alt-F10-F10 to be written 
  3128.                 to the dump partition. 
  3129.  
  3130.              2. The only removable media you can use for dump storage is 
  3131.                 diskettes. 
  3132.  
  3133.              3. Only hard disk logical drives and primary partitions may be 
  3134.                 specified. 
  3135.  
  3136.              4. The system will erase all data on the dump media (disk 
  3137.                 partition or diskettes) before writing the dump.  Do not 
  3138.                 specify a disk partition or use diskettes that contain vital 
  3139.                 data. 
  3140.  
  3141.              5. When dumping to disk storage, the system is automatically 
  3142.                 re-booted on completion of the dump if there is a REIPL=ON 
  3143.                 statement in the CONFIG.SYS file.  If the dump was stored on 
  3144.                 diskettes, the system will not be re-booted automatically. 
  3145.  
  3146.  You can add the REIPL statement to CONFIG.SYS to allow the system to re-boot 
  3147.  (re-IPL) following an error. 
  3148.  
  3149.  The syntax of the statement is as follows: 
  3150.  
  3151.  REIPL=ON | OFF 
  3152.  
  3153.  The statement has the following parameters: 
  3154.  
  3155.  ON 
  3156.            This specifies the system it to be automatically re-booted following 
  3157.            an error. 
  3158.  
  3159.  OFF 
  3160.            This specifies that the system is not to be automatically re-booted 
  3161.            following an error.  The system will remain hung until manually 
  3162.            restarted. 
  3163.  
  3164.  
  3165. ΓòÉΓòÉΓòÉ 7.3.2. Starting a System Dump ΓòÉΓòÉΓòÉ
  3166.  
  3167. You start, or trigger, system dumps in several different ways: 
  3168.  
  3169.    1. Using the keyboard sequence (Ctrl-Alt-F10-F10 or 
  3170.       Ctrl-Alt-Numlock-Numlock) 
  3171.  
  3172.    2. Calling the DosForceSystemDump API 
  3173.  
  3174.    3. Selecting the Enable System Dump choice on the Probe Control Table and 
  3175.       allowing the FFSTProbe API to generate the dump 
  3176.  
  3177.  If TRAPDUMP=ON statement is in the CONFIG.SYS file and a trap occurs, a system 
  3178.  dump will automatically be generated. 
  3179.  
  3180.  
  3181. ΓòÉΓòÉΓòÉ 7.3.2.1. DosForceSystemDump Function ΓòÉΓòÉΓòÉ
  3182.  
  3183. For more information about the DosForceSystemDump function, refer to the OS/2 
  3184. Warp Version 4 CP Reference in the Toolkit. 
  3185.  
  3186.  
  3187. ΓòÉΓòÉΓòÉ 7.3.2.2. FFSTProbe Function ΓòÉΓòÉΓòÉ
  3188.  
  3189. The FFSTProbe method of triggering is done by selecting the Enable System Dump 
  3190. option on the FFST Probe Control Table Entry Summary - Add window shown on page 
  3191. Probe Control Table (PCT) Entry Add or Change Summary Window.  When your code 
  3192. calls FFSTProbe for a Probe ID that you specified on FFST Probe Control Table 
  3193. Entry Summary - Add window a system dump starts immediately.  The FFSTProbe 
  3194. function calls the DosForceSystemDump function to perform the dump. 
  3195.  
  3196.  
  3197. ΓòÉΓòÉΓòÉ 7.4. Process Dump ΓòÉΓòÉΓòÉ
  3198.  
  3199. A process dump file contains very basic unformatted system and user storage 
  3200. data related to the process that encountered the error and does not contain any 
  3201. data pertaining to main memory. 
  3202.  
  3203. A process dump requires that the following steps are performed in order: 
  3204.  
  3205.    1. You set up for a process dump by adding statements to the CONFIG.SYS file 
  3206.       and adding instrumentation to your code 
  3207.    2. The system performs the dump 
  3208.    3. You use the PM Dump Facility dump formatter to format and display dump 
  3209.       information in a way that you can analyze it. 
  3210.  
  3211.  
  3212. ΓòÉΓòÉΓòÉ 7.4.1. Setting Up for a Process Dump ΓòÉΓòÉΓòÉ
  3213.  
  3214. The DUMPPROCESS statement in the CONFIG.SYS file on your system allows you to 
  3215. activate the process dump facility. When a process dump file is created the 
  3216. file name takes the form of PDUMP.nnn where nnn is an index that is incremented 
  3217. each time a new process dump is created. 
  3218.  
  3219. The syntax of the DUMPPROCESS statement in the CONFIG.SYS file is defined 
  3220. below. 
  3221.  
  3222.  DUMPPROCESS=x 
  3223.  
  3224.  x 
  3225.            This parameter specifies the drive letter (excluding the colon) on 
  3226.            system where the process dump data file is stored.  The file takes 
  3227.            the name PDUMP.nnn and resides in the root directory of the drive 
  3228.            specified. 
  3229.  
  3230.  
  3231. ΓòÉΓòÉΓòÉ 7.4.2. Starting a Process Dump ΓòÉΓòÉΓòÉ
  3232.  
  3233. A process dump is generated and written to a dump file when one of the 
  3234. following conditions occur: 
  3235.  
  3236.      When your code calls the DosDumpProcess function 
  3237.      When the DUMPPROCESS=x statement is in CONFIG.SYS and a process 
  3238.       (application) encounters an error (trap) 
  3239.      When FFSTProbe is called with a request for a process dump to be 
  3240.       generated 
  3241.  
  3242.  
  3243. ΓòÉΓòÉΓòÉ 7.5. FFST Dump ΓòÉΓòÉΓòÉ
  3244.  
  3245. A FFST dump contains information about the processes that were running when the 
  3246. dump was generated along with any user information you requested to be 
  3247. collected. 
  3248.  
  3249.  
  3250. ΓòÉΓòÉΓòÉ 7.5.1. Setting Up for a FFST Dump ΓòÉΓòÉΓòÉ
  3251.  
  3252. The setup for FFST dumps is done by using the dumpUserData and probe_flags 
  3253. parameters of the FFSTProbe function. 
  3254.  
  3255. Refer to Problem Determination APIs for information on using the parameters. 
  3256.  
  3257.  
  3258. ΓòÉΓòÉΓòÉ 7.5.2. Starting a FFST Dump ΓòÉΓòÉΓòÉ
  3259.  
  3260. When the FFSTProbe function is called and the dumpUserData and probe_flags 
  3261. parameters have been specified, a FFST dump is generated and stored. 
  3262.  
  3263. Refer to Problem Determination APIs for information on using the parameters. 
  3264.  
  3265.  
  3266. ΓòÉΓòÉΓòÉ 7.6. Using the PM Dump Facility Dump Formatter ΓòÉΓòÉΓòÉ
  3267.  
  3268. You use the PM Dump Facility dump formatter to display system dump, process 
  3269. dump, or FFST dump information.  The system dump contains data about all system 
  3270. activities.  The process dump contains data about a single process.  The FFST 
  3271. dump contains the captured information your code requested in the call to 
  3272. FFSTProbe. 
  3273.  
  3274.  
  3275. ΓòÉΓòÉΓòÉ 7.6.1. Starting the PM Dump Facility Dump Formatter ΓòÉΓòÉΓòÉ
  3276.  
  3277. The PM Dump Facility dump formatter can be accessed by using one of the 
  3278. following: 
  3279.  
  3280.      By clicking on the PM Dump Facility in the Problem Determination Tools 
  3281.       folder.  You then click on the File action-bar item, select the Open menu 
  3282.       choice, and select the dump file you want to format. 
  3283.  
  3284.      From the SYSLOG Details window by selecting the Tools menu-bar option 
  3285.       (see Displaying Error Log Entry Data). 
  3286.  
  3287.      By dragging a dump file and dropping it onto the PM Dump Facility icon. 
  3288.  
  3289.       When you drop multiple copies of the dump files to the PM Dump Facility 
  3290.       icon, the dump formatter opens one window for each copy of the dump. 
  3291.  
  3292.      By selecting Dumps from the Actions menu-bar option on the FFST setup 
  3293.       window. 
  3294.  
  3295.  When you start the PM Dump Facility dump formatter without an initial dump 
  3296.  file, a window appears with four action-bar choices:  File, Edit, Options, and 
  3297.  Help..  Use the File option to select the dump file you want to view.  When 
  3298.  you open the file, the Analyze option appears. 
  3299.  
  3300.  
  3301. ΓòÉΓòÉΓòÉ 7.6.2. Selecting a Dump to Analyze ΓòÉΓòÉΓòÉ
  3302.  
  3303. You use the File option to open a system dump file. 
  3304.  
  3305.  
  3306. File Menu-Bar Choices on PM Dump Facility Dump Formatter Window
  3307.  
  3308.  
  3309. ΓòÉΓòÉΓòÉ 7.6.2.1. PM Dump Facility Dump Formatter File Option ΓòÉΓòÉΓòÉ
  3310.  
  3311. The File pull-down menu offers the following options: 
  3312.  
  3313.  Open Dump File 
  3314.                           This option prompts you for the dump file name to be 
  3315.                           analyzed. You can also open a dump file by dragging 
  3316.                           it and dropping it onto the client window of the PM 
  3317.                           Dump Facility dump formatter.  When you drop multiple 
  3318.                           copies of a dump onto the client window, the system 
  3319.                           opens only the first copy. 
  3320.  
  3321.                           When you analyze a system dump or process dump, a 
  3322.                           command line will be shown at the bottom of the PM 
  3323.                           Dump Facility dump formatter display.  You can use 
  3324.                           the formatter commands as a fast way to find specific 
  3325.                           data. Refer to the PMDF document in the 
  3326.                           Troubleshooting folder for a list of system dump and 
  3327.                           process dump commands. 
  3328.  
  3329.                           When the dump file is first opened, only limited data 
  3330.                           will appear.  Use the Analyze option to access the 
  3331.                           remaining dump data. 
  3332.  
  3333.  Log Output 
  3334.                           This option prompts you to start or stop logging 
  3335.                           output to a file.  Log data may be appended to an 
  3336.                           existing log file. 
  3337.  
  3338.  Save Output 
  3339.                           This option allows you to save all output displayed 
  3340.                           in the PMDF scrollable window. 
  3341.  
  3342.  Decompress Dump File 
  3343.                           Select this option to decompress a new dump. 
  3344.  
  3345.                           Note:  For diskette dumps the DUMPDATA.nnn files may 
  3346.                           be copied for a directory on the hard drive and 
  3347.                           decompressed from there. 
  3348.  
  3349.                           PMDF has the ability to decompress diskette images 
  3350.                           created by OS2IMAGE without re-creating the original 
  3351.                           diskettes. To use this facility each of the image 
  3352.                           file must be named image.nnn where nnn is a numeric 
  3353.                           sequence number that corresponds to the disk number. 
  3354.  
  3355.  Connect 
  3356.                           Connect allows PMDF to be used as a terminal emulator 
  3357.                           to drive a Kernel Debugger session. 
  3358.  
  3359.  Disconnect 
  3360.                           Disconnect terminated the communications session with 
  3361.                           the Kernel Debugger. 
  3362.  
  3363.  The Log Output... option displays a window that allows the logging of 
  3364.  formatted dump data to a file.  When you turn on logging, the system records 
  3365.  all dump information formatted during this session in the log file you 
  3366.  specified.  The system also displays the formatted dump information at the 
  3367.  same time.  The system stores the data from the time that you started logging 
  3368.  until you close the PM Dump Facility dump formatter.  You also stop logging by 
  3369.  using the Log Output...  Stop push-button.  If you open another dump file, 
  3370.  logging continues. 
  3371.  
  3372.  When you select the Save Output... option, the system displays a standard OS/2 
  3373.  Save As... window.  Specify the file name for the saved data.  The system will 
  3374.  save all formatted dump output that was generated since the file was opened or 
  3375.  since the last clear screen was done.  The system saves this "snap-shot" of 
  3376.  dump data only when requested using this option.  The system does not save the 
  3377.  data simultaneously like it does with the Log Output... option. 
  3378.  
  3379.  
  3380. ΓòÉΓòÉΓòÉ 7.6.2.2. PM Dump Facility Dump Formatter Edit Option ΓòÉΓòÉΓòÉ
  3381.  
  3382.  The Edit pull-down menu offers the following options: 
  3383.  
  3384.  Search String 
  3385.                           Locates text within the scrollable window. 
  3386.  
  3387.  Undo 
  3388.                           Reverse the previous Edit Cut action. 
  3389.  
  3390.  Copy 
  3391.                           Copy marked text to the clip board. 
  3392.  
  3393.  Cut 
  3394.                           Move marked text to the clip board. 
  3395.  
  3396.  Clear Screen 
  3397.                           Clears the scrollable window of all text. 
  3398.  
  3399.  
  3400. ΓòÉΓòÉΓòÉ 7.6.2.3. PM Dump Facility Dump Formatter Options Option ΓòÉΓòÉΓòÉ
  3401.  
  3402. The Options pull-down menu offers the following options: 
  3403.  
  3404.  Font Settings 
  3405.                           This allows font selection for displayed output. 
  3406.  
  3407.  Function Keys 
  3408.                           This provides a menu to predefine function keys as 
  3409.                           strings of dump formatter command strings.  Commands 
  3410.                           may be separated by a semi-colon. 
  3411.  
  3412.  Terminal Settings 
  3413.                           Allows the communications parameters to be specified 
  3414.                           for when the Connect option of the File pull-down is 
  3415.                           selected. 
  3416.  
  3417.  Save Settings 
  3418.                           This will save the current options in the PMDF.INI 
  3419.                           file for use next time PMDF is started. 
  3420.  
  3421.  
  3422. ΓòÉΓòÉΓòÉ 7.6.2.4. PM Dump Facility Dump Formatter Analyze Option ΓòÉΓòÉΓòÉ
  3423.  
  3424. The Analyze pull-down menu options are different for each type of dump.  These 
  3425. options change when you select a different type of dump to format. 
  3426.  
  3427. The system dump options are: 
  3428.  
  3429.      System 
  3430.      Process 
  3431.      Threads 
  3432.      Synopses 
  3433.  
  3434.  The process dump options are: 
  3435.  
  3436.      Registers 
  3437.      Task Control Blocks 
  3438.      Local Descriptors 
  3439.      Virtual Machine Control Blocks 
  3440.      Memory Objects 
  3441.      Module Table 
  3442.      Process Synopsis 
  3443.  
  3444.  The FFST dump options are: 
  3445.  
  3446.      Process Environment Data 
  3447.      Process Status Data 
  3448.      Format Trace Buffer 
  3449.      Format Process Dump 
  3450.      User Data 
  3451.      Error Log Data 
  3452.  
  3453.  If the dump you selected does not contain data for a particular option, you 
  3454.  will not be able to select the option. 
  3455.  
  3456.  
  3457. ΓòÉΓòÉΓòÉ 7.6.3. Analyzing a System Dump ΓòÉΓòÉΓòÉ
  3458.  
  3459. After you select a system dump for formatting, the Analyze pull-down menu for 
  3460. system dumps offers four selections. Each selection displays its own menu 
  3461. selection. The menu selections are: System, Process, Threads, and Synopsis.. 
  3462. Note that this option is shown only after you open a system dump file. 
  3463.  
  3464. It is important to note that the output from the Analyze option needs to 
  3465. interpreted with care.  Some options are precise since they follow control 
  3466. block chains.  The Physical Device Driver Chain and Kernel Heap are examples of 
  3467. control block chains.  Other options depend on correct symbols being loaded. 
  3468. Options that display stacks are more speculative in what they display. 
  3469.  
  3470. The following System Dump Analyze selections are available: 
  3471.  
  3472.  System    The System menu display the following options: 
  3473.                Physical Device Driver 
  3474.                Virtual Device Driver 
  3475.                Interrupt Stack 
  3476.                Program List 
  3477.                Window Info 
  3478.                Open files 
  3479.                Heap Info 
  3480.                Memory 
  3481.                Trace 
  3482.  Process   The Process menu display the following options: 
  3483.                Process Info 
  3484.                Thread Chain 
  3485.                Module Table 
  3486.                Local Descriptors 
  3487.                Memory Objects 
  3488.  Threads   The Threads menus dumps stacks related to a given thread. The 
  3489.            following menu is displayed: 
  3490.                Ring 3 / Stack Trace 
  3491.                Ring 2 / Stack Trace 
  3492.                Ring 0 / Stack Trace 
  3493.                Call Gate 
  3494.  Synopsis  This offers a miscellaneous collection of options, the most 
  3495.            important of which is the Trap Screen display. The following menu is 
  3496.            displayed: 
  3497.                System Synopsis 
  3498.                Process Synopsis 
  3499.                Trap Screen Info 
  3500.                Semaphore Analysis 
  3501.                Desktop State 
  3502.  
  3503.  When you analyze a system dump, a command line will be shown at the bottom of 
  3504.  the PM Dump Facility dump formatter display.  You can use the formatter 
  3505.  commands as a fast way to find specific data. Refer to the PMDF document in 
  3506.  the Troubleshooting folder for a list of system dump commands. 
  3507.  
  3508.  
  3509. ΓòÉΓòÉΓòÉ 7.6.4. Analyzing a Process Dump ΓòÉΓòÉΓòÉ
  3510.  
  3511. The PM Dump Facility dump formatter is started when a process dump file is 
  3512. opened by using the Open option of the File pull-down menu.  The date and time 
  3513. of the dump are displayed.  If the dump was created because of a trap then the 
  3514. trap number is displayed otherwise the trap number is shown as ffffffff.  The 
  3515. current thread slot and register are shown last. 
  3516.  
  3517.  
  3518. ΓòÉΓòÉΓòÉ 7.6.4.1. Process Dump Analyze Option ΓòÉΓòÉΓòÉ
  3519.  
  3520. The Analyze pull-down menu for a process dump differs from the standard PMDF 
  3521. Analyze facility. The following choices are provided: 
  3522.  
  3523.      Registers 
  3524.      Task Control Blocks 
  3525.      Local Descriptors 
  3526.      Virtual Machine Control Blocks 
  3527.      Memory Objects 
  3528.      Module Table 
  3529.      Process Synopsis 
  3530.  
  3531.  When you analyze a process dump, a command line will be shown at the bottom of 
  3532.  the PM Dump Facility dump formatter display.  You can use the formatter 
  3533.  commands as a fast way to find specific data.  Refer to the PMDF document in 
  3534.  the Troubleshooting folder for a list of process dump commands. 
  3535.  
  3536.  For information on taking and controlling process dumps, refer to the 
  3537.  DUMPPROCESS command in the Command Reference and the the DosDumpProcess 
  3538.  function in the OS/2 Warp Version 4 CP Reference.  Both references can be 
  3539.  found in the Toolkit. 
  3540.  
  3541.  
  3542. ΓòÉΓòÉΓòÉ 7.6.5. Analyzing a FFST Dump ΓòÉΓòÉΓòÉ
  3543.  
  3544. FFST dumps contain information about the processes that were running when the 
  3545. dump was generated along with any user information you requested to be 
  3546. collected. 
  3547.  
  3548.  
  3549. ΓòÉΓòÉΓòÉ 7.6.5.1. FFST Dump Analyze Option ΓòÉΓòÉΓòÉ
  3550.  
  3551. The Analyze options for formatting FFST dumps are: 
  3552.  
  3553.      Process environment data 
  3554.      Process status data 
  3555.      Format trace buffer 
  3556.      Format process dump 
  3557.      User data 
  3558.      Error log data 
  3559.  
  3560.  
  3561.   Analyze Menu-Bar Choices for a FFST Dump
  3562.  
  3563.  
  3564. ΓòÉΓòÉΓòÉ 7.6.5.2. Process Environment Data ΓòÉΓòÉΓòÉ
  3565.  
  3566. When you select the Process Environment Data choice, the PM Dump Facility dump 
  3567. formatter retrieves and displays the environment variables.  The system 
  3568. displays the variables that were set at the time the system stored FFST dump. 
  3569. You will not be able to select this option if there is no process environment 
  3570. data in the dump file. 
  3571.  
  3572.  
  3573. ΓòÉΓòÉΓòÉ 7.6.5.3. Process Status Data ΓòÉΓòÉΓòÉ
  3574.  
  3575. Select the Process Status Data choice to have the PM Dump Facility dump 
  3576. formatter retrieve and display the system process information.  The system 
  3577. records all processes that were running on the system when storing the dump. 
  3578. You will not be able to select this option if there is no process status data 
  3579. in the dump file. 
  3580.  
  3581.  
  3582. ΓòÉΓòÉΓòÉ 7.6.5.4. Format Trace Buffer ΓòÉΓòÉΓòÉ
  3583.  
  3584. Selecting this option causes the PM Dump Facility dump formatter to start the 
  3585. trace formatter with the full path and name of the trace data file.  The PM 
  3586. Dump Facility dump formatter then writes the following message in the window: 
  3587.  
  3588. Format trace buffer in x:\xxxxxxxx.xxx
  3589.  
  3590. The x:\xxxxxxxx.xxx indicates the path name of the trace file.  Then the PM 
  3591. Dump Facility dump formatter starts the trace formatter to format the trace 
  3592. data.  The trace data file is a separate file and is not part of the FFST dump 
  3593. file.  You will not be able to select this option if the system did not capture 
  3594. trace information when your code called FFSTProbe. 
  3595.  
  3596. If the system cannot find the path name of the trace data file, use the File 
  3597. menu-bar choice of the trace formatter to specify the file name and path name 
  3598. of the trace data file to format. 
  3599.  
  3600. You can use the PM Dump Facility dump formatter to access the trace formatter. 
  3601. If you close the dump formatter window while the trace formatter window is 
  3602. open, the trace formatter window also closes. 
  3603.  
  3604. You can find more information on trace and the trace formatter in Analyzing 
  3605. Performance and Debugging Problems Using Trace. 
  3606.  
  3607.  
  3608. ΓòÉΓòÉΓòÉ 7.6.5.5. Format Process Dump ΓòÉΓòÉΓòÉ
  3609.  
  3610. Selecting this option causes the PM Dump Facility dump formatter to start 
  3611. another formatter session with the full path and name of the process dump file. 
  3612. This is similar to the way that the trace formatter is accessed. 
  3613.  
  3614. The PM Dump Facility dump formatter then writes the following message in the 
  3615. window: 
  3616.  
  3617. Formatting process dump file x:\xxxxxxxx.xxx
  3618.  
  3619. The x:\xxxxxxxx.xxx indicates the path name of the dump file. 
  3620.  
  3621. If the system cannot find the process dump data file, a File not found error 
  3622. message will be displayed.  Use Open option of the File pull-down menu to 
  3623. specify the file name and path name of the dump file to format. 
  3624.  
  3625. If you close the PM Dump Facility FFST dump formatting window while the process 
  3626. dump window is open, the process dump window also closes. 
  3627.  
  3628.  
  3629. ΓòÉΓòÉΓòÉ 7.6.5.6. User Data ΓòÉΓòÉΓòÉ
  3630.  
  3631. When you open the dump and there is at least one area of user data in the dump, 
  3632. the User Data option is available from the Analyze pull-down menu.  You will 
  3633. not be able to select this option if the FFST dump contains no user data. 
  3634.  
  3635. When you select this option, the PM Dump Facility dump formatter reads the data 
  3636. and displays the data areas one by one.  The system displays the data with a 
  3637. label for each data area; for example, Data Area xxx (xxx is from 1 to 30). 
  3638.  
  3639.  
  3640. User Data in PM Dump Facility Dump Formatter Window
  3641.  
  3642.  
  3643. ΓòÉΓòÉΓòÉ 7.6.5.7. Error Log Data ΓòÉΓòÉΓòÉ
  3644.  
  3645. When you select the Error Log Data choice, the PM Dump Facility dump formatter 
  3646. reads the error data from the  dump file.  The dump formatter then displays the 
  3647. error log entry in the same format as the SYSLOG Details record.  There is 
  3648. always Error Log data in an FFST dump.  The system always allows you to select 
  3649. this option. 
  3650.  
  3651. You can find more information on error logs in Viewing and Analyzing Error Log 
  3652. Entries. 
  3653.  
  3654.  
  3655. Error Log Data in PM Dump Facility Dump Formatter Window
  3656.  
  3657.  
  3658. ΓòÉΓòÉΓòÉ 7.7. Other PM Dump Facility Dump Formatter Features ΓòÉΓòÉΓòÉ
  3659.  
  3660. The PM Dump Facility dump formatter has a command interface where you can use 
  3661. your own REXX programs to assist in formatting the dump data. 
  3662.  
  3663. The PM Dump Facility dump formatter also allows you to to use the standard CUA 
  3664. mouse selection and highlighting to select items from the formatted dump. 
  3665.  
  3666.  
  3667. ΓòÉΓòÉΓòÉ 7.7.1. The PM Dump Facility Mouse Options ΓòÉΓòÉΓòÉ
  3668.  
  3669. Standard CUA mouse selection and highlighting are supported in the PM Dump 
  3670. Facility dump formatter.  Use the mouse options to drag and drop marked items 
  3671. onto the command line of the system dump or process dump window. 
  3672.  
  3673. A double-click with mouse button 1 will highlight a blank delimited string. 
  3674.  
  3675. A double-click with mouse button 2 will display a pop-up menu of items to use 
  3676. for processing highlighted dump data. 
  3677.  
  3678. These selections provide the same function as some of the dump formatter 
  3679. commands.  They are intended to provide a easy way to perform the same function 
  3680. as the command without having to enter the command on the command line. 
  3681.  
  3682. Note:  There is no validation done between the data that is highlighted and the 
  3683. menu option you select.  You must ensure that the correct data is highlighted 
  3684. for the menu option you select. 
  3685.  
  3686. Listed below are the mouse option selections available system and process 
  3687. dumps: 
  3688.  
  3689.      List Near 
  3690.      UnAssemble 
  3691.      Selector Info 
  3692.      Unwind Stack 
  3693.      Thunk Address 
  3694.      Display Memory 
  3695.         -  Bytes 
  3696.         -  Words 
  3697.         -  Dwords 
  3698.         -  ASCII 
  3699.      Structures 
  3700.         -  ExEntry_s 
  3701.         -  memstat_s 
  3702.         -  ptda_s 
  3703.         -  tcb_s 
  3704.         -  vmah_s 
  3705.         -  _WND 
  3706.         -  _MQ 
  3707.         -  KSEMSHR 
  3708.         -  KSEMMTX 
  3709.         -  KSEMEVT 
  3710.         -  RamSemStruc 
  3711.         -  SysSemTblStruc 
  3712.         -  Unlisted 
  3713.      Chains 
  3714.         -  ExEntry_s 
  3715.         -  ~ptda_s 
  3716.         -  ~tcb_s 
  3717.         -  ~vmah_s 
  3718.         -  _~MQ 
  3719.         -  _~WND 
  3720.         -  ~Unlisted 
  3721.  
  3722.  
  3723. ΓòÉΓòÉΓòÉ 7.8. Summary ΓòÉΓòÉΓòÉ
  3724.  
  3725. Set up and triggering for FFST dumps are different than set up and triggering 
  3726. for system dumps. 
  3727.  
  3728. The system creates FFST dumps when the FFSTProbe function requests user data, 
  3729. process environment data, or process status data.  Running a FFSTProbe always 
  3730. causes an entry to be made in the system-error log.  A FFST dump does not shut 
  3731. the system down. 
  3732.  
  3733. A process dump contains limited information about a single process that was 
  3734. running at the time of the failure. 
  3735.  
  3736. The system creates system dumps when encountering a serious problem or error. 
  3737. When the system creates a system dump, the contents of main memory is stored in 
  3738. the system dump file and the system shuts down. 
  3739.  
  3740. Use the PM Dump Facility dump formatter to format, display, and analyze FFST 
  3741. dumps, process dumps, and system dumps. 
  3742.  
  3743.  
  3744. ΓòÉΓòÉΓòÉ 8. The Desktop Management Interface (DMI) ΓòÉΓòÉΓòÉ
  3745.  
  3746. This chapter provides background about the DMI, information about the 
  3747. relationship between DMI and VPD (vital product data) and coding examples. 
  3748.  
  3749.  
  3750. ΓòÉΓòÉΓòÉ 8.1. DMI Overview ΓòÉΓòÉΓòÉ
  3751.  
  3752. The Desktop Management Interface (DMI) provides the means for software and 
  3753. hardware components to define VPD information. DMI also provides a standard 
  3754. function set that management applications can use to access that information. 
  3755.  
  3756. The DMI consists of four elements: 
  3757.  
  3758.      Format for describing information 
  3759.      Format for data transfer 
  3760.      Mechanism for data transfer 
  3761.      Set of services for facilitating communication 
  3762.  
  3763.  You define component descriptions in a language that is called the Management 
  3764.  Information Format (MIF).  Each component has a MIF file that describes the 
  3765.  manageable characteristics of the component. 
  3766.  
  3767.  Component providers use the Component Interface (CI) to describe how to access 
  3768.  management information and enable a component to be managed. 
  3769.  
  3770.  Applications use the Management Interface (MI) to manage components. 
  3771.  
  3772.  The CI and MI are data interfaces, as opposed to procedural interfaces. 
  3773.  
  3774.  The Service Layer (SL) is an active, resident code that runs on the system. 
  3775.  The SL mediates between the MI and the CI and performs services on behalf of 
  3776.  each. 
  3777.  
  3778.  The DMI is a local interface that is used within a single system.  DMI does 
  3779.  not replace existing network management protocols.  DMI provides a consistent 
  3780.  method for providing instrumentation to those protocols.  The Service Layer is 
  3781.  the broker of local instrumentation. 
  3782.  
  3783.  DMI provides the following: 
  3784.  
  3785.      Independence of a specific computer, operating system, or management 
  3786.       protocol 
  3787.      An easily adopted interface for application developers 
  3788.      Does not require a network 
  3789.      Mapping to existing management protocols. 
  3790.  
  3791.  The DMI does not address or specify a protocol for management over a network. 
  3792.  
  3793.  
  3794. ΓòÉΓòÉΓòÉ 8.2. DMI Structure ΓòÉΓòÉΓòÉ
  3795.  
  3796. The DMI is a local interface for single-system use, regardless of being a 
  3797. standalone desktop system or part of a network.  The interface consists of the 
  3798. following parts: 
  3799.  
  3800.      Service Layer (SL):  A local program that collects and manages product 
  3801.       information in the MIF database.  The Service Layer distributes requested 
  3802.       information to management applications through the Management Interface 
  3803.       (MI) and to manageable products through the Component Interface (CI). 
  3804.  
  3805.      MIF database:  The database containing the installed or attached 
  3806.       manageable product information.  MIF files contain the information, and 
  3807.       the Service Layer manages the information. 
  3808.  
  3809.      Management applications: Remote or local programs used to interrogate, 
  3810.       track, control, and list the elements of a desktop system. A management 
  3811.       application can be any of the following: 
  3812.  
  3813.         -  a graphical user interface program 
  3814.         -  a network management agent 
  3815.         -  an installer program 
  3816.         -  a diagnostics program 
  3817.         -  a remote procedure call. 
  3818.  
  3819.      Manageable products:  Components that are connected to or part of a 
  3820.       desktop computer system or network server.  Components can be part of the 
  3821.       system code, or you can add them later.  Each product has a MIF file in 
  3822.       the MIF database that contains pertinent product management information. 
  3823.  
  3824.  The following figure shows the DMI structure: 
  3825.  
  3826.  
  3827.   DMI Functional Diagram
  3828.  
  3829.  
  3830. ΓòÉΓòÉΓòÉ 8.3. Enabling Manageable Products for DMI ΓòÉΓòÉΓòÉ
  3831.  
  3832. The product manufacturer needs to decide which attributes of the product are 
  3833. manageable.  To enable a product for DMI you write a MIF file that contains 
  3834. descriptions of these manageable attributes.  Group the attributes logically so 
  3835. you can write instrumentation code to provide attribute data. 
  3836.  
  3837. Use the SystemView Agent Programmer's Guide in the Toolkit in the Problem 
  3838. Determination Tools folder as a reference for enabling products. This book 
  3839. defines requirements for products that communicate with the Service Layer.  To 
  3840. develop such a product: 
  3841.  
  3842.    1. Read the SystemView Agent Programmer's Guide to get an understanding of 
  3843.       how components interface with the Service Layer and the supported 
  3844.       commands. 
  3845.  
  3846.    2. Define manageable attributes and specific features of your product. Look 
  3847.       for existing MIF groups that may apply to your product. 
  3848.  
  3849.    3. Begin with the ComponentID group and define MIF groups that are based on 
  3850.       the features of your product.  Use as many of the existing standard 
  3851.       groups that apply to your product as is possible.  Standard groups are 
  3852.       available from the Desktop Management Task Force (DMTF).  If needed, add 
  3853.       proprietary groups for unique features of the product. 
  3854.  
  3855.    4. Decide if the attributes are read-only, read-write, or write-only, and 
  3856.       define MIF attributes for each group. 
  3857.  
  3858.    5. Use the syntax that is defined in the SystemView Agent Programmer's Guide 
  3859.       to create your MIF file. 
  3860.  
  3861.    6. Determine whether to use run-time programs or the direct interface to 
  3862.       provide component information to the Service Layer. Write your 
  3863.       instrumentation code accordingly. 
  3864.  
  3865.    7. Change the programs that install or delete MIF database file for your 
  3866.       component. 
  3867.  
  3868.    8. Decide which errors, exceptions, or problems are to be sent to the 
  3869.       Service Layer as indications and the attribute information to include. 
  3870.       Real-time, intelligent product management is made possible by using 
  3871.       indications because the system immediately notifies management 
  3872.       applications when a problem occurs.  Add code to your product to send 
  3873.       these indications to the Service Layer.  The system uses the DmiIndicate 
  3874.       command block to pass events to the Service Layer.  See the SystemView 
  3875.       Agent Programmer's Guide in the Problem Determination Tools folder on the 
  3876.       system for information about the DmiIndicate command block. 
  3877.  
  3878.  
  3879. ΓòÉΓòÉΓòÉ 8.3.1. Designing MIF Files ΓòÉΓòÉΓòÉ
  3880.  
  3881. MIF files are the key to enabling your product to be managed by the desktop 
  3882. system.  A well designed MIF file is important. 
  3883.  
  3884. The DMI requires that the MIF file be an ASCII text file that contains the 
  3885. groups and attributes that you defined for your product.  You must provide all 
  3886. meaningful information by using the MIF file.  The text in the file must follow 
  3887. the defined syntax and grammar. 
  3888.  
  3889. After you decide which product attributes are manageable, define the attributes 
  3890. into standard groups as much as possible in the MIF file. 
  3891.  
  3892. The DMI Specification describes attribute characteristics and options. All 
  3893. attributes must have these four items defined: 
  3894.  
  3895.  Name    The name of the attribute 
  3896.  
  3897.  ID      The unique, sequential attribute ID within the group containing the 
  3898.          attribute 
  3899.  
  3900.  Type    The attribute's data type.  The type is either a specific data type 
  3901.          that DMI supports or an enumerated list that provides flexibility in 
  3902.          the attribute definitions 
  3903.  
  3904.  Value   The actual value (to be put into the database) or a pointer to the 
  3905.          instrumentation that gets the value 
  3906.  
  3907.  In addition, you can optionally define description, access, and storage 
  3908.  attributes. 
  3909.  
  3910.  The description can be one or many lines.  The description text should be as 
  3911.  clear and informative as possible to provide management applications with 
  3912.  complete information about the attribute.  You need a good description at the 
  3913.  component level and group level. 
  3914.  
  3915.  The system uses an access statement to determine whether the attribute's value 
  3916.  is read-only, read-write, or write-only. 
  3917.  
  3918.  The storage statement provides a hint to management applications about whether 
  3919.  to assist in optimizing storage requirements.  Two options are available: 
  3920.  
  3921.      common - you use this option to signify that the attribute value is 
  3922.       typically limited to a small set of possibilities that you can be 
  3923.       optimize. 
  3924.      specific - you use this option to signify that the attribute value is not 
  3925.       a good candidate for optimization because of the possibility of a large 
  3926.       number of different values. 
  3927.  
  3928.  You can find the MIF file requirements in the SystemView Agent Programmer's 
  3929.  Guide in the Toolkit in the Problem Determination Tools folder. 
  3930.  
  3931.  
  3932. ΓòÉΓòÉΓòÉ 8.3.2. MIF Attribute Storage ΓòÉΓòÉΓòÉ
  3933.  
  3934. The system stores product attribute information in a MIF file.  The two ways to 
  3935. store this information are as follows: 
  3936.  
  3937.      Hard coding the information in the MIF database. 
  3938.  
  3939.      Keeping the information in your own storage location (for example, a 
  3940.       database or in read-only memory (ROM)). 
  3941.  
  3942.  
  3943. ΓòÉΓòÉΓòÉ 8.3.2.1. Hard Coding Information into a MIF Database ΓòÉΓòÉΓòÉ
  3944.  
  3945. The simplest way to make product information known through DMI is by hard 
  3946. coding the information into the MIF database.  Using this method requires no 
  3947. access code to be written, and DMI retrieves the product information from the 
  3948. DMI database. 
  3949.  
  3950. Hard-coded information has a major limitation: the system cannot dynamically 
  3951. update the information yet maintain data integrity.  If you set an attribute to 
  3952. read/write, anyone can update that value.  Another restriction of hard-coded 
  3953. information is that you cannot add or delete rows in tables.  The only way to 
  3954. update a read-only attribute is by deleting the old MIF file and installing a 
  3955. new MIF file with the updated values. 
  3956.  
  3957.  
  3958. ΓòÉΓòÉΓòÉ 8.3.2.2. Storing Information in Your Own Storage Location ΓòÉΓòÉΓòÉ
  3959.  
  3960. Instrumentation is program code that the Service Layer starts.  The code can be 
  3961. a run-time program that requests attribute values.  The code could also be a 
  3962. direct interface program.  The direct interface program runs on the system and 
  3963. is connected to the Service Layer. 
  3964.  
  3965. Use run-time programs for products that provide transitory data or that are not 
  3966. associated with a device driver that is loaded in RAM.  Use run-time programs 
  3967. for background tasks such as the system BIOS. 
  3968.  
  3969. Use direct interface programs when the system requires persistent data for 
  3970. products that use device drivers or background programs. 
  3971.  
  3972. All instrumentation code should include the header file DMIAPI.H. 
  3973.  
  3974. Instrumentation code that the Service Layer starts must provide one value at a 
  3975. time.  The code must be able to handle the following DMI commands that are 
  3976. accessed through the DmiCiInvoke call from the Service Layer: 
  3977.  
  3978.      DmiGetAttributeCmd 
  3979.      DmiSetAttributeCmd 
  3980.      DmiGetRowCmd 
  3981.      DmiGetFirstRowCmd 
  3982.      DmiGetNextRowCmd 
  3983.  
  3984.  Every command must call the pConfirmFunc function, including the set commands 
  3985.  and the commands that generate errors.  When you use the DmiGetRowCmd command, 
  3986.  the Service Layer builds the DmiGetRowCnf structure prior to calling 
  3987.  DmiCiInvoke.  In addition, the GroupKeyData structures are allocated and the 
  3988.  oGroupKeyList slot in the DmiGetRowCnf structure is filled in.  Any 
  3989.  instrumentation code you provide must change only the confirm buffer, not the 
  3990.  DmiInvoke command buffer. 
  3991.  
  3992.  The DMI procedure library (DMIAPI) is part of the Toolkit and provides a 
  3993.  simple method of handling these constraints.  The Component Interface outline 
  3994.  makes use of DMIAPI.  If you use the outline program as the basis for your 
  3995.  instrumentation program, you need only write the five outlined procedures. 
  3996.  When you use the outline program, you do not need to consider any of the 
  3997.  issues above. 
  3998.  
  3999.  
  4000. ΓòÉΓòÉΓòÉ 8.3.2.2.1. Dynamic Link Libraries (DLL) ΓòÉΓòÉΓòÉ
  4001.  
  4002. The Component Interface outline lists five procedures that define the simplest 
  4003. method for you to write run-time instrumentation.  When you complete the 
  4004. outline files, include them in the library and in your program. 
  4005.  
  4006. To use run-time programs, use an instrument to specify the attribute value of 
  4007. the MIF Path block name.  The block name should contain the run-time program 
  4008. file name or path name.  (See the SystemView Agent Programmer's Guide on the 
  4009. system for details about using the Path block in the MIF file.) This program 
  4010. runs when the Service Layer needs to access the attribute values. 
  4011.  
  4012. If the file name in the path block does not have a complete path, the Service 
  4013. Layer uses the library path to find the DLL. 
  4014.  
  4015.  
  4016. ΓòÉΓòÉΓòÉ 8.3.2.2.2. Direct Interface (DI) Programs ΓòÉΓòÉΓòÉ
  4017.  
  4018. Your component must register with the Service Layer before it can use the 
  4019. direct interface.  You specify the keyword DIRECT-INTERFACE in the Path block 
  4020. of the MIF file.  If the direct interface program is not running, the system 
  4021. returns an error when the Service Layer attempts to access attributes. 
  4022.  
  4023. Direct interface components register with the Service Layer using the 
  4024. DmiRegisterCiCmd command.  When an attribute value needs to be accessed, the 
  4025. Service Layer passes control to the direct interface program. A direct 
  4026. interface program must use the DmiUnregisterCiCmd to unregister with the 
  4027. Service Layer before the system unloads the program. 
  4028.  
  4029.  
  4030. ΓòÉΓòÉΓòÉ 8.3.3. Indications ΓòÉΓòÉΓòÉ
  4031.  
  4032. Component instrumentation sends unsolicited messages, to the Service Layer to 
  4033. signal some particular situation.  The messages are known as events. When the 
  4034. messages reach a management application, they are known as indications. The 
  4035. indication ID identifies indications.  The IDs start at the number 1.  Events 
  4036. are often a sign of a catastrophic occurrence or other activity that the system 
  4037. should know about immediately.  The event identification is specific to a given 
  4038. component and appears as an unsolicited "get."  You specify event structures as 
  4039. groups in the component's MIF file. 
  4040.  
  4041. In DMI, all commands are specified by using data blocks.  Component 
  4042. instrumentation uses the function call DmiIndicate() to send the indication 
  4043. block and any following blocks to the Service Layer for processing.  The C 
  4044. language prototype call is as follows: 
  4045.  
  4046. unsigned long  DmiIndicate(PTR command)
  4047. where command is the complete command block.  The system returns a 32-bit 
  4048. status value to indicate success or failure. 
  4049.  
  4050. The Service Layer immediately returns control to the component instrumentation 
  4051. while it processes the indication.  The component instrumentation is free to 
  4052. issue additional indications, but it cannot reuse the original indication block 
  4053. buffer until the Service Layer processing is complete.  Simultaneous 
  4054. indications from a component instrumentation must use different indication 
  4055. blocks.  When the Service Layer has completed processing the indication, it 
  4056. calls the function pResponseFunc() identified in the original indication block. 
  4057. At that point, the component instrumentation can reuse the block. 
  4058.  
  4059.  
  4060. ΓòÉΓòÉΓòÉ 8.3.4. Installing MIF Files ΓòÉΓòÉΓòÉ
  4061.  
  4062. When you install your product on a system, the installation process is 
  4063. responsible for putting the component MIF file into the existing MIF database. 
  4064. If the Service Layer is not running, the system stores the component MIF file 
  4065. in the MIF subdirectory. 
  4066.  
  4067. Install programs use the DmiCiInstallCmd function to install the MIF file in 
  4068. the MIF database. 
  4069.  
  4070. To accommodate DMI, your installation process must provide an ASCII text MIF 
  4071. file.  When you create the MIF file, follow the format that is found in the 
  4072. SystemView Agent Programmer's Guide on the system. 
  4073.  
  4074. If the Service Layer is not running when you install the MIF, you can copy the 
  4075. MIF file to the <boot-drive>OS2\SYSTEM\RAS\MIFS directory.  The next time the 
  4076. system starts the DMI Service Layer, the system installs the MIF file in the 
  4077. MIF database.  Then system copies the file to the 
  4078. <boot-drive>OS2\SYSTEM\RAS\BACKUP directory, and deletes the file from the MIFS 
  4079. directory. 
  4080.  
  4081.  
  4082. ΓòÉΓòÉΓòÉ 8.3.5. Removing MIF Files ΓòÉΓòÉΓòÉ
  4083.  
  4084. To produce a complete DMI-enabled component, you include an uninstall program 
  4085. as well as an install program. 
  4086.  
  4087. Uninstall programs use the DmiCiUninstallCmd function to remove the MIF file 
  4088. from the MIF database. 
  4089.  
  4090.  
  4091. ΓòÉΓòÉΓòÉ 8.3.6. Accessing DMI Information ΓòÉΓòÉΓòÉ
  4092.  
  4093. Management applications use the DMI Get, Set, and List commands to request 
  4094. information about manageable products on a local system.  Each management 
  4095. application that manages system components must register with the Service Layer 
  4096. to issue commands and to receive notifications of indications. 
  4097.  
  4098. To register with the Service Layer, an application uses the DmiRegisterMgmtCmd 
  4099. command.  To unregister, applications use the DmiUnregisterMgmtCmd command. 
  4100.  
  4101.  
  4102. ΓòÉΓòÉΓòÉ 8.3.7. Component Information ΓòÉΓòÉΓòÉ
  4103.  
  4104. A DMI component is a hardware or software product that is installed in or 
  4105. attached to a computer system.  The system stores information about the 
  4106. component in a MIF file.  Use the following List commands to view the 
  4107. information in the MIF database: 
  4108.  
  4109.      DmiListComponentCmd 
  4110.      DmiListFirstComponentCmd 
  4111.      DmiListNextComponentCmd 
  4112.      DmiListComponentDescCmd 
  4113.  
  4114.  
  4115. ΓòÉΓòÉΓòÉ 8.3.8. Group Information ΓòÉΓòÉΓòÉ
  4116.  
  4117. DMI organizes attributes into groups that are related to components. DMI 
  4118. requires some groups for all products while requiring other groups for only 
  4119. certain products, such as printers.  Other groups may be proprietary and relate 
  4120. only to a specific product.  You can view the information that is defined in 
  4121. the MIF database by using the following List commands: 
  4122.  
  4123.      DmiListGroupCmd 
  4124.      DmiListFirstGroupCmd 
  4125.      DmiListNextGroupCmd 
  4126.      DmiListGroupDescCmd 
  4127.  
  4128.  
  4129. ΓòÉΓòÉΓòÉ 8.3.9. Attribute Information ΓòÉΓòÉΓòÉ
  4130.  
  4131. An attribute can describe a single characteristic, a component, or a product. 
  4132. Attributes are key parts of a component MIF file.  Attributes for groups vary 
  4133. according to the type of product.  To view the information that is defined in 
  4134. the MIF database, use the following List commands: 
  4135.  
  4136.      DmiListAttributeCmd 
  4137.      DmiListFirstAttributeCmd 
  4138.      DmiListNextAttributeCmd 
  4139.      DmiListAttributeDescCmd 
  4140.  
  4141.  Management applications must provide code to deal appropriately with the 
  4142.  status codes that the Service Layer returns.  The following table lists the 
  4143.  error codes that the Service Layer returns.  The table contains the return 
  4144.  code, the #define used in the VPD, and a list of probable causes for the 
  4145.  return code.  The list of probable causes is in sequence from most likely to 
  4146.  occur to least likely to occur. 
  4147.  
  4148.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4149.   Γöé Table 1. DMI Return Code Table                        Γöé
  4150.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4151.   Γöé RETURN CODE       Γöé #define DESCRIPTION                 Γöé
  4152.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4153.   Γöé              NON-ERROR CONDITION CODES              Γöé
  4154.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4155.   Γöé 0x00000000        Γöé SLERR_NO_ERROR                   Γöé
  4156.   Γöé             Γöé                           Γöé
  4157.   Γöé             Γöé o  Good return code; no errors found        Γöé
  4158.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4159.   Γöé 0x00000001        Γöé SLERR_NO_ERROR_MORE_DATA              Γöé
  4160.   Γöé             Γöé                           Γöé
  4161.   Γöé             Γöé o  Good return code; no errors found, but more   Γöé
  4162.   Γöé             Γöé   data is available                Γöé
  4163.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4164.   Γöé                 DATABASE ERRORS                Γöé
  4165.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4166.   Γöé 0x00000100        Γöé DBERR_ATTRIBUTE_NOT_FOUND              Γöé
  4167.   Γöé             Γöé                           Γöé
  4168.   Γöé             Γöé o  An invalid attribute ID was specified on the  Γöé
  4169.   Γöé             Γöé   command being executed             Γöé
  4170.   Γöé             Γöé                           Γöé
  4171.   Γöé             Γöé o  An invalid component or group ID was specified Γöé
  4172.   Γöé             Γöé   on the command being executed          Γöé
  4173.   Γöé             Γöé                           Γöé
  4174.   Γöé             Γöé o  Component instrumentation has been specified,  Γöé
  4175.   Γöé             Γöé   but it is not available             Γöé
  4176.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4177.   Γöé 0x00000101        Γöé DBERR_VALUE_EXCEEDS_MAXSIZE             Γöé
  4178.   Γöé             Γöé                           Γöé
  4179.   Γöé             Γöé o  A string is too large (> 508 bytes)       Γöé
  4180.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4181.   Γöé 0x00000102        Γöé DBERR_COMPONENT_NOT_FOUND              Γöé
  4182.   Γöé             Γöé                           Γöé
  4183.   Γöé             Γöé o  An invalid component ID was specified on the  Γöé
  4184.   Γöé             Γöé   command being executed             Γöé
  4185.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4186.   Γöé 0x00000103        Γöé DBERR_ENUM_ERROR                  Γöé
  4187.   Γöé             Γöé                           Γöé
  4188.   Γöé             Γöé o  Specifying a value for an enumeration that is  Γöé
  4189.   Γöé             Γöé   not defined in the component          Γöé
  4190.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4191.   Γöé 0x00000104        Γöé DBERR_GROUP_NOT_FOUND                Γöé
  4192.   Γöé             Γöé                           Γöé
  4193.   Γöé             Γöé o  An invalid group ID was specified on the    Γöé
  4194.   Γöé             Γöé   command being executed             Γöé
  4195.   Γöé             Γöé                           Γöé
  4196.   Γöé             Γöé o  An invalid component ID was specified on the  Γöé
  4197.   Γöé             Γöé   command being executed             Γöé
  4198.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4199.   Γöé 0x00000105        Γöé DBERR_ILLEGAL_KEYS                 Γöé
  4200.   Γöé             Γöé                           Γöé
  4201.   Γöé             Γöé o  Invalid keys specified             Γöé
  4202.   Γöé             Γöé                           Γöé
  4203.   Γöé             Γöé o  Invalid key count specified           Γöé
  4204.   Γöé             Γöé                           Γöé
  4205.   Γöé             Γöé o  An invalid component or group ID was specified Γöé
  4206.   Γöé             Γöé   on the command being executed          Γöé
  4207.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4208.   Γöé 0x00000106        Γöé DBERR_ILLEGAL_TO_SET                Γöé
  4209.   Γöé             Γöé                           Γöé
  4210.   Γöé             Γöé o  The attribute access is read only, so the    Γöé
  4211.   Γöé             Γöé   attribute cannot be set             Γöé
  4212.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4213.   Γöé 0x00000107        Γöé DBERR_OVERLAY_NAME_NOT_FOUND            Γöé
  4214.   Γöé             Γöé                           Γöé
  4215.   Γöé             Γöé o  Currently not in use              Γöé
  4216.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4217.   Γöé 0x00000108        Γöé DBERR_ILLEGAL_TO_GET                Γöé
  4218.   Γöé             Γöé                           Γöé
  4219.   Γöé             Γöé o  The attribute access is write-only, so the   Γöé
  4220.   Γöé             Γöé   attribute cannot be read            Γöé
  4221.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4222.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4223.   Γöé Table 1. DMI Return Code Table                        Γöé
  4224.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4225.   Γöé RETURN CODE       Γöé #define DESCRIPTION                 Γöé
  4226.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4227.   Γöé 0x00000109        Γöé DBERR_NO_DESCRIPTION                Γöé
  4228.   Γöé             Γöé                           Γöé
  4229.   Γöé             Γöé o  There is no description for the requested com- Γöé
  4230.   Γöé             Γöé   ponent, group, or attribute           Γöé
  4231.   Γöé             Γöé                           Γöé
  4232.   Γöé             Γöé o  If a component description is being requested, Γöé
  4233.   Γöé             Γöé   the component ID specified on the command    Γöé
  4234.   Γöé             Γöé   could be invalid                Γöé
  4235.   Γöé             Γöé                           Γöé
  4236.   Γöé             Γöé o  If a group description is being requested, the Γöé
  4237.   Γöé             Γöé   group or component ID specified on the command Γöé
  4238.   Γöé             Γöé   could be invalid                Γöé
  4239.   Γöé             Γöé                           Γöé
  4240.   Γöé             Γöé o  If an attribute description is being      Γöé
  4241.   Γöé             Γöé   requested, the attribute, group, or component  Γöé
  4242.   Γöé             Γöé   ID specified on the command could be invalid  Γöé
  4243.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4244.   Γöé 0x0000010A        Γöé DBERR_ROW_NOT_FOUND                 Γöé
  4245.   Γöé             Γöé                           Γöé
  4246.   Γöé             Γöé o  For the keys specified, the table row cannot  Γöé
  4247.   Γöé             Γöé   be found                    Γöé
  4248.   Γöé             Γöé                           Γöé
  4249.   Γöé             Γöé o  Invalid keys specified             Γöé
  4250.   Γöé             Γöé                           Γöé
  4251.   Γöé             Γöé o  Invalid key count specified           Γöé
  4252.   Γöé             Γöé                           Γöé
  4253.   Γöé             Γöé o  An invalid component or group ID was specified Γöé
  4254.   Γöé             Γöé   on the command being executed          Γöé
  4255.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4256.   Γöé 0x0000010B        Γöé DBERR_DIRECT_INTERFACE_NOT_REGISTERED        Γöé
  4257.   Γöé             Γöé                           Γöé
  4258.   Γöé             Γöé o  A direct interface is indicated but not regis- Γöé
  4259.   Γöé             Γöé   tered with the service layer          Γöé
  4260.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4261.   Γöé 0x0000010C        Γöé DBERR_DATABASE_CORRUPT               Γöé
  4262.   Γöé             Γöé                           Γöé
  4263.   Γöé             Γöé o  Currently not in use              Γöé
  4264.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4265.   Γöé 0x0000010D        Γöé DBERR_ATTRIBUTE_NOT_SUPPORTED            Γöé
  4266.   Γöé             Γöé                           Γöé
  4267.   Γöé             Γöé o  Attribute marked as not supported        Γöé
  4268.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4269.   Γöé 0x0000010E        Γöé DBERR_LIMITS_EXCEEDED                Γöé
  4270.   Γöé             Γöé                           Γöé
  4271.   Γöé             Γöé o  More than the maximum number of elements    Γöé
  4272.   Γöé             Γöé   allowed in the database (for example, the    Γöé
  4273.   Γöé             Γöé   current limit for components is 256)      Γöé
  4274.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4275.   Γöé               SERVICE LAYER ERRORS               Γöé
  4276.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4277.   Γöé 0x00000200        Γöé SLERR_BUFFER_FULL                  Γöé
  4278.   Γöé             Γöé                           Γöé
  4279.   Γöé             Γöé o  Response buffer is full             Γöé
  4280.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4281.   Γöé 0x00000201        Γöé SLERR_ILL_FORMED_COMMAND              Γöé
  4282.   Γöé             Γöé                           Γöé
  4283.   Γöé             Γöé o  Confirm buffer length too large         Γöé
  4284.   Γöé             Γöé                           Γöé
  4285.   Γöé             Γöé o  Keys for a table (group) not in order      Γöé
  4286.   Γöé             Γöé                           Γöé
  4287.   Γöé             Γöé o  listcomponent command with group keys but not  Γöé
  4288.   Γöé             Γöé   a class string                 Γöé
  4289.   Γöé             Γöé                           Γöé
  4290.   Γöé             Γöé o  An offset in the command points to beyond the  Γöé
  4291.   Γöé             Γöé   end of the command buffer            Γöé
  4292.   Γöé             Γöé                           Γöé
  4293.   Γöé             Γöé o  Confirm buffer length < 512           Γöé
  4294.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4295.   Γöé 0x00000202        Γöé SLERR_ILLEGAL_COMMAND                Γöé
  4296.   Γöé             Γöé                           Γöé
  4297.   Γöé             Γöé o  Not one of the valid DMI commands        Γöé
  4298.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4299.   Γöé 0x00000203        Γöé SLERR_ILLEGAL_HANDLE                Γöé
  4300.   Γöé             Γöé                           Γöé
  4301.   Γöé             Γöé o  Invalid management handle            Γöé
  4302.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4303.   Γöé 0x00000204        Γöé SLERR_OUT_OF_MEMORY                 Γöé
  4304.   Γöé             Γöé                           Γöé
  4305.   Γöé             Γöé o  A memory allocation failed.  Check this pos-  Γöé
  4306.   Γöé             Γöé   sible cause:                  Γöé
  4307.   Γöé             Γöé                           Γöé
  4308.   Γöé             Γöé   -  A buffer length set too large        Γöé
  4309.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4310.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4311.   Γöé Table 1. DMI Return Code Table                        Γöé
  4312.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4313.   Γöé RETURN CODE       Γöé #define DESCRIPTION                 Γöé
  4314.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4315.   Γöé 0x00000205        Γöé SLERR_NULL_COMPLETION_FUNCTION           Γöé
  4316.   Γöé             Γöé                           Γöé
  4317.   Γöé             Γöé o  There was no callback function specified on   Γöé
  4318.   Γöé             Γöé   the register, and a command has been executed  Γöé
  4319.   Γöé             Γöé   that will require a callback function      Γöé
  4320.   Γöé             Γöé                           Γöé
  4321.   Γöé             Γöé o  There was no callback or indication functions  Γöé
  4322.   Γöé             Γöé   specified on the register            Γöé
  4323.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4324.   Γöé 0x00000206        Γöé SLERR_NULL_RESPONSE_BUFFER             Γöé
  4325.   Γöé             Γöé                           Γöé
  4326.   Γöé             Γöé o  On a command that requires a response buffer,  Γöé
  4327.   Γöé             Γöé   one has not been specified           Γöé
  4328.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4329.   Γöé 0x00000207        Γöé SLERR_CMD_HANDLE_IN_USE               Γöé
  4330.   Γöé             Γöé                           Γöé
  4331.   Γöé             Γöé o  Currently not in use              Γöé
  4332.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4333.   Γöé 0x00000208        Γöé SLERR_ILLEGAL_DMI_LEVEL               Γöé
  4334.   Γöé             Γöé                           Γöé
  4335.   Γöé             Γöé o  The iLevelCheck field on the command is not   Γöé
  4336.   Γöé             Γöé   the same as the level of the DMI service layer Γöé
  4337.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4338.   Γöé 0x00000209        Γöé SLERR_UNKNOWN_CI_REGISTRY              Γöé
  4339.   Γöé             Γöé                           Γöé
  4340.   Γöé             Γöé o  The component instrumentation handle      Γöé
  4341.   Γöé             Γöé   (iCiHandle) is not valid            Γöé
  4342.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4343.   Γöé 0x0000020A        Γöé SLERR_COMMAND_CANCELED               Γöé
  4344.   Γöé             Γöé                           Γöé
  4345.   Γöé             Γöé o  Currently not in use              Γöé
  4346.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4347.   Γöé 0x0000020B        Γöé SLERR_INSUFFICIENT_PRIVILEGES            Γöé
  4348.   Γöé             Γöé                           Γöé
  4349.   Γöé             Γöé o  Currently not in use              Γöé
  4350.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4351.   Γöé 0x0000020C        Γöé SLERR_NULL_ACCESS_FUNCTION             Γöé
  4352.   Γöé             Γöé                           Γöé
  4353.   Γöé             Γöé o  Entry point to the component instrumentation  Γöé
  4354.   Γöé             Γöé   is null                     Γöé
  4355.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4356.   Γöé 0x0000020D        Γöé SLERR_FILE_ERROR                  Γöé
  4357.   Γöé             Γöé                           Γöé
  4358.   Γöé             Γöé o  Could not delete a component from the MIF    Γöé
  4359.   Γöé             Γöé   database                    Γöé
  4360.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4361.   Γöé 0x0000020E        Γöé SLERR_EXEC_FAILURE                 Γöé
  4362.   Γöé             Γöé                           Γöé
  4363.   Γöé             Γöé o  Currently not in use              Γöé
  4364.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4365.   Γöé 0x0000020F        Γöé SLERR_BAD_MIF_FILE                 Γöé
  4366.   Γöé             Γöé                           Γöé
  4367.   Γöé             Γöé o  The MIF database cannot be opened        Γöé
  4368.   Γöé             Γöé                           Γöé
  4369.   Γöé             Γöé o  There is an error in the MIF file that is    Γöé
  4370.   Γöé             Γöé   being installed                 Γöé
  4371.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4372.   Γöé 0x00000210        Γöé SLERR_INVALID_FILE_TYPE               Γöé
  4373.   Γöé             Γöé                           Γöé
  4374.   Γöé             Γöé o  A MIF file that is being installed has an    Γöé
  4375.   Γöé             Γöé   invalid file type                Γöé
  4376.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4377.   Γöé 0x00000211        Γöé SLERR_SL_INACTIVE                  Γöé
  4378.   Γöé             Γöé                           Γöé
  4379.   Γöé             Γöé o  The service layer cannot be contacted and is  Γöé
  4380.   Γöé             Γöé   probably not running              Γöé
  4381.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4382.   Γöé 0x00000212        Γöé SLERR_UNICODE_NOT_SUPPORTED             Γöé
  4383.   Γöé             Γöé                           Γöé
  4384.   Γöé             Γöé o  Currently not in use              Γöé
  4385.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4386.   Γöé 0x00000213        Γöé SLERR_CANT_UNINSTALL_SL_COMPONENT          Γöé
  4387.   Γöé             Γöé                           Γöé
  4388.   Γöé             Γöé o  Currently not in use              Γöé
  4389.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4390.   Γöé 0x00000214        Γöé SLERR_NULL_CANCEL_FUNCTION             Γöé
  4391.   Γöé             Γöé                           Γöé
  4392.   Γöé             Γöé o  Entry point to the cancel function of the com- Γöé
  4393.   Γöé             Γöé   ponent instrumentation is null         Γöé
  4394.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4395.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4396.   Γöé Table 1. DMI Return Code Table                        Γöé
  4397.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4398.   Γöé RETURN CODE       Γöé #define DESCRIPTION                 Γöé
  4399.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4400.   Γöé 0x00003000        Γöé SLERR_NOT_INITIALIZED                Γöé
  4401.   Γöé             Γöé                           Γöé
  4402.   Γöé             Γöé o  Service layer is not initialized and is not   Γöé
  4403.   Γöé             Γöé   running                     Γöé
  4404.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4405.   Γöé 0x00003001        Γöé SLERR_IPC_CREATE_ERROR               Γöé
  4406.   Γöé             Γöé                           Γöé
  4407.   Γöé             Γöé o  Could not communicate or establish communi-   Γöé
  4408.   Γöé             Γöé   cations with the service layer         Γöé
  4409.   Γöé             Γöé                           Γöé
  4410.   Γöé             Γöé o  On a synchronous invoke, could not get exclu-  Γöé
  4411.   Γöé             Γöé   sive use of the synchronous interface      Γöé
  4412.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4413.   Γöé 0x00003002        Γöé SLERR_THREAD_CREATE_ERROR              Γöé
  4414.   Γöé             Γöé                           Γöé
  4415.   Γöé             Γöé o  A thread in the service layer cannot be     Γöé
  4416.   Γöé             Γöé   created                     Γöé
  4417.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4418.   Γöé 0x00003003        Γöé SLERR_QUEUE_CREATE_ERROR              Γöé
  4419.   Γöé             Γöé                           Γöé
  4420.   Γöé             Γöé o  Cannot create the queue for the tasker     Γöé
  4421.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4422.   Γöé 0x00003004        Γöé SLERR_SL_TERMINATED                 Γöé
  4423.   Γöé             Γöé                           Γöé
  4424.   Γöé             Γöé o  Currently not in use              Γöé
  4425.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4426.   Γöé 0x00003005        Γöé SLERR_CMD_EXCEPTION                 Γöé
  4427.   Γöé             Γöé                           Γöé
  4428.   Γöé             Γöé o  A trap occurred in the service layer, probably Γöé
  4429.   Γöé             Γöé   due to an invalid command            Γöé
  4430.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4431.   Γöé 0x00003006        Γöé SLERR_SYNC_SETUP_ERROR               Γöé
  4432.   Γöé             Γöé                           Γöé
  4433.   Γöé             Γöé o  Cannot create the event semaphore used on the  Γöé
  4434.   Γöé             Γöé   synchronous dmiinvoke call           Γöé
  4435.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4436.   Γöé 0x00003007        Γöé SLERR_SL_DLL_MISMATCH                Γöé
  4437.   Γöé             Γöé                           Γöé
  4438.   Γöé             Γöé o  The versions of the Service Layer (SL) and the Γöé
  4439.   Γöé             Γöé   DMIAPI.DLL are incompatible           Γöé
  4440.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4441.   Γöé 0x00003008        Γöé SLERR_IPC_ERROR                   Γöé
  4442.   Γöé             Γöé                           Γöé
  4443.   Γöé             Γöé o  Cannot set up the shared memory with the    Γöé
  4444.   Γöé             Γöé   Service Layer                  Γöé
  4445.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4446.  
  4447.  The SystemView Agent Programmer's Guide on the system has details of the 
  4448.  DmiRegisterMgmtCmd command.  The Guide also describes the Get, Set, and List 
  4449.  commands available to management applications as well as the list of status 
  4450.  codes. 
  4451.  
  4452.  
  4453. ΓòÉΓòÉΓòÉ 8.3.10. DMI Browser ΓòÉΓòÉΓòÉ
  4454.  
  4455. The DMI browser is a desktop tool for managing hardware and software products 
  4456. that conform to the DMI standard.  You can use the browser to do the following: 
  4457.  
  4458.      View hardware or software product information about the components, 
  4459.       groups, and attributes 
  4460.      Install product MIF files in the database 
  4461.      Remove product MIF files from the database 
  4462.      Dynamically register and unregister products with the DMI service layer 
  4463.      View events that the service layer issues 
  4464.      Display version information 
  4465.  
  4466.  You can use the DMI browser as a test tool during product development. If the 
  4467.  browser displays error messages if it detects problems during the installation 
  4468.  of MIF files or registration of products. 
  4469.  
  4470.  
  4471. ΓòÉΓòÉΓòÉ 9. Summary of Functions and Interfaces ΓòÉΓòÉΓòÉ
  4472.  
  4473. OS/2 Warp Version 4 provides functions, commands, graphical utilities, icons, 
  4474. and folders to help you collect and manage problem determination data.  Here is 
  4475. a summary to help you understand all that is available to you, and where more 
  4476. information can be found about each. 
  4477.  
  4478. The tables appear in the same order as the chapters in the book: 
  4479.  
  4480.      First Failure Support Technology 
  4481.      Trace 
  4482.      Dumps 
  4483.      Error Log 
  4484.      DMI 
  4485.  
  4486.  Most of the function described in the tables can be accessed from the systems 
  4487.  management folder 
  4488.  
  4489.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4490.   Γöé Table 2. FFST                                 Γöé
  4491.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4492.   Γöé NAME           Γöé TASKS           Γöé FOR INFORMATION     Γöé
  4493.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4494.   Γöé FFSTProbe function    Γöé o  Logs data in Error  Γöé Instrumenting Your Code Γöé
  4495.   Γöé             Γöé   Log          Γöé             Γöé
  4496.   Γöé             Γöé o  Can trigger FFST   Γöé             Γöé
  4497.   Γöé             Γöé   dump         Γöé             Γöé
  4498.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4499.   Γöé FFSTQueryConfiguration  Γöé Queries FFST configura-  Γöé Instrumenting Your Code Γöé
  4500.   Γöé function         Γöé tion information     Γöé             Γöé
  4501.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4502.   Γöé FFSTSetConfiguration   Γöé Change FFST configura-  Γöé Instrumenting Your Code Γöé
  4503.   Γöé function         Γöé tion values        Γöé             Γöé
  4504.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4505.   Γöé MKTMPF (Make Template  Γöé Creates an error record  Γöé Instrumenting Your Code Γöé
  4506.   Γöé File) command      Γöé template file       Γöé             Γöé
  4507.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4508.   Γöé MRES (MultiRes Resource Γöé Creates message files   Γöé Instrumenting Your Code Γöé
  4509.   Γöé Compiler)        Γöé              Γöé             Γöé
  4510.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4511.   Γöé FFSTCONF command     Γöé Controls error data    Γöé Controlling FFSTProbe  Γöé
  4512.   Γöé             Γöé requested by the     Γöé             Γöé
  4513.   Γöé             Γöé FFSTProbe function    Γöé             Γöé
  4514.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4515.   Γöé FFST Setup icon     Γöé Accesses FFST Setup    Γöé Controlling FFSTProbe  Γöé
  4516.   Γöé             Γöé display          Γöé             Γöé
  4517.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4518.  
  4519.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4520.   Γöé Table 3. Trace                                Γöé
  4521.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4522.   Γöé NAME           Γöé TASKS           Γöé FOR INFORMATION     Γöé
  4523.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4524.   Γöé TRACE utility      Γöé Turns trace points on   Γöé Using Trace       Γöé
  4525.   Γöé             Γöé and off          Γöé             Γöé
  4526.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4527.   Γöé TRACEFMT utility     Γöé Views error event trace  Γöé Using Trace       Γöé
  4528.   Γöé             Γöé data           Γöé             Γöé
  4529.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4530.   Γöé TRACEGET command     Γöé Captures contents of   Γöé Using Trace       Γöé
  4531.   Γöé             Γöé trace buffer to a file  Γöé             Γöé
  4532.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4533.   Γöé TRACELOG utility     Γöé Controls logging of    Γöé Using Trace       Γöé
  4534.   Γöé             Γöé event trace data     Γöé             Γöé
  4535.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4536.   Γöé TRCUST utility      Γöé Trace Customizer to    Γöé Using Trace       Γöé
  4537.   Γöé             Γöé create trace format file Γöé             Γöé
  4538.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4539.  
  4540.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4541.   Γöé Table 4. Dump                                 Γöé
  4542.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4543.   Γöé NAME           Γöé TASKS           Γöé FOR INFORMATION     Γöé
  4544.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4545.   Γöé PM Dump Facility icon  Γöé Initiates the PM Dump   Γöé Capturing Dumps     Γöé
  4546.   Γöé             Γöé Facility dump formatter  Γöé             Γöé
  4547.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4548.  
  4549.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4550.   Γöé Table 5. Error Log                              Γöé
  4551.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4552.   Γöé NAME           Γöé TASKS           Γöé FOR INFORMATION     Γöé
  4553.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4554.   Γöé LogOpenEventNotificationΓöé Requests notification of Γöé Problem Determination  Γöé
  4555.   Γöé function         Γöé when entries are put in  Γöé APIs           Γöé
  4556.   Γöé             Γöé error log         Γöé             Γöé
  4557.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4558.   Γöé LogChangeEventFilter   Γöé Changes the event     Γöé Problem Determination  Γöé
  4559.   Γöé function         Γöé notification filter    Γöé APIs           Γöé
  4560.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4561.   Γöé LogReadEntry function  Γöé Reads entries from the  Γöé Problem Determination  Γöé
  4562.   Γöé             Γöé log file         Γöé APIs           Γöé
  4563.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4564.   Γöé LogOpenFile function   Γöé Opens a log file for   Γöé Problem Determination  Γöé
  4565.   Γöé             Γöé reading          Γöé APIs           Γöé
  4566.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4567.   Γöé LogCloseFile function  Γöé Closes a log file     Γöé Problem Determination  Γöé
  4568.   Γöé             Γöé              Γöé APIs           Γöé
  4569.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4570.   Γöé LogWaitEvent function  Γöé Request error notifica-  Γöé Problem Determination  Γöé
  4571.   Γöé             Γöé tion           Γöé APIs           Γöé
  4572.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4573.   Γöé LogCloseEventNotificatioΓöé Closes event notifica-  Γöé Problem Determination  Γöé
  4574.   Γöé function         Γöé tion           Γöé APIs           Γöé
  4575.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4576.   Γöé LogFormatEntry function Γöé Gets character strings  Γöé Problem Determination  Γöé
  4577.   Γöé             Γöé that can be displayed   Γöé APIs           Γöé
  4578.   Γöé             Γöé when formatted.      Γöé             Γöé
  4579.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4580.   Γöé SYSLOG (Error Log For-  Γöé Displays the system    Γöé Viewing Error Log    Γöé
  4581.   Γöé matter) utility     Γöé Error Log         Γöé             Γöé
  4582.   Γöé             Γöé              Γöé             Γöé
  4583.   Γöé             Γöé Allows access to other  Γöé             Γöé
  4584.   Γöé             Γöé FFST tools        Γöé             Γöé
  4585.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4586.  
  4587.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4588.   Γöé Table 6. DMI                                 Γöé
  4589.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4590.   Γöé NAME           Γöé FUNCTION(S)        Γöé FOR INFORMATION     Γöé
  4591.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4592.   Γöé DMI           Γöé Standard way and API set Γöé DMI           Γöé
  4593.   Γöé             Γöé to define and access VPD Γöé             Γöé
  4594.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4595.  
  4596.  
  4597. ΓòÉΓòÉΓòÉ 10. Problem Determination APIs ΓòÉΓòÉΓòÉ
  4598.  
  4599. These APIs are intended for programmers developing OS/2 applications. Problem 
  4600. Determination services provide basic support for identifying and isolating 
  4601. errors.  They include an integrated Error Log to keep a historical record of 
  4602. errors detected by the operating system and, optionally, by applications.  The 
  4603. mechanism for inserting entries into the Error Log is the FFSTProbe function. 
  4604. FFST (First Failure Support Technology) enables errors to be logged when first 
  4605. detected. 
  4606.  
  4607. FFSTProbe also supports the collection of trace and user-specified information 
  4608. and the association of it with an error log entry and possibly an FFST dump. 
  4609. Traces are used to create a historical record of activity in the operating 
  4610. system and, optionally, applications.  FFST dumps are produced if the user 
  4611. calls FFSTProbe with certain parameters filled in. 
  4612.  
  4613. A system dump is used to create a snapshot of the entire contents of main 
  4614. memory at the time of a system crash.  In most cases, a system dump should be 
  4615. taken only with the assistance of a Service Representative. 
  4616.  
  4617. The information in the Error Log, along with any trace or dump information, can 
  4618. be valuable in isolating errors more quickly and with less disruption to users. 
  4619.  
  4620. Problem Determination services provide application programming interfaces 
  4621. (APIs) for: 
  4622.  
  4623.      Managing Error Log files 
  4624.      Reading and formatting Error Log entries 
  4625.      Registering and waiting for Error Log event notifications 
  4626.      Changing Error Log event-notification filters 
  4627.      Logging an error and storing associated trace and dump information in a 
  4628.       file 
  4629.  
  4630.  The following libraries must be linked with object files that use the Problem 
  4631.  Determination functions: 
  4632.  
  4633.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4634.   ΓöéLibrary                       ΓöéFunctions                     Γöé
  4635.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4636.   Γöéffst.lib                      ΓöéFFST functions                Γöé
  4637.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4638.   Γöélfapi.lib                     ΓöéLog functions                 Γöé
  4639.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4640.   Γöétrace.lib                     ΓöéTraceCreateEntry              Γöé
  4641.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4642.  
  4643.  This chapter includes the following sections: 
  4644.  
  4645.      Problem Determination Functions 
  4646.      Problem Determination Data Types 
  4647.  
  4648.  
  4649. ΓòÉΓòÉΓòÉ 10.1. Problem Determination Functions ΓòÉΓòÉΓòÉ
  4650.  
  4651. This sections describes the following Problem Determination functions: 
  4652.  
  4653.      FFSTProbe 
  4654.      FFSTQueryConfiguration 
  4655.      FFSTSetConfiguration 
  4656.      LogChangeEventFilter 
  4657.      LogCloseEventNotification 
  4658.      LogCloseFile 
  4659.      LogFormatEntry 
  4660.      LogOpenEventNotification 
  4661.      LogOpenFile 
  4662.      LogReadEntry 
  4663.      LogWaitEvent 
  4664.      TraceCreateEntry 
  4665.  
  4666.  
  4667. ΓòÉΓòÉΓòÉ 10.1.1. FFSTProbe ΓòÉΓòÉΓòÉ
  4668.  
  4669.  
  4670. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe - Syntax ΓòÉΓòÉΓòÉ
  4671.  
  4672. FFSTProbe performs the requested services and returns control to the caller. 
  4673. This function provides a series of functions that includes logging and dump 
  4674. creation. 
  4675.  
  4676.  
  4677. #define INCL_FFST
  4678. #include <os2.h>
  4679.  
  4680. PPRODUCTINFO    pProductInfo;
  4681. PFFSTPARMS      pFFSTParms;
  4682. APIRET          rc;            /*  Return code. */
  4683.  
  4684. rc = FFSTProbe(pProductInfo, pFFSTParms);
  4685.  
  4686.  
  4687. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe Parameter - pProductInfo ΓòÉΓòÉΓòÉ
  4688.  
  4689.  pProductInfo (PPRODUCTINFO) - input 
  4690.     Pointer to the product-information packet. 
  4691.  
  4692.  
  4693. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe Parameter - pFFSTParms ΓòÉΓòÉΓòÉ
  4694.  
  4695.  pFFSTParms (PFFSTPARMS) - input 
  4696.     A parameter packet that describes the information provided with the 
  4697.     FFSTProbe. 
  4698.  
  4699.  
  4700. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe Return Value - rc ΓòÉΓòÉΓòÉ
  4701.  
  4702.  rc (APIRET) - FFSTProbe returns one of the following values: 
  4703.  
  4704.         From FFSTProbe to application 
  4705.  
  4706.                    1000000      No error
  4707.  
  4708.         Invalid Pointers passed in by the API user 
  4709.  
  4710.                    1000005      Invalid product address
  4711.                    1000010      Invalid FFST address
  4712.                    1000015      Invalid proddata address
  4713.                    1000016      Invalid message address
  4714.                    1000017      Invalid pmsginsdata address
  4715.                    1000020      Invalid DMI address
  4716.                    1000025      Invalid dump address
  4717.                    1000026      Invalid pdumpuserdata address
  4718.                    1000030      Invalid user area address
  4719.                    1000035      Invalid log data address
  4720.  
  4721.                    1000040      Invalid insert messages address
  4722.                    1000045      Invalid vendor tag address
  4723.                    1000050      Invalid tag address
  4724.                    1000055      Invalid modulename address
  4725.                    1000060      Invalid revision address
  4726.                    1000065      Invalid product id address
  4727.                    1000070      Invalid DMI fixlvl address
  4728.                    1000075      Invalid tempfn address
  4729.  
  4730.                    1000080      Invalid user structure title address
  4731.                    1000085      Invalid config subproddata address
  4732.                    1000090      Invalid DMI modification level address
  4733.  
  4734.         Invalid Packet Revision Numbers 
  4735.  
  4736.                    1000095      Invalid product revision
  4737.                    1000100      Invalid DMI revision
  4738.                    1000105      Invalid FFST revision
  4739.  
  4740.         Invalid severity 
  4741.  
  4742.                    1000110      Invalid severity
  4743.  
  4744.         Invalid number of dumps specified by user 
  4745.  
  4746.                    1000115      Invalid user dump number
  4747.  
  4748.         Invalid number of insert texts 
  4749.  
  4750.                    1000120      Invalid inserts number
  4751.                    1000125      Invalid insert text address
  4752.  
  4753.         Invalid probe flags 
  4754.  
  4755.                    1000130      Invalid probe flags
  4756.  
  4757.         Invalid PSTAT data and process environment data 
  4758.  
  4759.                    1000135      Invalid PSTAT data
  4760.                    1000140      Invalid process environment
  4761.  
  4762.         Invalid packet sizes 
  4763.  
  4764.                    1000145      Invalid PRODUCTDATA packet size
  4765.                    1000150      Invalid DMIDATA packet size
  4766.                    1000155      Invalid FFSTPARMS packet size
  4767.  
  4768.         DLL load and query 
  4769.  
  4770.                    1000160      DLL query proc error
  4771.                    1000165      DLL load error
  4772.  
  4773.         FFSTProbe pipe errors 
  4774.  
  4775.                    1000170      Client pipe not created
  4776.                    1000175      Client pipe not opened
  4777.  
  4778.         Multiple errors occurring during probe processing 
  4779.  
  4780.                    1000180      Multiple system errors
  4781.  
  4782.         Misc. Return codes 
  4783.  
  4784.                    1000185      Client proc in exit list processing
  4785.                    1000186      UniCode conversion error
  4786.  
  4787.         FFSTProbe not active 
  4788.  
  4789.          Returned to application and not to ERRLOG. 
  4790.  
  4791.                    1000190      FFST not active
  4792.           /*-----------------------------------------------------*/ /* Return 
  4793.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  4794.          FFSTSetConfiguration  or other FFST processing.   */ 
  4795.          /*-----------------------------------------------------*/ 
  4796.  
  4797.         Return codes for shared memory errors 
  4798.  
  4799.                    0x16580       Get shared mem error
  4800.                    0x16581       Alloc shared mem error
  4801.                    0x16582       Free shared mem error
  4802.  
  4803.         Return codes for semaphore errors 
  4804.  
  4805.                    0x1658A       Semaphore timeout error
  4806.                    0x1658B       Semaphore open error
  4807.                    0x1658C       Semaphore release error
  4808.                    0x1658D       Semaphore close error
  4809.                    0x1658E       Semaphore request error
  4810.                    0x17111       Semaphore g error
  4811.  
  4812.         Return codes for dump engine processing which may be posted to the 
  4813.          SysLog. 
  4814.  
  4815.                    0x16595       Dump hdr file open error
  4816.                    0x16596       Index file open error
  4817.                    0x16597       Dump file open error
  4818.                    0x16598       Memory allocation error
  4819.                    0x16599       Queryfs error
  4820.                    0x1659a       Dump wrap error
  4821.                    0x1659b       Trace rename error
  4822.                    0x17222       Proc dump rename error
  4823.  
  4824.         Return codes that may be in the SysLog during Worker bringup 
  4825.  
  4826.                    0x165a1       Create config semaphore error
  4827.                    0x165a2       Create dump semaphore error
  4828.                    0x165a3       Worker alloc shared mem error
  4829.                    0x165a4       Worker get shared mem error
  4830.                    0x165a5       Create pct semaphore error
  4831.                    0x165a6       File already exists
  4832.                    0x165a7       Specified file not found
  4833.                    0x165a8       Dump validation error
  4834.                    0x165a9       Config memory filled
  4835.  
  4836.                    0x165aa       Worker setconfig error
  4837.                    0x165ab       Worker pipe not created
  4838.                    0x17005       Worker ffst config not okay
  4839.                    0x165ac       Worker mutexsem not released
  4840.                    0x17010       Worker already active
  4841.                    0x17015       Worker initworker failed
  4842.                    0x17050       Worker not active
  4843.  
  4844.  
  4845. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe - Parameters ΓòÉΓòÉΓòÉ
  4846.  
  4847.  pProductInfo (PPRODUCTINFO) - input 
  4848.     Pointer to the product-information packet. 
  4849.  
  4850.  pFFSTParms (PFFSTPARMS) - input 
  4851.     A parameter packet that describes the information provided with the 
  4852.     FFSTProbe. 
  4853.  
  4854.  rc (APIRET) - returns 
  4855.     Return code. 
  4856.  
  4857.     FFSTProbe returns one of the following values: 
  4858.  
  4859.         From FFSTProbe to application 
  4860.  
  4861.                    1000000      No error
  4862.  
  4863.         Invalid Pointers passed in by the API user 
  4864.  
  4865.                    1000005      Invalid product address
  4866.                    1000010      Invalid FFST address
  4867.                    1000015      Invalid proddata address
  4868.                    1000016      Invalid message address
  4869.                    1000017      Invalid pmsginsdata address
  4870.                    1000020      Invalid DMI address
  4871.                    1000025      Invalid dump address
  4872.                    1000026      Invalid pdumpuserdata address
  4873.                    1000030      Invalid user area address
  4874.                    1000035      Invalid log data address
  4875.  
  4876.                    1000040      Invalid insert messages address
  4877.                    1000045      Invalid vendor tag address
  4878.                    1000050      Invalid tag address
  4879.                    1000055      Invalid modulename address
  4880.                    1000060      Invalid revision address
  4881.                    1000065      Invalid product id address
  4882.                    1000070      Invalid DMI fixlvl address
  4883.                    1000075      Invalid tempfn address
  4884.  
  4885.                    1000080      Invalid user structure title address
  4886.                    1000085      Invalid config subproddata address
  4887.                    1000090      Invalid DMI modification level address
  4888.  
  4889.         Invalid Packet Revision Numbers 
  4890.  
  4891.                    1000095      Invalid product revision
  4892.                    1000100      Invalid DMI revision
  4893.                    1000105      Invalid FFST revision
  4894.  
  4895.         Invalid severity 
  4896.  
  4897.                    1000110      Invalid severity
  4898.  
  4899.         Invalid number of dumps specified by user 
  4900.  
  4901.                    1000115      Invalid user dump number
  4902.  
  4903.         Invalid number of insert texts 
  4904.  
  4905.                    1000120      Invalid inserts number
  4906.                    1000125      Invalid insert text address
  4907.  
  4908.         Invalid probe flags 
  4909.  
  4910.                    1000130      Invalid probe flags
  4911.  
  4912.         Invalid PSTAT data and process environment data 
  4913.  
  4914.                    1000135      Invalid PSTAT data
  4915.                    1000140      Invalid process environment
  4916.  
  4917.         Invalid packet sizes 
  4918.  
  4919.                    1000145      Invalid PRODUCTDATA packet size
  4920.                    1000150      Invalid DMIDATA packet size
  4921.                    1000155      Invalid FFSTPARMS packet size
  4922.  
  4923.         DLL load and query 
  4924.  
  4925.                    1000160      DLL query proc error
  4926.                    1000165      DLL load error
  4927.  
  4928.         FFSTProbe pipe errors 
  4929.  
  4930.                    1000170      Client pipe not created
  4931.                    1000175      Client pipe not opened
  4932.  
  4933.         Multiple errors occurring during probe processing 
  4934.  
  4935.                    1000180      Multiple system errors
  4936.  
  4937.         Misc. Return codes 
  4938.  
  4939.                    1000185      Client proc in exit list processing
  4940.                    1000186      UniCode conversion error
  4941.  
  4942.         FFSTProbe not active 
  4943.  
  4944.          Returned to application and not to ERRLOG. 
  4945.  
  4946.                    1000190      FFST not active
  4947.           /*-----------------------------------------------------*/ /* Return 
  4948.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  4949.          FFSTSetConfiguration  or other FFST processing.   */ 
  4950.          /*-----------------------------------------------------*/ 
  4951.         Return codes for shared memory errors 
  4952.  
  4953.                    0x16580       Get shared mem error
  4954.                    0x16581       Alloc shared mem error
  4955.                    0x16582       Free shared mem error
  4956.  
  4957.         Return codes for semaphore errors 
  4958.  
  4959.                    0x1658A       Semaphore timeout error
  4960.                    0x1658B       Semaphore open error
  4961.                    0x1658C       Semaphore release error
  4962.                    0x1658D       Semaphore close error
  4963.                    0x1658E       Semaphore request error
  4964.                    0x17111       Semaphore g error
  4965.  
  4966.         Return codes for dump engine processing which may be posted to the 
  4967.          SysLog. 
  4968.  
  4969.                    0x16595       Dump hdr file open error
  4970.                    0x16596       Index file open error
  4971.                    0x16597       Dump file open error
  4972.                    0x16598       Memory allocation error
  4973.                    0x16599       Queryfs error
  4974.                    0x1659a       Dump wrap error
  4975.                    0x1659b       Trace rename error
  4976.                    0x17222       Proc dump rename error
  4977.  
  4978.         Return codes that may be in the SysLog during Worker bringup 
  4979.  
  4980.                    0x165a1       Create config semaphore error
  4981.                    0x165a2       Create dump semaphore error
  4982.                    0x165a3       Worker alloc shared mem error
  4983.                    0x165a4       Worker get shared mem error
  4984.                    0x165a5       Create pct semaphore error
  4985.                    0x165a6       File already exists
  4986.                    0x165a7       Specified file not found
  4987.                    0x165a8       Dump validation error
  4988.                    0x165a9       Config memory filled
  4989.  
  4990.                    0x165aa       Worker setconfig error
  4991.                    0x165ab       Worker pipe not created
  4992.                    0x17005       Worker ffst config not okay
  4993.                    0x165ac       Worker mutexsem not released
  4994.                    0x17010       Worker already active
  4995.                    0x17015       Worker initworker failed
  4996.                    0x17050       Worker not active
  4997.  
  4998.  
  4999. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe - Remarks ΓòÉΓòÉΓòÉ
  5000.  
  5001. The library FFST.LIB must be linked with object files that use FFSTProbe. 
  5002.  
  5003. The packet_revision_number parameter defines if pointers point to ASCII or 
  5004. UniCode character data. 
  5005.  
  5006.  
  5007. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe - Example Code ΓòÉΓòÉΓòÉ
  5008.  
  5009. The following example adds an error (235) to the Default Log file for this 
  5010. service. The error has no message inserts, user data, dump file, or extra data. 
  5011. Product information will be retrieved from the DMI database entry that was 
  5012. created when the product (TEST PRODUCT) was installed. 
  5013.  
  5014.   /**************************************************************************/
  5015.   /* probe.c: FFSTProbe sample                                              */
  5016.   /*                                                                        */
  5017.   /* This test program gives an example of using the FFSTProbe API and the  */
  5018.   /* TraceCreateEntry API by using 'wrapper' functions.  The dummy API      */
  5019.   /* My_Dummy_Api returns a return code which is then used as the basis of  */
  5020.   /* firing a FFSTProbe via the wrapper function, callFFST.  callFFST can   */
  5021.   /* be modified to include more or less data as needed.                    */
  5022.   /*                                                                        */
  5023.   /**************************************************************************/
  5024.  
  5025.   #define INCL_DOS
  5026.   #define INCL_DOSMEMMGR
  5027.   #define INCL_DOSPROCESS
  5028.   #define INCL_FFST
  5029.   #define NO_ERROR 0
  5030.  
  5031.   #include <os2.h>
  5032.   #include <stdio.h>
  5033.   #include <stdlib.h>
  5034.   #include <string.h>
  5035.   #include <FFST.h>
  5036.   #include <trace.h>
  5037.  
  5038.   /**************************************************************************/
  5039.   /* Define probe ID for FFSTProbe called when dummy API fails.  Probe ID   */
  5040.   /* is the unique identifier you use later to find the source of the       */
  5041.   /* failure.  It should be unique within a DMI triplet (explained later)   */
  5042.   /* or within your product                                                 */
  5043.   /**************************************************************************/
  5044.   #define DUMMY_API_PROBE 22222
  5045.  
  5046.   void callFFST ( ULONG input_version,           /* FFST 'Wrapper' Function */
  5047.               /* input version lets you change the wrapper     */
  5048.               /* without changing each call, just make sure    */
  5049.               /* the wrapper still treats the 'old' version    */
  5050.               /* the same and that any new code is             */
  5051.               /* conditioned on a new input_version #          */
  5052.  
  5053.                   ULONG input_probe_flags,         /* FFSTProbe probe flags */
  5054.                   ULONG input_severity,               /* FFSTProbe severity */
  5055.                   ULONG input_probe_id,                     /* FFSTProbe ID */
  5056.                   CHAR* input_module_name,   /* module name passed to probe */
  5057.                   ULONG input_log_data_length, /* log data length for the
  5058.                                                   system error log          */
  5059.                   PVOID input_pError_log_data,  /* pointer to the data for
  5060.                                                    system error log         */
  5061.                   int   argc);
  5062.  
  5063.   /*****************************************************/
  5064.   /* This is for a common trace entry routine          */
  5065.   /*****************************************************/
  5066.   #define HKWD_TEST            220        /* major code */
  5067.   #define hkwd_test_entry      0x0001     /* minor code for entry */
  5068.   #define hkwd_test_exit       0x8001     /* minor code for exit */
  5069.  
  5070.   struct
  5071.   {
  5072.     int count;
  5073.     char text╨¥12Γöÿ;
  5074.   } trace_capture_start, trace_capture_end;
  5075.  
  5076.   APIRET trace_out(ULONG major, ULONG minor, void *trace_data,
  5077.                     ULONG data_len);      /* trace wrapper function */
  5078.  
  5079.   /**************************************/
  5080.   /* End of trace declarations for Main */
  5081.   /**************************************/
  5082.  
  5083.   ULONG My_Dummy_API(ULONG Mydata);
  5084.  
  5085.  
  5086.   /**************************************************************************/
  5087.   /*                                                                        */
  5088.   /*  Main Application (this uses the callFFST wrapper function).           */
  5089.   /*                                                                        */
  5090.   /**************************************************************************/
  5091.  
  5092.   int main ( int argc, char * argv╨¥Γöÿ, char * envp  )
  5093.   {
  5094.      ULONG  rc          = 0;
  5095.      ULONG  Mydata      = 2;
  5096.      ULONG  userDataLen = 0;
  5097.      PVOID  pUserData   = NULL;
  5098.  
  5099.      printf ( "Starting FFSTProbe Sample \n" );
  5100.  
  5101.   /**************************************/
  5102.   /* Do the trace entry point           */
  5103.   /**************************************/
  5104.  
  5105.      trace_capture_start.count = 3; /* just a number */
  5106.      strncpy(trace_capture_start.text, "Start main", 12);
  5107.  
  5108.   /******** CALL TraceCreateEntry function ****/
  5109.      trace_out(HKWD_TEST,
  5110.         hkwd_test_entry,
  5111.         &trace_capture_start,
  5112.         sizeof(trace_capture_start));
  5113.  
  5114.      /***********************************************************************/
  5115.      /* call the 'dummy'  API so it returns a non-zero rc                   */
  5116.      /***********************************************************************/
  5117.      rc = My_Dummy_API ( Mydata );
  5118.      if ( rc != NO_ERROR )
  5119.      {
  5120.         /********************************************************************/
  5121.         /* The API has failed. Setup the userData to contain the failing rc */
  5122.         /********************************************************************/
  5123.         pUserData = calloc ( 2, sizeof ( ULONG ) );
  5124.         memcpy ( pUserData, &rc, sizeof ( ULONG ) );
  5125.         memcpy ( ( PBYTE ) pUserData + sizeof ( ULONG )
  5126.                , &Mydata, sizeof ( ULONG ) );
  5127.   /****************************************************************************/
  5128.   /* Call the FFSTProbe wrapper function with a version of 1,                 */
  5129.   /* Have FFST post the process status and environment variables in the       */
  5130.   /* syslog, a severity of 4, a probe id of DUMMY_API_PROBE which was         */
  5131.   /* previously defined as 22222, a module name of 'my_module_1', the length  */
  5132.   /* of logusrdta, the logUserData (equal to the failing rc (1) as            */
  5133.   /* setup above) and Argc is passed in to determine whether or not data      */
  5134.   /* should be retrieved from DMI.                                            */
  5135.   /****************************************************************************/
  5136.  
  5137.  
  5138.            callFFST ( 1
  5139.                  , PSTAT_FLAG Γòæ PROC_ENV_FLAG
  5140.                  , SEVERITY4
  5141.                  , DUMMY_API_PROBE
  5142.                  , "my_module_1"
  5143.                  , 2 * sizeof ( ULONG )
  5144.                  , pUserData
  5145.                  , argc );
  5146.      }
  5147.  
  5148.      if (pUserData != NULL)
  5149.      {
  5150.        free(pUserData);
  5151.        pUserData = NULL;
  5152.      }
  5153.  
  5154.      if (argc > 1)
  5155.      {
  5156.         printf("\nFFSTProbe sample ended not using DMI component:\n\n\n");
  5157.      }
  5158.      else
  5159.      {
  5160.         printf("\nFFSTProbe sample ended using DMI component:\n\n\n");
  5161.      }
  5162.  
  5163.   /**************************************/
  5164.   /* Do the trace end point             */
  5165.   /**************************************/
  5166.  
  5167.      trace_capture_end.count = 99;
  5168.      strncpy(trace_capture_end.text, "End main", 12);
  5169.  
  5170.   /******** CALL TraceCreateEntry function ****/
  5171.      trace_out(HKWD_TEST,
  5172.         hkwd_test_entry,
  5173.         &trace_capture_end,
  5174.         sizeof(trace_capture_end));
  5175.  
  5176.      return 0;
  5177.   }
  5178.  
  5179.  
  5180.  
  5181.   /**************************************************************************/
  5182.   /* callFFST is the FFSTProbe wrapper function. It allows you to code the  */
  5183.   /* FFSTProbe API once with data that is static as far as your usage is    */
  5184.   /* concerned and allows you to pass in dynamic data.   It also helps      */
  5185.   /* insulate your code if you decide to change your 'static' options       */
  5186.   /**************************************************************************/
  5187.  
  5188.   void callFFST ( ULONG input_version,           /* FFST 'Wrapper' Function */
  5189.                   ULONG input_probe_flags,         /* FFSTProbe probe flags */
  5190.                   ULONG input_severity,               /* FFSTProbe severity */
  5191.                   ULONG input_probe_id,                     /* FFSTProbe ID */
  5192.                   CHAR* input_module_name,   /* module name passed to probe */
  5193.                   ULONG input_log_data_length, /* log data length for the
  5194.                                                   system error log          */
  5195.                   PVOID input_pError_log_data,   /* pointer to the data for
  5196.                                                     system error log        */
  5197.                   int   argc)
  5198.   {
  5199.     APIRET  rc = 0;
  5200.     PVOID   pvar_n0;
  5201.     ULONG   pvar_n1;
  5202.  
  5203.     /***********************************************************************/
  5204.     /* FFSTProbe API structures.    Described in the API Guide             */
  5205.     /***********************************************************************/
  5206.     FFSTPARMS     FFSTParms;
  5207.     PRODUCTINFO   productInfo;
  5208.     PRODUCTDATA   productData;
  5209.     DMIDATA       DMIData;
  5210.     DUMPUSERDATA  dumpUserData;
  5211.     MSGINSDATA    msgInsData;
  5212.  
  5213.     /***********************************************************************/
  5214.     /* The PRODUCTDATA structure defines the DMI triplet which allows      */
  5215.     /* additional product information, including template repository       */
  5216.     /* filename, to be retrieved from DMI.   DMI is a industry standard    */
  5217.     /* for desktop mgt                                                     */
  5218.     /***********************************************************************/
  5219.     productData.packet_size            = sizeof ( productData );
  5220.     productData.packet_revision_number = PRODUCTDATA_ASCII;
  5221.                                                /* data can be ASCII or UNI */
  5222.     productData.DMI_tag                = "FFSTProbe Sample";
  5223.                                              /* Customize for your program */
  5224.     productData.DMI_vendor_tag         = "IBM";
  5225.                                               /*Customize for your company */
  5226.     productData.DMI_revision           = "1.00";             /* Customize  */
  5227.  
  5228.     /***********************************************************************/
  5229.     /* The DMIDATA structure below is the information which can either be  */
  5230.     /* retrieved by DMI or passed in by the FFSTProbe function. The        */
  5231.     /* preferred method is to use DMI. In the example below, you can see   */
  5232.     /* the use of either depending on whether or not a parm was passed on  */
  5233.     /* call to this program                                                */
  5234.     /***********************************************************************/
  5235.  
  5236.     if ( !(argc > 1) )
  5237.     {
  5238.        /********************************************************************/
  5239.        /* Setting this structure to NULL indicates that the information is */
  5240.        /* to be retrieved from DMI using the DMI triplet as defined in the */
  5241.        /* productData structure.  This is the preferred method.            */
  5242.        /* Other files in this example show how to build your own DMI       */
  5243.        /********************************************************************/
  5244.        productInfo.pDMIData = NULL;
  5245.  
  5246.        /********************************************************************/
  5247.        /* Note: This shows the usage of message insert text and is NOT part*/
  5248.        /* of the information that could or could not be retrieved from DMI */
  5249.        /* This is included as an example of MsgInsTxt and how it can be    */
  5250.        /* used to send probe specific data to the SYSLOG (System Error Log)*/
  5251.        /********************************************************************/
  5252.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_number = 1;
  5253.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_text   = "We did use a DMI component";
  5254.     }
  5255.     else
  5256.      {
  5257.        /********************************************************************/
  5258.        /* fill the DMI data structure - useful only in test environments   */
  5259.        /********************************************************************/
  5260.        DMIData.packet_size              = sizeof ( DMIData );
  5261.        DMIData.packet_revision_number   = DMIDATA_ASCII;
  5262.                                                /* could be unicode instead */
  5263.        DMIData.DMI_product_ID           = "FFST_toolkt_sample";
  5264.                                         /* note this is different than tag */
  5265.        DMIData.DMI_modification_level   = "000000";
  5266.        DMIData.DMI_fix_level            = "010101";
  5267.        DMIData.template_filename        = "PROBE.REP";
  5268.                                          /* this file must be on the DPATH */
  5269.        DMIData.template_filename_length = strlen (DMIData.template_filename)
  5270.                                                  * sizeof ( char );
  5271.                                               /* since ascii is being used */
  5272.        productInfo.pDMIData             = &DMIData;
  5273.  
  5274.        /********************************************************************/
  5275.        /* Note: This shows the usage of message insert text and is NOT a   */
  5276.        /* of the information that could or could not be retrieved from DMI */
  5277.        /********************************************************************/
  5278.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_number = 1;
  5279.        msgInsData.MsgInsTxt╨¥0Γöÿ.insert_text   = "We did not use a DMI component";
  5280.       }
  5281.  
  5282.      /***********************************************************************/
  5283.      /* set the pointers up for PRODUCTINFO                                 */
  5284.      /***********************************************************************/
  5285.  
  5286.      productInfo.pProductData = &productData;   /* This points to the DMI
  5287.                                                    related data             */
  5288.  
  5289.      /***********************************************************************/
  5290.      /* set up some DUMPUSERDATA items                                      */
  5291.      /***********************************************************************/
  5292.      pvar_n0 = "Dump user data";              /* Anything can be dumped
  5293.                                                  here up to 32 Kbytes       */
  5294.      pvar_n1 = 2;
  5295.      dumpUserData.no_of_variables = 2;
  5296.      dumpUserData.DumpDataVar╨¥0Γöÿ.var_n_length = strlen(pvar_n0) + 1;
  5297.      dumpUserData.DumpDataVar╨¥0Γöÿ.var_n        = pvar_n0;
  5298.      dumpUserData.DumpDataVar╨¥1Γöÿ.var_n_length = sizeof(ULONG);
  5299.      dumpUserData.DumpDataVar╨¥1Γöÿ.var_n        = (PVOID)(&pvar_n1);
  5300.  
  5301.      /***********************************************************************/
  5302.      /* set up a couple of MSGINSDATA messages- just to show it can be done */
  5303.      /***********************************************************************/
  5304.      msgInsData.no_inserts   = 2;
  5305.      msgInsData.MsgInsTxt╨¥1Γöÿ.insert_number = 2;
  5306.      msgInsData.MsgInsTxt╨¥1Γöÿ.insert_text   = "Message insert variable 2";
  5307.  
  5308.      /***********************************************************************/
  5309.      /* set the FFSTPARMS structure, most values from DEFINEs above.        */
  5310.      /* See API GUIDE for details on each field and their possible values   */
  5311.      /***********************************************************************/
  5312.      FFSTParms.packet_size            = sizeof ( FFSTParms );
  5313.      FFSTParms.packet_revision_number = FFSTPARMS_OS2_ASCII;
  5314.                                                     /* ASCII vs UNICODE data */
  5315.      FFSTParms.module_name            = input_module_name;
  5316.      FFSTParms.probe_ID               = input_probe_id;
  5317.      FFSTParms.severity               = input_severity;
  5318.      FFSTParms.template_record_ID     = input_probe_id;
  5319.      FFSTParms.pMsgInsData            = &msgInsData;
  5320.      FFSTParms.probe_flags            = input_probe_flags;
  5321.      FFSTParms.pDumpUserData          = &dumpUserData;
  5322.                                        /* dump data is stored in .DMP files */
  5323.      FFSTParms.log_user_data_length   = input_log_data_length;
  5324.      FFSTParms.log_user_data          = input_pError_log_data;
  5325.                           /* log data is stored as part of the SYSLOG entry */
  5326.  
  5327.      /***********************************************************************/
  5328.      /* Call the FFSProbe API                                               */
  5329.      /***********************************************************************/
  5330.      if ( input_version == 1)
  5331.      {
  5332.         rc = FFSTProbe ( &productInfo, &FFSTParms);
  5333.      }
  5334.  
  5335.      printf("\n----- Fired the FFSTProbe, rc=%d\n",rc);
  5336.                  /* for example only, do not do this in customer level code */
  5337.  
  5338.   }
  5339.  
  5340.   /**************************************************************************/
  5341.   /*  This is the dummy  API for use in the example.  It can easily set     */
  5342.   /*  non-zero rc's                                                         */
  5343.   /**************************************************************************/
  5344.  
  5345.   ULONG My_Dummy_API ( ULONG Mydata )
  5346.   {
  5347.      if ( Mydata != 123456 )
  5348.      {
  5349.         return 1;
  5350.      }
  5351.      else
  5352.      {
  5353.         return 0;
  5354.      }
  5355.   }
  5356.  
  5357.   /**************************************************************************/
  5358.   /*  Trace events function                                                 */
  5359.   /**************************************************************************/
  5360.   APIRET trace_out(ULONG major, ULONG minor, void *trace_data, ULONG data_len)
  5361.   {
  5362.     TCEREQUEST packet;
  5363.     APIRET      rc;
  5364.  
  5365.     packet.packet_size = sizeof packet;      /* Size of packet in bytes       */
  5366.     packet.packet_revision_number = TRACE_RELEASE; /* Revision level of trace */
  5367.     packet.major_event_code = major;         /* Major code event to be logged */
  5368.     packet.minor_event_code = minor;         /* Minor code event to be logged */
  5369.     packet.event_data_length = data_len;     /* Length of callers event buffer*/
  5370.     packet.event_data = trace_data;          /* Pointer to callers buffer     */
  5371.  
  5372.     /* call the TraceCreateEntry function */
  5373.     rc = TraceCreateEntry(&packet);
  5374.     return rc;
  5375.   }
  5376.  
  5377.  
  5378. ΓòÉΓòÉΓòÉ <hidden> FFSTProbe - Topics ΓòÉΓòÉΓòÉ
  5379.  
  5380. Select an item: 
  5381.  
  5382. Syntax
  5383. Parameters
  5384. Returns
  5385. Remarks
  5386. Example Code
  5387.  
  5388.  
  5389. ΓòÉΓòÉΓòÉ 10.1.2. FFSTQueryConfiguration ΓòÉΓòÉΓòÉ
  5390.  
  5391.  
  5392. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Syntax ΓòÉΓòÉΓòÉ
  5393.  
  5394. FFSTQueryConfiguration queries the FFST configuration parameters. 
  5395.  
  5396.  
  5397. #define INCL_FFST
  5398. #include <os2.h>
  5399.  
  5400. PULONG          buffer_length;
  5401. PCONFIGPARMS    pConfigParms;
  5402. APIRET          rc;             /*  Return code. */
  5403.  
  5404. rc = FFSTQueryConfiguration(buffer_length,
  5405.        pConfigParms);
  5406.  
  5407.  
  5408. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration Parameter - buffer_length ΓòÉΓòÉΓòÉ
  5409.  
  5410.  buffer_length (PULONG) - in/out 
  5411.     Length (in bytes) of the buffer. 
  5412.  
  5413.         On input, buffer_length contains the length of the provided buffer. 
  5414.  
  5415.         On output, buffer_length contains the total number of bytes that were 
  5416.          placed in the buffer. If your buffer is too small, then buffer_length 
  5417.          will be set to the required size, and no data will be written to the 
  5418.          buffer. 
  5419.  
  5420.  
  5421. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration Parameter - pConfigParms ΓòÉΓòÉΓòÉ
  5422.  
  5423.  pConfigParms (PCONFIGPARMS) - input 
  5424.     Pointer to the buffer where the FFST configuration parameters will be 
  5425.     written. 
  5426.  
  5427.  
  5428. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration Return Value - rc ΓòÉΓòÉΓòÉ
  5429.  
  5430.  rc (APIRET) - returns 
  5431.     Return code. 
  5432.  
  5433.     FFSTQueryConfiguration returns the following values: 
  5434.  
  5435.         From FFSTQueryConfiguration to application 
  5436.  
  5437.                    1000195      Invalid config user buffer size address
  5438.                    1000200      Invalid config address
  5439.                    1000205      Invalid config revision number
  5440.                    1000210      Invalid config packet size
  5441.                    1000215      Invalid config dump file wrap
  5442.                    1000220      Invalid config dump file directory size
  5443.                    1000225      Invalid config keep dup dump
  5444.                    1000230      Invalid config dump file directory name address
  5445.                    1000235      Invalid config dump file directory name length
  5446.                    1000240      Invalid config no disabled products
  5447.                    1000245      Invalid config disabled products address
  5448.                    1000250      Invalid config vendor tag address
  5449.                    1000255      Invalid config tag address
  5450.                    1000260      Invalid config revision address
  5451.                    1000265      Invalid config message popup
  5452.  
  5453.         Return codes for file errors during Configuration processing 
  5454.  
  5455.                    0x16570      Config file open error
  5456.                    0x16571      Config file search error
  5457.                    0x16572      Config file write error
  5458.  
  5459.         Return code for an insufficient buffer passed to Configuration 
  5460.  
  5461.                    0x1657A      Config insufficient buffer
  5462.  
  5463.         Return code for invalid dump file directory driver passed to 
  5464.          FFSTSetConfiguration. 
  5465.  
  5466.                    0x1657B      Invalid config dump file dir drive
  5467.  
  5468.         Return codes for an invalid drive or path passed to 
  5469.          FFSTSetConfiguration. 
  5470.  
  5471.                    0x1657C      Invalid drive requested
  5472.                    0x1657D      Invalid path requested
  5473.           /*-----------------------------------------------------*/ /* Return 
  5474.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  5475.          FFSTSetConfiguration  or other FFST processing.   */ 
  5476.          /*-----------------------------------------------------*/ 
  5477.         Return codes for shared memory errors 
  5478.  
  5479.                    0x16580       Get shared mem error
  5480.                    0x16581       Alloc shared mem error
  5481.                    0x16582       Free shared mem error
  5482.  
  5483.         Return codes for semaphore errors 
  5484.  
  5485.                    0x1658A       Semaphore timeout error
  5486.                    0x1658B       Semaphore open error
  5487.                    0x1658C       Semaphore release error
  5488.                    0x1658D       Semaphore close error
  5489.                    0x1658E       Semaphore request error
  5490.                    0x17111       Semaphore g error
  5491.  
  5492.         Return codes for dump engine processing which may be posted to the 
  5493.          SysLog. 
  5494.  
  5495.                    0x16595       Dump hdr file open error
  5496.                    0x16596       Index file open error
  5497.                    0x16597       Dump file open error
  5498.                    0x16598       Memory allocation error
  5499.                    0x16599       Queryfs error
  5500.                    0x1659A       Dump wrap error
  5501.                    0x1659B       Trace rename error
  5502.                    0x17222       Proc dump rename error
  5503.  
  5504.         Return codes that may be in the SysLog during Worker bringup 
  5505.  
  5506.                    0x165A1       Create config semaphore error
  5507.                    0x165A2       Create dump semaphore error
  5508.                    0x165A3       Worker alloc shared mem error
  5509.                    0x165A4       Worker get shared mem error
  5510.                    0x165A5       Create pct semaphore error
  5511.                    0x165A6       File already exists
  5512.                    0x165A7       Specified file not found
  5513.                    0x165A8       Dump validation error
  5514.                    0x165A9       Config memory filled
  5515.  
  5516.                    0x165AA       Worker setconfig error
  5517.                    0x165AB       Worker pipe not created
  5518.                    0x17005       Worker FFST config not okay
  5519.                    0x165AC       Worker mutexsem not released
  5520.                    0x17010       Worker already active
  5521.                    0x17015       Worker initworker failed
  5522.                    0x17050       Worker not active
  5523.  
  5524.  
  5525. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Parameters ΓòÉΓòÉΓòÉ
  5526.  
  5527.  buffer_length (PULONG) - in/out 
  5528.     Length (in bytes) of the buffer. 
  5529.  
  5530.         On input, buffer_length contains the length of the provided buffer. 
  5531.  
  5532.         On output, buffer_length contains the total number of bytes that were 
  5533.          placed in the buffer. If your buffer is too small, then buffer_length 
  5534.          will be set to the required size, and no data will be written to the 
  5535.          buffer. 
  5536.  
  5537.  pConfigParms (PCONFIGPARMS) - input 
  5538.     Pointer to the buffer where the FFST configuration parameters will be 
  5539.     written. 
  5540.  
  5541.  rc (APIRET) - returns 
  5542.     Return code. 
  5543.  
  5544.     FFSTQueryConfiguration returns the following values: 
  5545.  
  5546.         From FFSTQueryConfiguration to application 
  5547.  
  5548.                    1000195      Invalid config user buffer size address
  5549.                    1000200      Invalid config address
  5550.                    1000205      Invalid config revision number
  5551.                    1000210      Invalid config packet size
  5552.                    1000215      Invalid config dump file wrap
  5553.                    1000220      Invalid config dump file directory size
  5554.                    1000225      Invalid config keep dup dump
  5555.                    1000230      Invalid config dump file directory name address
  5556.                    1000235      Invalid config dump file directory name length
  5557.                    1000240      Invalid config no disabled products
  5558.                    1000245      Invalid config disabled products address
  5559.                    1000250      Invalid config vendor tag address
  5560.                    1000255      Invalid config tag address
  5561.                    1000260      Invalid config revision address
  5562.                    1000265      Invalid config message popup
  5563.  
  5564.         Return codes for file errors during Configuration processing 
  5565.  
  5566.                    0x16570      Config file open error
  5567.                    0x16571      Config file search error
  5568.                    0x16572      Config file write error
  5569.  
  5570.         Return code for an insufficient buffer passed to Configuration 
  5571.  
  5572.                    0x1657A      Config insufficient buffer
  5573.  
  5574.         Return code for invalid dump file directory driver passed to 
  5575.          FFSTSetConfiguration. 
  5576.  
  5577.                    0x1657B      Invalid config dump file dir drive
  5578.  
  5579.         Return codes for an invalid drive or path passed to 
  5580.          FFSTSetConfiguration. 
  5581.  
  5582.                    0x1657C      Invalid drive requested
  5583.                    0x1657D      Invalid path requested
  5584.           /*-----------------------------------------------------*/ /* Return 
  5585.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  5586.          FFSTSetConfiguration  or other FFST processing.   */ 
  5587.          /*-----------------------------------------------------*/ 
  5588.         Return codes for shared memory errors 
  5589.  
  5590.                    0x16580       Get shared mem error
  5591.                    0x16581       Alloc shared mem error
  5592.                    0x16582       Free shared mem error
  5593.  
  5594.         Return codes for semaphore errors 
  5595.  
  5596.                    0x1658A       Semaphore timeout error
  5597.                    0x1658B       Semaphore open error
  5598.                    0x1658C       Semaphore release error
  5599.                    0x1658D       Semaphore close error
  5600.                    0x1658E       Semaphore request error
  5601.                    0x17111       Semaphore g error
  5602.  
  5603.         Return codes for dump engine processing which may be posted to the 
  5604.          SysLog. 
  5605.  
  5606.                    0x16595       Dump hdr file open error
  5607.                    0x16596       Index file open error
  5608.                    0x16597       Dump file open error
  5609.                    0x16598       Memory allocation error
  5610.                    0x16599       Queryfs error
  5611.                    0x1659A       Dump wrap error
  5612.                    0x1659B       Trace rename error
  5613.                    0x17222       Proc dump rename error
  5614.  
  5615.         Return codes that may be in the SysLog during Worker bringup 
  5616.  
  5617.                    0x165A1       Create config semaphore error
  5618.                    0x165A2       Create dump semaphore error
  5619.                    0x165A3       Worker alloc shared mem error
  5620.                    0x165A4       Worker get shared mem error
  5621.                    0x165A5       Create pct semaphore error
  5622.                    0x165A6       File already exists
  5623.                    0x165A7       Specified file not found
  5624.                    0x165A8       Dump validation error
  5625.                    0x165A9       Config memory filled
  5626.  
  5627.                    0x165AA       Worker setconfig error
  5628.                    0x165AB       Worker pipe not created
  5629.                    0x17005       Worker FFST config not okay
  5630.                    0x165AC       Worker mutexsem not released
  5631.                    0x17010       Worker already active
  5632.                    0x17015       Worker initworker failed
  5633.                    0x17050       Worker not active
  5634.  
  5635.  
  5636. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Remarks ΓòÉΓòÉΓòÉ
  5637.  
  5638. The library FFST.LIB must be linked with object files that use 
  5639. FFSTQueryConfiguration 
  5640.  
  5641. The packet_revision_number parameter defines if pointers point to ASCII or 
  5642. UniCode character data. 
  5643.  
  5644.  
  5645. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Related Functions ΓòÉΓòÉΓòÉ
  5646.  
  5647.      FFSTSetConfiguration 
  5648.  
  5649.  
  5650. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Example Code ΓòÉΓòÉΓòÉ
  5651.  
  5652. The following example will query for FFST configuration. FFST configuration 
  5653. values are returned in the buffer. You can access individual parameters by 
  5654. using the CONFIGPARMS structure. 
  5655.  
  5656.   #define INCL_FFST
  5657.   #include <unichar.h>
  5658.   #include <os2.h>
  5659.   APIRET rc;
  5660.   ULONG buffer_length;
  5661.   UniChar config_buffer╨½300!;
  5662.  
  5663.   CONFIGPARMS  FFSTConfig;
  5664.   PCONFIGPARMS  pFFSTConfig  *FFSTConfig;
  5665.  
  5666.   buffer_length = 300;
  5667.   rc = FFSTQueryConfiguration (  &buffer_length, &config_buffer );
  5668.   if (rc |= 0)                                    /* If Problem      */
  5669.           {                                       /* reason          */
  5670.           printf("FFSTConfigure error: return code = %d",rc);
  5671.           return;
  5672.           }
  5673.  
  5674.  
  5675. ΓòÉΓòÉΓòÉ <hidden> FFSTQueryConfiguration - Topics ΓòÉΓòÉΓòÉ
  5676.  
  5677. Select an item: 
  5678.  
  5679. Syntax
  5680. Parameters
  5681. Returns
  5682. Remarks
  5683. Example Code
  5684. Related Functions
  5685.  
  5686.  
  5687. ΓòÉΓòÉΓòÉ 10.1.3. FFSTSetConfiguration ΓòÉΓòÉΓòÉ
  5688.  
  5689.  
  5690. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Syntax ΓòÉΓòÉΓòÉ
  5691.  
  5692. FFSTSetConfiguration sets the FFST configuration parameters. 
  5693.  
  5694. You should use FFSTQueryConfiguration to obtain the current settings before 
  5695. using this function. This allows you to change the desired parameters without 
  5696. affecting others. 
  5697.  
  5698.  
  5699. #define INCL_FFST
  5700. #include <os2.h>
  5701.  
  5702. PCONFIGPARMS    pConfigParms;
  5703. APIRET          rc;            /*  Return code. */
  5704.  
  5705. rc = FFSTSetConfiguration(pConfigParms);
  5706.  
  5707.  
  5708. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration Parameter - pConfigParms ΓòÉΓòÉΓòÉ
  5709.  
  5710.  pConfigParms (PCONFIGPARMS) - input 
  5711.     Pointer to FFST configuration parameters. 
  5712.  
  5713.  
  5714. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration Return Value - rc ΓòÉΓòÉΓòÉ
  5715.  
  5716.  rc (APIRET) - returns 
  5717.     Return code. 
  5718.  
  5719.     FFSTSetConfiguration returns the following values: 
  5720.  
  5721.         From FFSTSetConfiguration to application 
  5722.  
  5723.                    1000195      Invalid config user buffer size address
  5724.                    1000200      Invalid config address
  5725.                    1000205      Invalid config revision number
  5726.                    1000210      Invalid config packet size
  5727.                    1000215      Invalid config dump file wrap
  5728.                    1000220      Invalid config dump file directory size
  5729.                    1000225      Invalid config keep dup dump
  5730.                    1000230      Invalid config dump file directory name address
  5731.                    1000235      Invalid config dump file directory name length
  5732.                    1000240      Invalid config no disabled products
  5733.                    1000245      Invalid config disabled products address
  5734.                    1000250      Invalid config vendor tag address
  5735.                    1000255      Invalid config tag address
  5736.                    1000260      Invalid config revision address
  5737.                    1000265      Invalid config message popup
  5738.  
  5739.         Return codes for file errors during Configuration processing 
  5740.  
  5741.                    0x16570      Config file open error
  5742.                    0x16571      Config file search error
  5743.                    0x16572      Config file write error
  5744.  
  5745.         Return code for an insufficient buffer passed to Configuration 
  5746.  
  5747.                    0x1657A      Config insufficient buffer
  5748.  
  5749.         Return code for invalid dump file directory driver passed to 
  5750.          FFSTSetConfiguration. 
  5751.  
  5752.                    0x1657B      Invalid config dump file dir drive
  5753.  
  5754.         Return codes for an invalid drive or path passed to 
  5755.          FFSTSetConfiguration. 
  5756.  
  5757.                    0x1657C      Invalid drive requested
  5758.                    0x1657D      Invalid path requested
  5759.           /*-----------------------------------------------------*/ /* Return 
  5760.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  5761.          FFSTSetConfiguration  or other FFST processing.   */ 
  5762.          /*-----------------------------------------------------*/ 
  5763.         Return codes for shared memory errors 
  5764.  
  5765.                    0x16580       Get shared mem error
  5766.                    0x16581       Alloc shared mem error
  5767.                    0x16582       Free shared mem error
  5768.  
  5769.         Return codes for semaphore errors 
  5770.  
  5771.                    0x1658A       Semaphore timeout error
  5772.                    0x1658B       Semaphore open error
  5773.                    0x1658C       Semaphore release error
  5774.                    0x1658D       Semaphore close error
  5775.                    0x1658E       Semaphore request error
  5776.                    0x17111       Semaphore g error
  5777.  
  5778.         Return codes for dump engine processing which may be posted to the 
  5779.          SysLog. 
  5780.  
  5781.                    0x16595       Dump hdr file open error
  5782.                    0x16596       Index file open error
  5783.                    0x16597       Dump file open error
  5784.                    0x16598       Memory allocation error
  5785.                    0x16599       Queryfs error
  5786.                    0x1659a       Dump wrap error
  5787.                    0x1659b       Trace rename error
  5788.                    0x17222       Proc dump rename error
  5789.  
  5790.         Return codes that may be in the SysLog during Worker bringup 
  5791.  
  5792.                    0x165a1       Create config semaphore error
  5793.                    0x165a2       Create dump semaphore error
  5794.                    0x165a3       Worker alloc shared mem error
  5795.                    0x165a4       Worker get shared mem error
  5796.                    0x165a5       Create pct semaphore error
  5797.                    0x165a6       File already exists
  5798.                    0x165a7       Specified file not found
  5799.                    0x165a8       Dump validation error
  5800.                    0x165a9       Config memory filled
  5801.  
  5802.                    0x165aa       Worker setconfig error
  5803.                    0x165ab       Worker pipe not created
  5804.                    0x17005       Worker ffst config not okay
  5805.                    0x165ac       Worker mutexsem not released
  5806.                    0x17010       Worker already active
  5807.                    0x17015       Worker initworker failed
  5808.                    0x17050       Worker not active
  5809.  
  5810.  
  5811. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Parameters ΓòÉΓòÉΓòÉ
  5812.  
  5813.  pConfigParms (PCONFIGPARMS) - input 
  5814.     Pointer to FFST configuration parameters. 
  5815.  
  5816.  rc (APIRET) - returns 
  5817.     Return code. 
  5818.  
  5819.     FFSTSetConfiguration returns the following values: 
  5820.  
  5821.         From FFSTSetConfiguration to application 
  5822.  
  5823.                    1000195      Invalid config user buffer size address
  5824.                    1000200      Invalid config address
  5825.                    1000205      Invalid config revision number
  5826.                    1000210      Invalid config packet size
  5827.                    1000215      Invalid config dump file wrap
  5828.                    1000220      Invalid config dump file directory size
  5829.                    1000225      Invalid config keep dup dump
  5830.                    1000230      Invalid config dump file directory name address
  5831.                    1000235      Invalid config dump file directory name length
  5832.                    1000240      Invalid config no disabled products
  5833.                    1000245      Invalid config disabled products address
  5834.                    1000250      Invalid config vendor tag address
  5835.                    1000255      Invalid config tag address
  5836.                    1000260      Invalid config revision address
  5837.                    1000265      Invalid config message popup
  5838.  
  5839.         Return codes for file errors during Configuration processing 
  5840.  
  5841.                    0x16570      Config file open error
  5842.                    0x16571      Config file search error
  5843.                    0x16572      Config file write error
  5844.  
  5845.         Return code for an insufficient buffer passed to Configuration 
  5846.  
  5847.                    0x1657A      Config insufficient buffer
  5848.  
  5849.         Return code for invalid dump file directory driver passed to 
  5850.          FFSTSetConfiguration. 
  5851.  
  5852.                    0x1657B      Invalid config dump file dir drive
  5853.  
  5854.         Return codes for an invalid drive or path passed to 
  5855.          FFSTSetConfiguration. 
  5856.  
  5857.                    0x1657C      Invalid drive requested
  5858.                    0x1657D      Invalid path requested
  5859.           /*-----------------------------------------------------*/ /* Return 
  5860.          codes from FFSTProbe, FFSTQueryConfiguration,*/ /* 
  5861.          FFSTSetConfiguration  or other FFST processing.   */ 
  5862.          /*-----------------------------------------------------*/ 
  5863.         Return codes for shared memory errors 
  5864.  
  5865.                    0x16580       Get shared mem error
  5866.                    0x16581       Alloc shared mem error
  5867.                    0x16582       Free shared mem error
  5868.  
  5869.         Return codes for semaphore errors 
  5870.  
  5871.                    0x1658A       Semaphore timeout error
  5872.                    0x1658B       Semaphore open error
  5873.                    0x1658C       Semaphore release error
  5874.                    0x1658D       Semaphore close error
  5875.                    0x1658E       Semaphore request error
  5876.                    0x17111       Semaphore g error
  5877.  
  5878.         Return codes for dump engine processing which may be posted to the 
  5879.          SysLog. 
  5880.  
  5881.                    0x16595       Dump hdr file open error
  5882.                    0x16596       Index file open error
  5883.                    0x16597       Dump file open error
  5884.                    0x16598       Memory allocation error
  5885.                    0x16599       Queryfs error
  5886.                    0x1659a       Dump wrap error
  5887.                    0x1659b       Trace rename error
  5888.                    0x17222       Proc dump rename error
  5889.  
  5890.         Return codes that may be in the SysLog during Worker bringup 
  5891.  
  5892.                    0x165a1       Create config semaphore error
  5893.                    0x165a2       Create dump semaphore error
  5894.                    0x165a3       Worker alloc shared mem error
  5895.                    0x165a4       Worker get shared mem error
  5896.                    0x165a5       Create pct semaphore error
  5897.                    0x165a6       File already exists
  5898.                    0x165a7       Specified file not found
  5899.                    0x165a8       Dump validation error
  5900.                    0x165a9       Config memory filled
  5901.  
  5902.                    0x165aa       Worker setconfig error
  5903.                    0x165ab       Worker pipe not created
  5904.                    0x17005       Worker ffst config not okay
  5905.                    0x165ac       Worker mutexsem not released
  5906.                    0x17010       Worker already active
  5907.                    0x17015       Worker initworker failed
  5908.                    0x17050       Worker not active
  5909.  
  5910.  
  5911. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Remarks ΓòÉΓòÉΓòÉ
  5912.  
  5913. The library FFST.LIB must be linked with object files that use 
  5914. FFSTSetConfiguration 
  5915.  
  5916. The packet_revision_number parameter defines if pointers point to ASCII or 
  5917. UniCode character data. 
  5918.  
  5919.  
  5920. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Related Functions ΓòÉΓòÉΓòÉ
  5921.  
  5922.      FFSTQueryConfiguration 
  5923.  
  5924.  
  5925. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Example Code ΓòÉΓòÉΓòÉ
  5926.  
  5927. The following example will instruct FFST to stop wrapping dumps. The rest of 
  5928. the parameters are left to their earlier values. 
  5929.  
  5930.   #define INCL_FFST
  5931.   #include <unichar.h>
  5932.   #include <os2.h>
  5933.   APIRET rc;
  5934.  
  5935.   CONFIGPARMS  FFSTConfig;
  5936.   PCONFIGPARMS  pFFSTConfig  *FFSTConfig;
  5937.  
  5938.   FFSTConfig.dump_file_wrap = FFST_DUMP_WRAP_OFF; /* Set dump wrap to off*/
  5939.   /* set rest of the parameters to indicate no change */
  5940.  
  5941.   FFSTConfig.dump_file_directory_size = FFST_DUMP_FILE_DIRECTORY_SIZE_NO_CHANGE;
  5942.   FFSTConfig.keep_dup_dump = FFST_KEEP_DUP_DUMP_NO_CHANGE;
  5943.   FFSTConfig.dump_file_directory_length = FFST_DUMP_FILE_DIERCTORY_LENGTH_NO_CHANGE;
  5944.   FFSTConfig.no_of_disabled_products = FFST_NO_OF_PROBE_DISABLED_PRODUCTS_NO_CHANGE;
  5945.   FFSTConfig.dump_file_directory = NULL;
  5946.   FFSTConfig.PProductData = NULL;
  5947.  
  5948.   rc = FFSTSetConfiguration(  pFFSTConfig);
  5949.   if (rc |= 0)                                       /* If Problem   */
  5950.              {                                       /* reason       */
  5951.              printf("FFSTConfigure error: return code = %d",rc);
  5952.              return;
  5953.              }
  5954.  
  5955.  
  5956. ΓòÉΓòÉΓòÉ <hidden> FFSTSetConfiguration - Topics ΓòÉΓòÉΓòÉ
  5957.  
  5958. Select an item: 
  5959.  
  5960. Syntax
  5961. Parameters
  5962. Returns
  5963. Remarks
  5964. Example Code
  5965. Related Functions
  5966.  
  5967.  
  5968. ΓòÉΓòÉΓòÉ 10.1.4. LogChangeEventFilter ΓòÉΓòÉΓòÉ
  5969.  
  5970.  
  5971. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Syntax ΓòÉΓòÉΓòÉ
  5972.  
  5973. LogChangeEventFilter is used to alter the filter that is associated with an 
  5974. event-notification request.  In addition to changing the filter, you can 
  5975. specify current entries that are to be purged before the filter change takes 
  5976. effect. 
  5977.  
  5978.  
  5979. #define INCL_LOGGING
  5980. #include <os2.h>
  5981. #include <lfdef.h>
  5982.  
  5983. ULONG     service;
  5984. PVOID     pChangeEventFilter;
  5985. APIRET    rc;
  5986.  
  5987. rc = LogChangeEventFilter(service, pChangeEventFilter);
  5988.  
  5989.  
  5990. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter Parameter - service ΓòÉΓòÉΓòÉ
  5991.  
  5992.  service (ULONG) - input 
  5993.     The class of Logging Service: 
  5994.  
  5995.     1         Error logging 
  5996.  
  5997.               All other values are reserved for future use. 
  5998.  
  5999.  
  6000. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter Parameter - pChangeEventFilter ΓòÉΓòÉΓòÉ
  6001.  
  6002.  pChangeEventFilter (PVOID) - in/out 
  6003.     A pointer to the LogChangeEventFilter parameter packet. 
  6004.  
  6005.     For Error Logging, this is a pointer to a LCEFREQUEST structure. 
  6006.  
  6007.  
  6008. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter Return Value - rc ΓòÉΓòÉΓòÉ
  6009.  
  6010.  rc (APIRET) - returns 
  6011.     Return code. 
  6012.  
  6013.     LogChangeEventFilter returns the following values: 
  6014.  
  6015.          0    No error 
  6016.         523    Error lf invalid service 
  6017.         1703    Invalid data pointer 
  6018.         1702    Invalid LF packet revision number 
  6019.         1706    RAS invalid parm packet ptr 
  6020.         1751    Invalid LF flag 
  6021.         1758    RAS invalid log notify id 
  6022.         1761    RAS invalid packet size 
  6023.         2503    RAS notif entry not found 
  6024.         2504    RAS notif entry deleted 
  6025.         2505    RAS entry filter unchanged 
  6026.  
  6027.  
  6028. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Parameters ΓòÉΓòÉΓòÉ
  6029.  
  6030.  service (ULONG) - input 
  6031.     The class of Logging Service: 
  6032.  
  6033.     1         Error logging 
  6034.  
  6035.               All other values are reserved for future use. 
  6036.  
  6037.  pChangeEventFilter (PVOID) - input/output 
  6038.     A pointer to the LogChangeEventFilter parameter packet. 
  6039.  
  6040.     For Error Logging, this is a pointer to a LCEFREQUEST structure. 
  6041.  
  6042.  rc (APIRET) - returns 
  6043.     Return code. 
  6044.  
  6045.     LogChangeEventFilter returns the following values: 
  6046.  
  6047.          0    No error 
  6048.         523    Error lf invalid service 
  6049.         1703    Invalid data pointer 
  6050.         1702    Invalid LF packet revision number 
  6051.         1706    RAS invalid parm packet ptr 
  6052.         1751    Invalid LF flag 
  6053.         1758    RAS invalid log notify id 
  6054.         1761    RAS invalid packet size 
  6055.         2503    RAS notif entry not found 
  6056.         2504    RAS notif entry deleted 
  6057.         2505    RAS entry filter unchanged 
  6058.  
  6059.  
  6060. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Remarks ΓòÉΓòÉΓòÉ
  6061.  
  6062. The library LFAPI.LIB must be linked with object files that use 
  6063. LogChangeEventFilter 
  6064.  
  6065.  
  6066. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Related Functions ΓòÉΓòÉΓòÉ
  6067.  
  6068.      LogOpenEventNotification 
  6069.      LogCloseEventNotification 
  6070.      LogWaitEvent 
  6071.      LogReadEntry 
  6072.  
  6073.  
  6074. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Example Code ΓòÉΓòÉΓòÉ
  6075.  
  6076. The following example changes the event-notification filter for an event 
  6077. notification to a NULL filter (that is, any Error Log entry that is logged will 
  6078. cause an event notification to be sent). The sample will also purge any event 
  6079. notifications that might be pending at the time the LogChangeEventFilter call 
  6080. is made. 
  6081.  
  6082.   #define INCL_LOGGING
  6083.   #include <unidef.h>
  6084.   #include <os2.h>
  6085.   #include <stdio.h>
  6086.   #include <lfdef.h>
  6087.  
  6088.   {
  6089.   APIRET rc;                                      /* return code */
  6090.   ULONG service;
  6091.   LCEFREQUEST change_event_filter_packet;
  6092.   HLOGNOTIFY log_notify;
  6093.  
  6094.   service =  ERROR_LOGGING_SERVICE;
  6095.  
  6096.   /* Construct the LogChangeEventFilter parameter packet */
  6097.   change_event_filter_packet.packet_size = sizeof(LCEFREQUEST);
  6098.   change_event_filter_packet.packet_revision_number = LF_UNI_API;
  6099.   change_event_filter_packet.purge_flags = PURGE_EVENT_NOTIFICATION;
  6100.   change_event_filter_packet.LogNotify = log_notify;
  6101.   change_event_filter_packet.pFilter = NULL;
  6102.  
  6103.   rc = LogChangeEventFilter(service,              /* service */
  6104.                  &change_event_filter_packet) /* parameter packet*/
  6105.   if (rc |= 0)
  6106.      {
  6107.       printf("LogChangeEventFilter error: return code = %d",rc);
  6108.       return;
  6109.      }
  6110.  
  6111.  
  6112. ΓòÉΓòÉΓòÉ <hidden> LogChangeEventFilter - Topics ΓòÉΓòÉΓòÉ
  6113.  
  6114. Select an item: 
  6115.  
  6116. Syntax
  6117. Parameters
  6118. Returns
  6119. Remarks
  6120. Example Code
  6121. Related Functions
  6122.  
  6123.  
  6124. ΓòÉΓòÉΓòÉ 10.1.5. LogCloseEventNotification ΓòÉΓòÉΓòÉ
  6125.  
  6126.  
  6127. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Syntax ΓòÉΓòÉΓòÉ
  6128.  
  6129. LogCloseEventNotification closes event-notification requests. 
  6130.  
  6131.  
  6132. #define INCL_LOGGING
  6133. #include <os2.h>
  6134. #include <lfdef.h>
  6135.  
  6136. ULONG     service;
  6137. PVOID     pCloseEventNotification;
  6138. APIRET    rc;
  6139.  
  6140. rc = LogCloseEventNotification(service, pCloseEventNotification);
  6141.  
  6142.  
  6143. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification Parameter - service ΓòÉΓòÉΓòÉ
  6144.  
  6145.  service (ULONG) - input 
  6146.     The class of Logging Service: 
  6147.  
  6148.     1         Error logging 
  6149.  
  6150.               All other values are reserved for future use. 
  6151.  
  6152.  
  6153. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification Parameter - pCloseEventNotification ΓòÉΓòÉΓòÉ
  6154.  
  6155.  pCloseEventNotification (PVOID) - in/out 
  6156.     A pointer to the LogCloseEventNotification parameter packet. 
  6157.  
  6158.     For Error Logging, this is a pointer to a LCENREQUEST structure. 
  6159.  
  6160.  
  6161. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification Return Value - rc ΓòÉΓòÉΓòÉ
  6162.  
  6163.  rc (APIRET) - returns 
  6164.     Return code. 
  6165.  
  6166.     LogCloseEventNotification returns the following values: 
  6167.  
  6168.          0    No error 
  6169.         523    Error lf invalid service 
  6170.         1703    Invalid data pointer 
  6171.         1702    Invalid LF packet revision number 
  6172.         1706    RAS invalid parm packet ptr 
  6173.         1758    RAS invalid log notify id 
  6174.         1761    RAS invalid packet size 
  6175.         2502    RAS internal memory failure 
  6176.         2503    RAS notif entry not found 
  6177.  
  6178.  
  6179. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Parameters ΓòÉΓòÉΓòÉ
  6180.  
  6181.  service (ULONG) - input 
  6182.     The class of Logging Service: 
  6183.  
  6184.     1         Error logging 
  6185.  
  6186.               All other values are reserved for future use. 
  6187.  
  6188.  pCloseEventNotification (PVOID) - in/out 
  6189.     A pointer to the LogCloseEventNotification parameter packet. 
  6190.  
  6191.     For Error Logging, this is a pointer to a LCENREQUEST structure. 
  6192.  
  6193.  rc (APIRET) - returns 
  6194.     Return code. 
  6195.  
  6196.     LogCloseEventNotification returns the following values: 
  6197.  
  6198.          0    No error 
  6199.         523    Error lf invalid service 
  6200.         1703    Invalid data pointer 
  6201.         1702    Invalid LF packet revision number 
  6202.         1706    RAS invalid parm packet ptr 
  6203.         1758    RAS invalid log notify id 
  6204.         1761    RAS invalid packet size 
  6205.         2502    RAS internal memory failure 
  6206.         2503    RAS notify entry not found 
  6207.  
  6208.  
  6209. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Remarks ΓòÉΓòÉΓòÉ
  6210.  
  6211. The library LFAPI.LIB must be linked with object files that use 
  6212. LogCloseEventNotification 
  6213.  
  6214.  
  6215. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Related Functions ΓòÉΓòÉΓòÉ
  6216.  
  6217.      LogOpenEventNotification 
  6218.      LogChangeEventFilter 
  6219.      LogWaitEvent 
  6220.      LogReadEntry 
  6221.  
  6222.  
  6223. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Example Code ΓòÉΓòÉΓòÉ
  6224.  
  6225. The following example closes an event-notification mechanism that is connected 
  6226. to the Error Logging service. 
  6227.  
  6228.   #define INCL_LOGGING
  6229.   #include <unidef.h>
  6230.   #include <os2.h>
  6231.   #include <stdio.h>
  6232.   #include <lfdef.h>
  6233.  
  6234.   {
  6235.    APIRET rc;                           /* return code */
  6236.    ULONG service;
  6237.    LCENREQUEST close_event_packet;
  6238.    HLOGNOTIFY       log_notify;
  6239.  
  6240.    service =       ERROR_LOGGING_SERVICE;
  6241.  
  6242.    /* Construct the LogChangeEventFilter parameter packet  */
  6243.    close_event_packet.packet_size = sizeof(LCENREQUEST);
  6244.    close_event_packet.packet_revision_number = LF_UNI_API;
  6245.    close_event_packet.LogNotify = log_notify;
  6246.    rc = LogCloseEventNotification(service,        /* service */
  6247.                  &close_event_packet)        /* parameter packet */
  6248.    if (rc |= 0)
  6249.       {
  6250.        printf("LogCloseEventNotification error: return code = %d",rc);
  6251.        return;
  6252.       }
  6253.  
  6254.  
  6255. ΓòÉΓòÉΓòÉ <hidden> LogCloseEventNotification - Topics ΓòÉΓòÉΓòÉ
  6256.  
  6257. Select an item: 
  6258.  
  6259. Syntax
  6260. Parameters
  6261. Returns
  6262. Remarks
  6263. Example Code
  6264. Related Functions
  6265.  
  6266.  
  6267. ΓòÉΓòÉΓòÉ 10.1.6. LogCloseFile ΓòÉΓòÉΓòÉ
  6268.  
  6269.  
  6270. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Syntax ΓòÉΓòÉΓòÉ
  6271.  
  6272. LogCloseFile closes a file that was previously opened by LogOpenFile. 
  6273.  
  6274.  
  6275. #define INCL_LOGGING
  6276. #include <os2.h>
  6277. #include <lfdef.h>
  6278.  
  6279. ULONG     service;
  6280. PVOID     pCloseFile;
  6281. APIRET    rc;
  6282.  
  6283. rc = LogCloseFile(service, pCloseFile);
  6284.  
  6285.  
  6286. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile Parameter - service ΓòÉΓòÉΓòÉ
  6287.  
  6288.  service (ULONG) - input 
  6289.     The class of Logging Service: 
  6290.  
  6291.     1         Error logging 
  6292.  
  6293.               All other values are reserved for future use. 
  6294.  
  6295.  
  6296. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile Parameter - pCloseFile ΓòÉΓòÉΓòÉ
  6297.  
  6298.  pCloseFile (PVOID) - input 
  6299.     A pointer to the LogCloseFile parameter packet. 
  6300.  
  6301.     For Error Logging, this is a pointer to a LCFREQUEST structure. 
  6302.  
  6303.  
  6304. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile Return Value - rc ΓòÉΓòÉΓòÉ
  6305.  
  6306.  rc (APIRET) - returns 
  6307.     Return code. 
  6308.  
  6309.     LogCloseFile returns one of the following values: 
  6310.  
  6311.          0    No error 
  6312.         520    Error LF buf too small 
  6313.          5    Error access denied 
  6314.         523    Error LF invalid service 
  6315.         1703    Invalid data pointer 
  6316.         1701    Invalid LF log file id 
  6317.         1702    Invalid LF packet revision number 
  6318.         1703    Invalid data pointer 
  6319.         1706    Invalid LF parm packet ptr 
  6320.         1761    Error LF invalid packet size 
  6321.  
  6322.  
  6323. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Parameters ΓòÉΓòÉΓòÉ
  6324.  
  6325.  service (ULONG) - input 
  6326.     The class of Logging Service: 
  6327.  
  6328.     1         Error logging 
  6329.  
  6330.               All other values are reserved for future use. 
  6331.  
  6332.  pCloseFile (PVOID) - input 
  6333.     A pointer to the LogCloseFile parameter packet. 
  6334.  
  6335.     For Error Logging, this is a pointer to a LCFREQUEST structure. 
  6336.  
  6337.  rc (APIRET) - returns 
  6338.     Return code. 
  6339.  
  6340.     LogCloseFile returns one of the following values: 
  6341.  
  6342.          0    No error 
  6343.         520    Error LF buf too small 
  6344.          5    Error access denied 
  6345.         523    Error LF invalid service 
  6346.         1703    Invalid data pointer 
  6347.         1701    Invalid LF log file id 
  6348.         1702    Invalid LF packet revision number 
  6349.         1703    Invalid data pointer 
  6350.         1706    Invalid LF parm packet ptr 
  6351.         1761    Error LF invalid packet size 
  6352.  
  6353.  
  6354. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Remarks ΓòÉΓòÉΓòÉ
  6355.  
  6356. The library LFAPI.LIB must be linked with object files that use LogCloseFile 
  6357.  
  6358.  
  6359. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Related Functions ΓòÉΓòÉΓòÉ
  6360.  
  6361.      LogOpenFile 
  6362.      LogReadEntry 
  6363.  
  6364.  
  6365. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Example Code ΓòÉΓòÉΓòÉ
  6366.  
  6367. The following example closes a log file (log_file_ID = 2) that was opened with 
  6368. LogOpenFile. 
  6369.  
  6370.   #define INCL_LOGGING
  6371.   #include <unidef.h>
  6372.   #include <os2.h>
  6373.   #include <stdio.h>
  6374.   #include <lfdef.h>
  6375.  
  6376.   {
  6377.   APIRET rc;                            /* return code */
  6378.   ULONG service;
  6379.   LCFREQUEST close_file_packet;
  6380.  
  6381.   service = ERROR_LOGGING_SERVICE;
  6382.  
  6383.   /* Construct the LogOpenFile parameter packet  */
  6384.   close_file_packet.packet_size = sizeof(LCFREQUEST);
  6385.   close_file_packet.packet_revision_number = LF_UNI_API;
  6386.   close_file_packet.log_file_ID = 2;
  6387.  
  6388.   rc = LogCloseFile(service,                           /* service */
  6389.                      &close_file_packet)           /* parameter packet  */
  6390.   if (rc |= 0)
  6391.   {
  6392.    printf("LogCloseFile error: return code = %d",rc);
  6393.    return;
  6394.   }
  6395.  
  6396.  
  6397. ΓòÉΓòÉΓòÉ <hidden> LogCloseFile - Topics ΓòÉΓòÉΓòÉ
  6398.  
  6399. Select an item: 
  6400.  
  6401. Syntax
  6402. Parameters
  6403. Returns
  6404. Remarks
  6405. Example Code
  6406. Related Functions
  6407.  
  6408.  
  6409. ΓòÉΓòÉΓòÉ 10.1.7. LogFormatEntry ΓòÉΓòÉΓòÉ
  6410.  
  6411.  
  6412. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Syntax ΓòÉΓòÉΓòÉ
  6413.  
  6414. LogFormatEntry formats a Log Entry for display. 
  6415.  
  6416.  
  6417. #define INCL_LOGGING
  6418. #include <os2.h>
  6419. #include <lfdef.h>
  6420.  
  6421. ULONG     service;
  6422. PVOID     pFormatEntry;
  6423. APIRET    rc;
  6424.  
  6425. rc = LogFormatEntry(service, pFormatEntry);
  6426.  
  6427.  
  6428. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry Parameter - service ΓòÉΓòÉΓòÉ
  6429.  
  6430.  service (ULONG) - input 
  6431.     The class of Logging Service: 
  6432.  
  6433.     1         Error logging 
  6434.  
  6435.               All other values are reserved for future use. 
  6436.  
  6437.  
  6438. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry Parameter - pFormatEntry ΓòÉΓòÉΓòÉ
  6439.  
  6440.  pFormatEntry (PVOID) - input 
  6441.     A pointer to the LogFormatEntry parameter packet. 
  6442.  
  6443.     For Error Logging, this is a pointer to a LFEREQUEST structure. 
  6444.  
  6445.  
  6446. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry Return Value - rc ΓòÉΓòÉΓòÉ
  6447.  
  6448.  rc (APIRET) - returns 
  6449.     Return code. 
  6450.  
  6451.     LogFormatEntry returns the following values: 
  6452.  
  6453.          0    No error 
  6454.          2    Error file not found 
  6455.         520    Error LF buf too small 
  6456.         523    Error LF invalid service 
  6457.         524    Error LF general failure 
  6458.         1703    Invalid data pointer 
  6459.         1701    Invalid LF log file id 
  6460.         1702    Invalid LF packet revision number 
  6461.         1706    Invalid LF parm packet ptr 
  6462.         1751    Invalid LF flag 
  6463.         1761    Error LF invalid packet size 
  6464.         1770    Invalid log entry record 
  6465.         1771    No log entry format template available 
  6466.         2507    RAS unicode conversion error 
  6467.         2600    RAS invalid locale object 
  6468.  
  6469.  
  6470. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Parameters ΓòÉΓòÉΓòÉ
  6471.  
  6472.  service (ULONG) - input 
  6473.     The class of Logging Service: 
  6474.  
  6475.     1         Error logging 
  6476.  
  6477.               All other values are reserved for future use. 
  6478.  
  6479.  pFormatEntry (PVOID) - input 
  6480.     A pointer to the LogFormatEntry parameter packet. 
  6481.  
  6482.     For Error Logging, this is a pointer to a LFEREQUEST structure. 
  6483.  
  6484.  rc (APIRET) - returns 
  6485.     Return code. 
  6486.  
  6487.     LogFormatEntry returns the following values: 
  6488.  
  6489.          0    No error 
  6490.          2    Error file not found 
  6491.         520    Error LF buf too small 
  6492.         523    Error LF invalid service 
  6493.         524    Error LF general failure 
  6494.         1703    Invalid data pointer 
  6495.         1701    Invalid LF log file id 
  6496.         1702    Invalid LF packet revision number 
  6497.         1706    Invalid LF parm packet ptr 
  6498.         1751    Invalid LF flag 
  6499.         1761    Error LF invalid packet size 
  6500.         1770    Invalid log entry record 
  6501.         1771    No log entry format template available 
  6502.         2507    RAS unicode conversion error 
  6503.         2600    RAS invalid locale object 
  6504.  
  6505.  
  6506. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Remarks ΓòÉΓòÉΓòÉ
  6507.  
  6508. ADDITIONAL RETURNS INFORMATION 
  6509.  
  6510. The data will be passed back in multiple occurrences of the following LTD 
  6511. (Length, Type, Data) format: 
  6512.  
  6513.  ULONG     length 
  6514.  ULONG     type 
  6515.  UniChar   data[n] 
  6516.     or 
  6517.  Char      data[n] 
  6518.  
  6519.  Where: 
  6520.  
  6521.       length (ULONG) is the length, in bytes, of this detail record (includes 
  6522.       length, type, and data fields). 
  6523.  
  6524.       type (ULONG) is an integer value that represents the type of data being 
  6525.       passed back. 
  6526.  
  6527.       An error record is created by the system when an error in a system or 
  6528.       application program triggers a probe in that program.  Error records 
  6529.       contain detailed information to help you diagnose the error. Error 
  6530.       records are also called DET1 records.  Records created by a back level 
  6531.       logging system are called DET4 records. 
  6532.  
  6533.       A control record is created by the system when you make changes to the 
  6534.       way errors are logged.  For example, when you suspend error logging or 
  6535.       direct error logging to a new file, the system records that change in a 
  6536.       control record.  Control records are also called DET2 records.  Control 
  6537.       records are new for FFST technology and are not available in records 
  6538.       created by a back level logging system. 
  6539.  
  6540.       The following are the current Error Logging type values and their 
  6541.       meanings: 
  6542.  
  6543.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6544.             ΓöéType      ΓöéMeaning                  ΓöéFrom      Γöé
  6545.             Γöé          Γöé                         ΓöéRecord    Γöé
  6546.             Γöé          Γöé                         ΓöéType      Γöé
  6547.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6548.             Γöé0005      ΓöéDate heading             ΓöéDET1,     Γöé
  6549.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6550.             Γöé          Γöé                         ΓöéDET4      Γöé
  6551.             Γöé          Γöé                         Γöérecord    Γöé
  6552.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6553.             Γöé0006      ΓöéDate                     ΓöéDET1,     Γöé
  6554.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6555.             Γöé          Γöé                         ΓöéDET4      Γöé
  6556.             Γöé          Γöé                         Γöérecord    Γöé
  6557.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6558.             Γöé0007      ΓöéTime heading             ΓöéDET1,     Γöé
  6559.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6560.             Γöé          Γöé                         ΓöéDET4      Γöé
  6561.             Γöé          Γöé                         Γöérecord    Γöé
  6562.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6563.             Γöé0008      ΓöéTime                     ΓöéDET1,     Γöé
  6564.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6565.             Γöé          Γöé                         ΓöéDET4      Γöé
  6566.             Γöé          Γöé                         Γöérecord    Γöé
  6567.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6568.             Γöé0009      ΓöéEntry ID heading         ΓöéDET1,     Γöé
  6569.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6570.             Γöé          Γöé                         ΓöéDET4      Γöé
  6571.             Γöé          Γöé                         Γöérecord    Γöé
  6572.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6573.             Γöé0010      ΓöéEntry ID                 ΓöéDET1,     Γöé
  6574.             Γöé          Γöé                         ΓöéDET2, or  Γöé
  6575.             Γöé          Γöé                         ΓöéDET4      Γöé
  6576.             Γöé          Γöé                         Γöérecord    Γöé
  6577.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6578.             Γöé0011      ΓöéSeverity heading         ΓöéDET1      Γöé
  6579.             Γöé          Γöé                         Γöérecord    Γöé
  6580.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6581.             Γöé0012      ΓöéSeverity                 ΓöéDET1      Γöé
  6582.             Γöé          Γöé                         Γöérecord    Γöé
  6583.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6584.             Γöé0013      ΓöéModule name heading      ΓöéDET1      Γöé
  6585.             Γöé          Γöé                         Γöérecord    Γöé
  6586.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6587.             Γöé0014      ΓöéModule name              ΓöéDET1      Γöé
  6588.             Γöé          Γöé                         Γöérecord    Γöé
  6589.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6590.             Γöé0015      ΓöéDirectory name heading   ΓöéDET1      Γöé
  6591.             Γöé          Γöé                         Γöérecord    Γöé
  6592.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6593.             Γöé0016      ΓöéDirectory name           ΓöéDET1      Γöé
  6594.             Γöé          Γöé                         Γöérecord    Γöé
  6595.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6596.             Γöé0017      ΓöéError message heading    ΓöéDET1      Γöé
  6597.             Γöé          Γöé                         Γöérecord    Γöé
  6598.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6599.             Γöé0018      ΓöéError message text       ΓöéDET1      Γöé
  6600.             Γöé          Γöé                         Γöérecord    Γöé
  6601.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6602.             Γöé0019      ΓöéProbe ID heading         ΓöéDET1      Γöé
  6603.             Γöé          Γöé                         Γöérecord    Γöé
  6604.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6605.             Γöé0020      ΓöéProbe ID text            ΓöéDET1      Γöé
  6606.             Γöé          Γöé                         Γöérecord    Γöé
  6607.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6608.             Γöé0021      ΓöéProbe Flags heading      ΓöéDET1      Γöé
  6609.             Γöé          Γöé                         Γöérecord    Γöé
  6610.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6611.             Γöé0022      ΓöéProbe Flags              ΓöéDET1      Γöé
  6612.             Γöé          Γöé                         Γöérecord    Γöé
  6613.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6614.             Γöé0023      ΓöéTemplate Repository      ΓöéDET1      Γöé
  6615.             Γöé          Γöépathname heading         Γöérecord    Γöé
  6616.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6617.             Γöé0024      ΓöéTemplate Repository      ΓöéDET1      Γöé
  6618.             Γöé          Γöépathname text            Γöérecord    Γöé
  6619.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6620.             Γöé0025      ΓöéTemplate ID heading      ΓöéDET1      Γöé
  6621.             Γöé          Γöé                         Γöérecord    Γöé
  6622.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6623.             Γöé0026      ΓöéTemplate ID  text        ΓöéDET1      Γöé
  6624.             Γöé          Γöé                         Γöérecord    Γöé
  6625.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6626.             Γöé0027      ΓöéDump generated heading   ΓöéDET1      Γöé
  6627.             Γöé          Γöé                         Γöérecord    Γöé
  6628.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6629.             Γöé0028      ΓöéDump Generated text      ΓöéDET1      Γöé
  6630.             Γöé          Γöé                         Γöérecord    Γöé
  6631.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6632.             Γöé0029      ΓöéTrace file generated     ΓöéDET1      Γöé
  6633.             Γöé          Γöéheading                  Γöérecord    Γöé
  6634.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6635.             Γöé0030      ΓöéTrace File generated textΓöéDET1      Γöé
  6636.             Γöé          Γöé                         Γöérecord    Γöé
  6637.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6638.             Γöé0031      ΓöéProcess dump generated   ΓöéDET1      Γöé
  6639.             Γöé          Γöéheading                  Γöérecord    Γöé
  6640.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6641.             Γöé0032      ΓöéProcess Dump generated   ΓöéDET1      Γöé
  6642.             Γöé          Γöétext                     Γöérecord    Γöé
  6643.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6644.             Γöé0040      ΓöéFailure Causes heading   ΓöéDET1      Γöé
  6645.             Γöé          Γöé                         Γöérecord    Γöé
  6646.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6647.             Γöé0041      ΓöéFailure Cause (Could be 4ΓöéDET1      Γöé
  6648.             Γöé          Γöéof these)                Γöérecord    Γöé
  6649.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6650.             Γöé0050      ΓöéFailure Actions heading  ΓöéDET1      Γöé
  6651.             Γöé          Γöé                         Γöérecord    Γöé
  6652.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6653.             Γöé0051      ΓöéFailure Action (Could be ΓöéDET1      Γöé
  6654.             Γöé          Γöé4 of these)              Γöérecord    Γöé
  6655.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6656.             Γöé0060      ΓöéInstall Causes heading   ΓöéDET1      Γöé
  6657.             Γöé          Γöé                         Γöérecord    Γöé
  6658.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6659.             Γöé0061      ΓöéInstall Cause (Could be 4ΓöéDET1      Γöé
  6660.             Γöé          Γöéof these)                Γöérecord    Γöé
  6661.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6662.             Γöé0070      ΓöéInstall Actions heading  ΓöéDET1      Γöé
  6663.             Γöé          Γöé                         Γöérecord    Γöé
  6664.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6665.             Γöé0071      ΓöéInstall Action (Could be ΓöéDET1      Γöé
  6666.             Γöé          Γöé4 of these)              Γöérecord    Γöé
  6667.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6668.             Γöé0080      ΓöéUser Causes heading      ΓöéDET1      Γöé
  6669.             Γöé          Γöé                         Γöérecord    Γöé
  6670.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6671.             Γöé0081      ΓöéUser Cause (Could be 4 ofΓöéDET1      Γöé
  6672.             Γöé          Γöéthese)                   Γöérecord    Γöé
  6673.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6674.             Γöé0090      ΓöéUser Actions heading     ΓöéDET1      Γöé
  6675.             Γöé          Γöé                         Γöérecord    Γöé
  6676.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6677.             Γöé0091      ΓöéUser Action (Could be 4  ΓöéDET1      Γöé
  6678.             Γöé          Γöéof these)                Γöérecord    Γöé
  6679.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6680.             Γöé0100      ΓöéReturn Code heading      ΓöéDET1      Γöé
  6681.             Γöé          Γöé                         Γöérecord    Γöé
  6682.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6683.             Γöé0101      ΓöéReturn Code text         ΓöéDET1      Γöé
  6684.             Γöé          Γöé                         Γöérecord    Γöé
  6685.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6686.             Γöé0110      ΓöéDump File name heading   ΓöéDET1      Γöé
  6687.             Γöé          Γöé                         Γöérecord    Γöé
  6688.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6689.             Γöé0111      ΓöéDump File name text      ΓöéDET1      Γöé
  6690.             Γöé          Γöé                         Γöérecord    Γöé
  6691.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6692.             Γöé0112      ΓöéDump formatter heading   ΓöéDET1      Γöé
  6693.             Γöé          Γöé                         Γöérecord    Γöé
  6694.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6695.             Γöé0113      ΓöéDump Formatter text      ΓöéDET1      Γöé
  6696.             Γöé          Γöé                         Γöérecord    Γöé
  6697.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6698.             Γöé0114      ΓöéDump File Deletion Date  ΓöéDET1      Γöé
  6699.             Γöé          Γöéheading                  Γöérecord    Γöé
  6700.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6701.             Γöé0115      ΓöéDump File Deletion Date  ΓöéDET1      Γöé
  6702.             Γöé          Γöé                         Γöérecord    Γöé
  6703.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6704.             Γöé0116      ΓöéDump File Deletion Time  ΓöéDET1      Γöé
  6705.             Γöé          Γöéheading                  Γöérecord    Γöé
  6706.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6707.             Γöé0117      ΓöéDump File Deletion Time  ΓöéDET1      Γöé
  6708.             Γöé          Γöé                         Γöérecord    Γöé
  6709.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6710.             Γöé0120      ΓöéTrace File name heading  ΓöéDET1      Γöé
  6711.             Γöé          Γöé                         Γöérecord    Γöé
  6712.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6713.             Γöé0121      ΓöéTrace File name text     ΓöéDET1      Γöé
  6714.             Γöé          Γöé                         Γöérecord    Γöé
  6715.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6716.             Γöé0122      ΓöéTrace formatter heading  ΓöéDET1      Γöé
  6717.             Γöé          Γöé                         Γöérecord    Γöé
  6718.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6719.             Γöé0123      ΓöéTrace formatter text     ΓöéDET1      Γöé
  6720.             Γöé          Γöé                         Γöérecord    Γöé
  6721.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6722.             Γöé0124      ΓöéTrace File Deletion Date ΓöéDET1      Γöé
  6723.             Γöé          Γöéheading                  Γöérecord    Γöé
  6724.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6725.             Γöé0125      ΓöéTrace File Deletion Date ΓöéDET1      Γöé
  6726.             Γöé          Γöé                         Γöérecord    Γöé
  6727.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6728.             Γöé0126      ΓöéTrace File Deletion Time ΓöéDET1      Γöé
  6729.             Γöé          Γöéheading                  Γöérecord    Γöé
  6730.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6731.             Γöé0127      ΓöéTrace File Deletion Time ΓöéDET1      Γöé
  6732.             Γöé          Γöé                         Γöérecord    Γöé
  6733.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6734.             Γöé0130      ΓöéProcess Dump File name   ΓöéDET1      Γöé
  6735.             Γöé          Γöéheading                  Γöérecord    Γöé
  6736.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6737.             Γöé0131      ΓöéProcess Dump File name   ΓöéDET1      Γöé
  6738.             Γöé          Γöétext                     Γöérecord    Γöé
  6739.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6740.             Γöé0132      ΓöéProcess Dump formatter   ΓöéDET1      Γöé
  6741.             Γöé          Γöéheading                  Γöérecord    Γöé
  6742.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6743.             Γöé0133      ΓöéProcess Dump formatter   ΓöéDET1      Γöé
  6744.             Γöé          Γöétext                     Γöérecord    Γöé
  6745.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6746.             Γöé0134      ΓöéProcess Dump Deletion    ΓöéDET1      Γöé
  6747.             Γöé          ΓöéDate heading             Γöérecord    Γöé
  6748.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6749.             Γöé0135      ΓöéProcess Dump File        ΓöéDET1      Γöé
  6750.             Γöé          ΓöéDeletion Date            Γöérecord    Γöé
  6751.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6752.             Γöé0136      ΓöéProcess Dump Deletion    ΓöéDET1      Γöé
  6753.             Γöé          ΓöéTime heading             Γöérecord    Γöé
  6754.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6755.             Γöé0137      ΓöéProcess Dump File        ΓöéDET1      Γöé
  6756.             Γöé          ΓöéDeletion Time            Γöérecord    Γöé
  6757.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6758.             Γöé0140      ΓöéPCT heading              ΓöéDET1      Γöé
  6759.             Γöé          Γöé                         Γöérecord    Γöé
  6760.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6761.             Γöé0141      ΓöéPCT Execution Parameters ΓöéDET1      Γöé
  6762.             Γöé          Γöé                         Γöérecord    Γöé
  6763.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6764.             Γöé0150      ΓöéDMI vendor tag heading   ΓöéDET1      Γöé
  6765.             Γöé          Γöé                         Γöérecord    Γöé
  6766.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6767.             Γöé0151      ΓöéDMI vendor tag text      ΓöéDET1      Γöé
  6768.             Γöé          Γöé                         Γöérecord    Γöé
  6769.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6770.             Γöé0155      ΓöéDMI tag  heading         ΓöéDET1      Γöé
  6771.             Γöé          Γöé                         Γöérecord    Γöé
  6772.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6773.             Γöé0156      ΓöéDMI tag text             ΓöéDET1      Γöé
  6774.             Γöé          Γöé                         Γöérecord    Γöé
  6775.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6776.             Γöé0165      ΓöéDMI product ID heading   ΓöéDET1      Γöé
  6777.             Γöé          Γöé                         Γöérecord    Γöé
  6778.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6779.             Γöé0166      ΓöéDMI product ID text      ΓöéDET1      Γöé
  6780.             Γöé          Γöé                         Γöérecord    Γöé
  6781.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6782.             Γöé0170      ΓöéDMI revision heading     ΓöéDET1      Γöé
  6783.             Γöé          Γöé                         Γöérecord    Γöé
  6784.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6785.             Γöé0171      ΓöéDMI revision text        ΓöéDET1      Γöé
  6786.             Γöé          Γöé                         Γöérecord    Γöé
  6787.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6788.             Γöé0172      ΓöéDMI modification level   ΓöéDET1      Γöé
  6789.             Γöé          Γöéheading                  Γöérecord    Γöé
  6790.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6791.             Γöé0173      ΓöéDMI modification level   ΓöéDET1      Γöé
  6792.             Γöé          Γöétext                     Γöérecord    Γöé
  6793.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6794.             Γöé0174      ΓöéDMI fix level heading    ΓöéDET1      Γöé
  6795.             Γöé          Γöé                         Γöérecord    Γöé
  6796.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6797.             Γöé0175      ΓöéDMI fix level text       ΓöéDET1      Γöé
  6798.             Γöé          Γöé                         Γöérecord    Γöé
  6799.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6800.             Γöé0195      ΓöéMachine type heading     ΓöéDET1      Γöé
  6801.             Γöé          Γöé                         Γöérecord    Γöé
  6802.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6803.             Γöé0196      ΓöéMachine type text        ΓöéDET1      Γöé
  6804.             Γöé          Γöé                         Γöérecord    Γöé
  6805.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6806.             Γöé0200      ΓöéMachine serial number    ΓöéDET1      Γöé
  6807.             Γöé          Γöéheading                  Γöérecord    Γöé
  6808.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6809.             Γöé0201      ΓöéMachine serial number    ΓöéDET1      Γöé
  6810.             Γöé          Γöétext                     Γöérecord    Γöé
  6811.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6812.             Γöé0205      ΓöéHostname heading         ΓöéDET1      Γöé
  6813.             Γöé          Γöé                         Γöérecord    Γöé
  6814.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6815.             Γöé0206      ΓöéHostname text            ΓöéDET1      Γöé
  6816.             Γöé          Γöé                         Γöérecord    Γöé
  6817.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6818.             Γöé0210      ΓöéUser Data heading        ΓöéDET1      Γöé
  6819.             Γöé          Γöé                         Γöérecord    Γöé
  6820.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6821.             Γöé0211      ΓöéUser data text           ΓöéDET1      Γöé
  6822.             Γöé          Γöé                         Γöérecord    Γöé
  6823.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6824.             Γöé0213      ΓöéAction heading           ΓöéDET2      Γöé
  6825.             Γöé          Γöé                         Γöérecord    Γöé
  6826.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6827.             Γöé0214      ΓöéAction text              ΓöéDET2      Γöé
  6828.             Γöé          Γöé                         Γöérecord    Γöé
  6829.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6830.             Γöé0215      ΓöéOld Value heading        ΓöéDET2      Γöé
  6831.             Γöé          Γöé                         Γöérecord    Γöé
  6832.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6833.             Γöé0216      ΓöéOld Value text           ΓöéDET2      Γöé
  6834.             Γöé          Γöé                         Γöérecord    Γöé
  6835.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6836.             Γöé0220      ΓöéNew Value heading        ΓöéDET2      Γöé
  6837.             Γöé          Γöé                         Γöérecord    Γöé
  6838.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6839.             Γöé0221      ΓöéNew Value text           ΓöéDET2      Γöé
  6840.             Γöé          Γöé                         Γöérecord    Γöé
  6841.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6842.             Γöé0222      ΓöéCreated by backlevel textΓöéDET4      Γöé
  6843.             Γöé          Γöé                         Γöérecord    Γöé
  6844.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6845.             Γöé0223      ΓöéRecord ID heading        ΓöéDET4      Γöé
  6846.             Γöé          Γöé                         Γöérecord    Γöé
  6847.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6848.             Γöé0224      ΓöéRecord ID                ΓöéDET4      Γöé
  6849.             Γöé          Γöé                         Γöérecord    Γöé
  6850.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6851.             Γöé0225      ΓöéQualifier heading        ΓöéDET4      Γöé
  6852.             Γöé          Γöé                         Γöérecord    Γöé
  6853.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6854.             Γöé0226      ΓöéQualifier                ΓöéDET4      Γöé
  6855.             Γöé          Γöé                         Γöérecord    Γöé
  6856.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6857.             Γöé0227      ΓöéOriginator heading       ΓöéDET4      Γöé
  6858.             Γöé          Γöé                         Γöérecord    Γöé
  6859.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6860.             Γöé0228      ΓöéOriginator               ΓöéDET4      Γöé
  6861.             Γöé          Γöé                         Γöérecord    Γöé
  6862.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6863.             Γöé0229      ΓöéUser data                ΓöéDET4      Γöé
  6864.             Γöé          Γöé                         Γöérecord    Γöé
  6865.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6866.             Γöé0230      ΓöéProcess name heading     ΓöéDET4      Γöé
  6867.             Γöé          Γöé                         Γöérecord    Γöé
  6868.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6869.             Γöé0231      ΓöéProcess name             ΓöéDET4      Γöé
  6870.             Γöé          Γöé                         Γöérecord    Γöé
  6871.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6872.             Γöé0232      ΓöéFMTDLL heading           ΓöéDET4      Γöé
  6873.             Γöé          Γöé                         Γöérecord    Γöé
  6874.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6875.             Γöé0233      ΓöéFMTDLL name              ΓöéDET4      Γöé
  6876.             Γöé          Γöé                         Γöérecord    Γöé
  6877.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6878.             Γöé0234      ΓöéFMTDLL text              ΓöéDET4      Γöé
  6879.             Γöé          Γöé                         Γöérecord    Γöé
  6880.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6881.             Γöé0235      ΓöéGA component ID heading  ΓöéDET4      Γöé
  6882.             Γöé          Γöé                         Γöérecord    Γöé
  6883.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6884.             Γöé0236      ΓöéGA component ID          ΓöéDET4      Γöé
  6885.             Γöé          Γöé                         Γöérecord    Γöé
  6886.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6887.             Γöé0237      ΓöéGA release level heading ΓöéDET4      Γöé
  6888.             Γöé          Γöé                         Γöérecord    Γöé
  6889.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6890.             Γöé0238      ΓöéGA release level         ΓöéDET4      Γöé
  6891.             Γöé          Γöé                         Γöérecord    Γöé
  6892.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6893.             Γöé0239      ΓöéGA software name heading ΓöéDET4      Γöé
  6894.             Γöé          Γöé                         Γöérecord    Γöé
  6895.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6896.             Γöé0240      ΓöéGA software name         ΓöéDET4      Γöé
  6897.             Γöé          Γöé                         Γöérecord    Γöé
  6898.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6899.             Γöé0241      ΓöéGeneric alert subvector  ΓöéDET4      Γöé
  6900.             Γöé          Γöéheading                  Γöérecord    Γöé
  6901.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6902.             Γöé0242      ΓöéGeneric alert subvector  ΓöéDET4      Γöé
  6903.             Γöé          Γöétext                     Γöérecord    Γöé
  6904.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6905.             Γöé0243      ΓöéProbable causes subvectorΓöéDET4      Γöé
  6906.             Γöé          Γöéheading                  Γöérecord    Γöé
  6907.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6908.             Γöé0244      ΓöéProbable causes subvectorΓöéDET4      Γöé
  6909.             Γöé          Γöétext                     Γöérecord    Γöé
  6910.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6911.             Γöé0245      ΓöéUser causes subvector    ΓöéDET4      Γöé
  6912.             Γöé          Γöéheading                  Γöérecord    Γöé
  6913.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6914.             Γöé0246      ΓöéInstall causes subvector ΓöéDET4      Γöé
  6915.             Γöé          Γöéheading                  Γöérecord    Γöé
  6916.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6917.             Γöé0247      ΓöéFailure causes subvector ΓöéDET4      Γöé
  6918.             Γöé          Γöéheading                  Γöérecord    Γöé
  6919.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6920.             Γöé0248      ΓöéSubvector key heading    ΓöéDET4      Γöé
  6921.             Γöé          Γöé                         Γöérecord    Γöé
  6922.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6923.             Γöé0249      ΓöéSubvector key type       ΓöéDET4      Γöé
  6924.             Γöé          Γöé                         Γöérecord    Γöé
  6925.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6926.             Γöé0250      ΓöéSubvector key text       ΓöéDET4      Γöé
  6927.             Γöé          Γöé                         Γöérecord    Γöé
  6928.             Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6929.             Γöé0251      ΓöéHex dump text            ΓöéDET4      Γöé
  6930.             Γöé          Γöé                         Γöérecord    Γöé
  6931.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6932.  
  6933.       data (UniChar[]) or data (Char[]) is a variable length area that contains 
  6934.       the formatted data. 
  6935.  
  6936.  Note:  If there is no data, only the length and type portion of the record 
  6937.  will be returned. The length would indicate that there is no data. 
  6938.  
  6939.  The library LFAPI.LIB must be linked with object files that use LogFormatEntry 
  6940.  
  6941.  The packet_revision_number parameter defines if pointers point to ASCII or 
  6942.  UniCode character data. 
  6943.  
  6944.  
  6945. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Related Functions ΓòÉΓòÉΓòÉ
  6946.  
  6947.      LogReadEntry 
  6948.  
  6949.  
  6950. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Example Code ΓòÉΓòÉΓòÉ
  6951.  
  6952. The following example formats an Error Log record for display. The calling 
  6953. program has placed the address of the locale object in locale. 
  6954.  
  6955.   #define INCL_LOGGING
  6956.   #include <unidef.h>
  6957.   #include <os2.h>
  6958.   #include <stdio.h>
  6959.   #include <lfdef.h>
  6960.  
  6961.   {
  6962.   APIRET rc;                              /* return code */
  6963.   ULONG service;
  6964.   LFEREQUEST format_entry_packet;
  6965.   BYTE log_entry_buffer[1024];
  6966.   UniChar string_buffer[4096];
  6967.   #define STRING_BUFFER_LENGTH 4096
  6968.   ULONG string_buffer_length;
  6969.   LocaleObject locale;
  6970.  
  6971.   service = ERROR_LOGGING_SERVICE;
  6972.   string_buffer_length = STRING_BUFFER_LENGTH;
  6973.   rc = UniCreateLocaleObject(UNLUCS_STRING_POINTNER,(UniChar *) L"",&locale);
  6974.   if (rc |= 0)
  6975.     {
  6976.      printf("UniCreateLocaleObject error: return code = %d",rc);
  6977.      return;
  6978.     }
  6979.  
  6980.   /* Construct the Error Log Service format packet  */
  6981.   format_entry.packet.packet_size = sizeof(LFEREQUEST);
  6982.   format_entry_packet.packet_revision_number = WPOS_RELEASE_1;
  6983.   format_entry_packet.log_entry_buffer =  &log_entry_buffer;
  6984.   format_entry_packet.flags = ERR_FORMAT_DETAIL_DATA;
  6985.   format_entry_packet.locale_object = locale;
  6986.   format_entry_packet.string_buffer_length = &string_buffer_length;
  6987.   format_entry_packet.string_buffer =  &string_buffer;
  6988.   rc = LogFormatEntry(service,            /* service */
  6989.               &format_entry_packet)   /* parameter packet */
  6990.   if (rc |= 0)
  6991.     {
  6992.      printf("LogFormatEntry error: return code = %d",rc);
  6993.      return;
  6994.     }
  6995.  
  6996.  
  6997. ΓòÉΓòÉΓòÉ <hidden> LogFormatEntry - Topics ΓòÉΓòÉΓòÉ
  6998.  
  6999. Select an item: 
  7000.  
  7001. Syntax
  7002. Parameters
  7003. Returns
  7004. Remarks
  7005. Example Code
  7006. Related Functions
  7007.  
  7008.  
  7009. ΓòÉΓòÉΓòÉ 10.1.8. LogOpenEventNotification ΓòÉΓòÉΓòÉ
  7010.  
  7011.  
  7012. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Syntax ΓòÉΓòÉΓòÉ
  7013.  
  7014. LogOpenEventNotification registers a consumer with the Logging Service, so that 
  7015. the consumer will receive notification when specific log records have been 
  7016. created. Consumers specify which log records they will be notified about by 
  7017. providing filtering information. If no filter data structure is provided, all 
  7018. events that are logged to the specified log file will cause event notifications 
  7019. to be forwarded to the consumer. LogOpenEventNotification returns an ID used to 
  7020. reference this notification request. 
  7021.  
  7022. Notifications will be sent for only those records placed in the error log by 
  7023. the FFSTProbe API. 
  7024.  
  7025.  
  7026. #define INCL_LOGGING
  7027. #include <os2.h>
  7028. #include <lfdef.h>
  7029.  
  7030. ULONG           service;
  7031. PVOID           pOpenEventNotification;
  7032. APIRET          rc;
  7033.  
  7034. rc = LogOpenEventNotification(service, pOpenEventNotification);
  7035.  
  7036.  
  7037. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification Parameter - service ΓòÉΓòÉΓòÉ
  7038.  
  7039.  service (ULONG) - input 
  7040.     The class of Logging Service: 
  7041.  
  7042.     1         Error logging 
  7043.  
  7044.               All other values are reserved for future use. 
  7045.  
  7046.  
  7047. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification Parameter - pOpenEventNotification ΓòÉΓòÉΓòÉ
  7048.  
  7049.  pOpenEventNotification (PVOID) - input/output 
  7050.     A pointer to the LogOpenEventNotification parameter packet. 
  7051.  
  7052.     For Error Logging, this is a pointer to a LOENREQUEST structure. 
  7053.  
  7054.  
  7055. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification Return Value - rc ΓòÉΓòÉΓòÉ
  7056.  
  7057.  rc (APIRET) - returns 
  7058.     Return code. 
  7059.  
  7060.     LogOpenEventNotification returns the following values: 
  7061.  
  7062.          0    No error 
  7063.         523    Error LF invalid service 
  7064.         524    Error LF general failure 
  7065.         1703    Invalid data pointer 
  7066.         1701    RAS invalid LF log file id 
  7067.         1702    Invalid LF packet revision number 
  7068.         1706    RAS invalid parm packet ptr 
  7069.         1751    RAS invalid flag 
  7070.         1757    RAS invalid log notify ptr 
  7071.         1761    RAS invalid packet size 
  7072.  
  7073.  
  7074. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Parameters ΓòÉΓòÉΓòÉ
  7075.  
  7076.  service (ULONG) - input 
  7077.     The class of Logging Service: 
  7078.  
  7079.     1         Error logging 
  7080.  
  7081.               All other values are reserved for future use. 
  7082.  
  7083.  pOpenEventNotification (PVOID) - in/out 
  7084.     A pointer to the LogOpenEventNotification parameter packet. 
  7085.  
  7086.     For Error Logging, this is a pointer to a LOENREQUEST structure. 
  7087.  
  7088.  rc (APIRET) - returns 
  7089.     Return code. 
  7090.  
  7091.     LogOpenEventNotification returns the following values: 
  7092.  
  7093.          0    No error 
  7094.         523    Error LF invalid service 
  7095.         524    Error LF general failure 
  7096.         1703    Invalid data pointer 
  7097.         1701    RAS invalid LF log file id 
  7098.         1702    Invalid LF packet revision number 
  7099.         1706    RAS invalid parm packet ptr 
  7100.         1751    RAS invalid flag 
  7101.         1757    RAS invalid log notify ptr 
  7102.         1761    RAS invalid packet size 
  7103.  
  7104.  
  7105. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Remarks ΓòÉΓòÉΓòÉ
  7106.  
  7107. The event-notification filter is a flexible data structure that is used to 
  7108. specify the class of events whose notifications will be received through the 
  7109. event-notification mechanism. It is available to event consumers (through 
  7110. LogOpenEventNotification and LogChangeEventFilter) and to log file readers 
  7111. (through LogReadEntry). This provides a common search criteria when waiting for 
  7112. events and reading selected entries within a log file. 
  7113.  
  7114.                 EVENT NOTIFICATION FILTER STRUCTURE
  7115.  
  7116.  ______________________    _______________________   _______________________
  7117.  _ SELECTION CRITERIA _    _ SELECTION CRITERIA  _   _ SELECTION CRITERIA  _
  7118.  _       BLOCK        ____>_       BLOCK         ___>_       BLOCK         _
  7119.  _                    _    _                     _   _                     _
  7120.  ______________________    _______________________   _______________________
  7121.  
  7122. The event-notification filter consists of an array of one or more selection 
  7123. criteria blocks. Each selection criteria block contains a small header block 
  7124. that specifies the revision of the filter and points to the next selection 
  7125. criteria block. 
  7126.  
  7127. Each selection criteria block consists of an array of selection criteria 
  7128. subblocks. Each selection criteria subblock contains three pieces of 
  7129. information: 
  7130.  
  7131.    1. The ID of an attribute that is contained within this class of log entry. 
  7132.  
  7133.       For more information see the entry_attribute_ID parameter. 
  7134.  
  7135.    2. A comparison operator that is to be applied against the specified log 
  7136.       entry attribute. 
  7137.  
  7138.       For more information see the comparison_operator_ID parameter. 
  7139.  
  7140.    3. A pointer to a data that can be either ASCII or UniCode data.  The data 
  7141.       type is determined by the packet_revision_number 
  7142.  
  7143.  The following diagram summarizes the structure of a selection criteria block: 
  7144.  
  7145.  
  7146.  
  7147.    ____________________
  7148.    _                  _
  7149.    _     HEADER       _
  7150.    _      BLOCK       _
  7151.    ____________________
  7152.    _    LOG ENTRY     _           SELECTION
  7153.    _  ATTRIBUTE ID    _            CRITERIA
  7154.    ____________________             BLOCK
  7155.    _   COMPARISON     _           STRUCTURE
  7156.    _  OPERATOR ID     _
  7157.    ____________________
  7158.    _   POINTER TO     _
  7159.    _COMPARISON DATA   _
  7160.    ____________________
  7161.    _                  _
  7162.    _                  _
  7163.    _                  _
  7164.    _                  _
  7165.    _                  _
  7166.    ____________________-------------------------
  7167.    _   LOG ENTRY      _           
  7168.    _  ATTRIBUTE ID    _           _
  7169.    ____________________       SELECTION
  7170.    _  COMPARISON      _       CRITERIA
  7171.    _ OPERATOR ID      _       SUBBLOCK
  7172.    ____________________           _
  7173.    _  POINTER TO      _           _
  7174.    _COMPARISON DATA   _           
  7175.    ____________________--------------------------
  7176.  
  7177.  
  7178.  Each selection criteria subblock specifies a comparison with respect to an 
  7179.  attribute within a log entry. The result of the comparison is a Boolean value. 
  7180.  The Boolean value of the array of selection criteria subblocks (within a 
  7181.  selection criteria block) is the logical AND of the Boolean values for each 
  7182.  subblock. 
  7183.  
  7184.  If an event-notification filter contains more than one selection criteria 
  7185.  block, the entire chain of selection criteria blocks is considered to resolve 
  7186.  to the logical OR of the Boolean values of the individual blocks.  In this 
  7187.  manner, a consumer can construct appropriately complex event-discrimination 
  7188.  filters. 
  7189.  
  7190.  The following diagram illustrates the logical representation of an 
  7191.  event-notification filter: 
  7192.  
  7193.                           EVENT NOTIFICATION FILTER STRUCTURE
  7194.  
  7195.  
  7196.     ____________    ______________      _______________        _______________
  7197.                    _  HEADER    _      _             _        _             _
  7198.           _         _   BLOCK    _ ___> _             _______> _             _
  7199.           _         ______________      _             _        _             _
  7200.        LOGICAL      _            _      _             _        _             _
  7201.          AND        _SELECTION   _      _ SELECTION   _        _ SELECTION   _
  7202.           _         _ CRITERIA   _      _  CRITERIA   _        _  CRITERIA   _
  7203.           _         _ SUBBLOCK   _      _    BLOCK    _        _    BLOCK    _
  7204.           _         ______________      _             _        _             _
  7205.           _         _            _      _             _        _             _
  7206.           _         _    .       _      _             _        _             _
  7207.           _         _    .       _      _             _        _             _
  7208.           _         _    .       _      _             _        _             _
  7209.           _         ______________      _             _        _             _
  7210.           _         _ SELECTION  _      _             _        _             _
  7211.           _         _ CRITERIA   _      _             _        _             _
  7212.           _         _ SUBBLOCK   _      _             _        _             _
  7213.                    _            _      _             _        _             _
  7214.      ___________    ______________      _______________        _______________
  7215.  
  7216.                     _                                                        _
  7217.                     _  <________________     LOGICAL     ________________>   _
  7218.                     _                          OR                            _
  7219.                     _                                                        _
  7220.  
  7221.  The library LFAPI.LIB must be linked with object files that use 
  7222.  LogOpenEventNotification 
  7223.  
  7224.  
  7225. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Related Functions ΓòÉΓòÉΓòÉ
  7226.  
  7227.      LogChangeEventFilter 
  7228.      LogWaitEvent 
  7229.      LogCloseEventNotification 
  7230.      LogReadEntry 
  7231.  
  7232.  
  7233. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Example Code ΓòÉΓòÉΓòÉ
  7234.  
  7235. The following example opens error-logging event notification. It will 
  7236. initialize an event-notification filter that specifies any Error Log entry that 
  7237. has a product manufacturer named "IBM" and a severity less than 4. 
  7238.  
  7239.   #define INCL_LOGGING
  7240.   #include <unidef.h>
  7241.   #include <os2.h>
  7242.   #include <stdio.h>
  7243.   #include <lfdef.h>
  7244.   #define ERROR_LOG_FILE_ID 1
  7245.  
  7246.   ULONG service;
  7247.   ULONG severity = 4;
  7248.   ULONG entry_id = 12;
  7249.   LOENREQUEST open_event_packet;
  7250.   HLOGNOTIFY log_notify;
  7251.   SUBBLOCK subblock1, subblock2, subblock3;
  7252.   HEADERBLOCK headerblock1, headerblock2;
  7253.   FILTERBLOCK filter;
  7254.  
  7255.   UniChar *manufacturer_name = L"IBM";
  7256.  
  7257.   service = ERROR_LOGGING_SERVICE;
  7258.  
  7259.   /*  Construct an event notification filter with 2 header blocks. */
  7260.   /*  The first header block points to a single subblock.          */
  7261.   /*  The second header block points to a chain of two subblocks.  */
  7262.  
  7263.   filter.packet_size = sizeof(FILTERBLOCK);
  7264.   filter.packet_revision_number = LF_UNI_API;
  7265.   filter.header_block = &headerblock1;
  7266.  
  7267.   /*-------------construct headerblock1---------------------*/
  7268.   headerblock1.pSubblock = &subblock1;
  7269.   headerblock1.pNextBlock = &headerblock2;
  7270.  
  7271.   /*construct subblock1 of headerblock1*/
  7272.   subblock1.entry_attribute_ID = LOG_ERROR_DMI_VENDOR_TAG;
  7273.   subblock1.comparison_operator = LOG_ERROR_EQUAL;
  7274.   subblock1.comparison_data_ptr = &manufacturer_name;
  7275.   subblock1.next_subblock = NULL;
  7276.  
  7277.   /*------------construct headerblock2----------------------*/
  7278.   headerblock2.pSubblock = &subblock2;
  7279.   headerblock2.pNextBlock = NULL;
  7280.  
  7281.   /*construct subblock2 of headerblock2*/
  7282.   subblock2.entry_attribute_ID = LOG_ERROR_SEVERITY;
  7283.   subblock2.comparison_operator = LOG_ERROR_LESS_THAN;
  7284.   subblock2.comparison_data_ptr = severity;
  7285.   subblock2.comparison_data_length = sizeof(ULONG);
  7286.   subblock2.next_subblock = &subblock3;
  7287.  
  7288.   /*construct subblock3 of headerblock2*/
  7289.   subblock3.entry_attribute_ID = LOG_ERROR_ENTRY_ID;
  7290.   subblock3.comparison_operator = LOG_ERROR_GREATER_THAN;
  7291.   subblock3.comparison_data_ptr = entry_id;
  7292.   subblock3.comparison_data_length = sizeof(ULONG);
  7293.   subblock3.next_subblock = null;
  7294.  
  7295.   /* Construct the LogOpenEventNotification parameter packet.*/
  7296.   open_event_packet.packet_size = sizeof(LOENREQUEST);
  7297.   open_event_packet.packet_revision_number = LF_UNI_API;
  7298.   open_event_packet.log_file_ID = ERROR_LOG_FILE_ID;
  7299.   open_event_packet.pLogNotify = &log_notify;
  7300.   open_event_packet.pFilter = &filter;
  7301.   open_event_packet.read_flags = 0;
  7302.  
  7303.   rc = LogOpenEventNotification(service,        /*service*/
  7304.                        &open_event_packet); /*parameter packet*/
  7305.  
  7306.   if (rc |= 0)
  7307.     {
  7308.      printf("LogOpenEventNotification error: return code = %d",rc);
  7309.      return;
  7310.     }
  7311.  
  7312.  
  7313. ΓòÉΓòÉΓòÉ <hidden> LogOpenEventNotification - Topics ΓòÉΓòÉΓòÉ
  7314.  
  7315. Select an item: 
  7316.  
  7317. Syntax
  7318. Parameters
  7319. Returns
  7320. Remarks
  7321. Example Code
  7322. Related Functions
  7323.  
  7324.  
  7325. ΓòÉΓòÉΓòÉ 10.1.9. LogOpenFile ΓòÉΓòÉΓòÉ
  7326.  
  7327.  
  7328. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Syntax ΓòÉΓòÉΓòÉ
  7329.  
  7330. LogOpenFile opens a log file so that it can be read using LogReadEntry. 
  7331. LogOpenFile returns a log_file_ID number that is used to refer to the file. 
  7332.  
  7333. For Error Logging: 
  7334.  
  7335. Specify either a log_file_ID number or a path name. If the log_file_ID number 
  7336. is specified and the log_file_ID is valid the path name is returned. If a path 
  7337. name is specified, the Logging Service will return the log_file_ID that 
  7338. corresponds to the file. (The file will be opened if it is not already open.) 
  7339.  
  7340.  
  7341. #define INCL_LOGGING
  7342. #include <os2.h>
  7343. #include <lfdef.h>
  7344.  
  7345. ULONG     service;
  7346. PVOID     pOpenFile;
  7347. APIRET    rc;
  7348.  
  7349. rc = LogOpenFile(service, pOpenFile);
  7350.  
  7351.  
  7352. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile Parameter - service ΓòÉΓòÉΓòÉ
  7353.  
  7354.  service (ULONG) - input 
  7355.     The class of Logging Service: 
  7356.  
  7357.     1         Error logging 
  7358.  
  7359.               All other values are reserved for future use. 
  7360.  
  7361.  
  7362. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile Parameter - pOpenFile ΓòÉΓòÉΓòÉ
  7363.  
  7364.  pOpenFile (PVOID) - in/out 
  7365.     A pointer to the LogOpenFile parameter packet. 
  7366.  
  7367.     For Error Logging, this is a pointer to a LOFREQUEST structure. 
  7368.  
  7369.  
  7370. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile Return Value - rc ΓòÉΓòÉΓòÉ
  7371.  
  7372.  rc (APIRET) - returns 
  7373.     Return code. 
  7374.  
  7375.     LogOpenFile returns the following values: 
  7376.  
  7377.          0    No error 
  7378.          2    Error file not found 
  7379.          99    Error device in use 
  7380.         108    Error drive locked 
  7381.         110    Error open failed 
  7382.         523    Error LF invalid service 
  7383.         524    Error LF general failure 
  7384.         1703    Invalid data pointer 
  7385.         1701    Invalid LF log file id 
  7386.         1702    Invalid LF packet revision number 
  7387.         1704    Invalid LF filename length 
  7388.         1705    Invalid LF filename ptr 
  7389.         1706    Invalid LF parm packet ptr 
  7390.         1732    Invalid LF log file 
  7391.         1761    Error LF invalid packet size 
  7392.  
  7393.  
  7394. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Parameters ΓòÉΓòÉΓòÉ
  7395.  
  7396.  service (ULONG) - input 
  7397.     The class of Logging Service: 
  7398.  
  7399.     1         Error logging 
  7400.  
  7401.               All other values are reserved for future use. 
  7402.  
  7403.  pOpenFile (PVOID) - in/out 
  7404.     A pointer to the LogOpenFile parameter packet. 
  7405.  
  7406.     For Error Logging, this is a pointer to a LOFREQUEST structure. 
  7407.  
  7408.  rc (APIRET) - returns 
  7409.     Return code. 
  7410.  
  7411.     LogOpenFile returns the following values: 
  7412.  
  7413.          0    No error 
  7414.          2    Error file not found 
  7415.          99    Error device in use 
  7416.         108    Error drive locked 
  7417.         110    Error open failed 
  7418.         523    Error LF invalid service 
  7419.         524    Error LF general failure 
  7420.         1703    Invalid data pointer 
  7421.         1701    Invalid LF log file id 
  7422.         1702    Invalid LF packet revision number 
  7423.         1704    Invalid LF filename length 
  7424.         1705    Invalid LF filename ptr 
  7425.         1706    Invalid LF parm packet ptr 
  7426.         1732    Invalid LF log file 
  7427.         1761    Error LF invalid packet size 
  7428.  
  7429.  
  7430. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Remarks ΓòÉΓòÉΓòÉ
  7431.  
  7432. The library LFAPI.LIB must be linked with object files that use LogOpenFile 
  7433.  
  7434.  
  7435. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Related Functions ΓòÉΓòÉΓòÉ
  7436.  
  7437.      LogCloseFile 
  7438.      LogReadEntry 
  7439.  
  7440.  
  7441. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Example Code ΓòÉΓòÉΓòÉ
  7442.  
  7443. The following example verifies that the default file (1) is opened. 
  7444.  
  7445.   #define INCL_LOGGING
  7446.   #include <unidef.h>
  7447.   #include <os2.h>
  7448.   #include <stdio.h>
  7449.   #include <lfdef.h>
  7450.   #define ERROR_LOG_FILE_ID 1
  7451.  
  7452.   {
  7453.   APIRET rc;                      /* return code */
  7454.   ULONG service;
  7455.   UniChar filename╨½256!;
  7456.   ULONG filename_length;
  7457.   ULONG log_file_ID;
  7458.   LOFREQUEST open_file_packet;
  7459.  
  7460.   service = ERROR_LOGGING_SERVICE;
  7461.  
  7462.   /* Construct the LogOpenFile parameter packet  */
  7463.   open_file_packet.packet_size = sizeof(LOFREQUEST);
  7464.   open_file_packet.packet_revision_number = LF_UNI_API;
  7465.   log_file_ID = ERROR_LOG_FILE_ID;
  7466.   open_file_packet.log_file_ID = &log_file_ID;
  7467.   open_file_packet.filename_length = &filename_length; /*Indicates use the
  7468.                                                                Log File ID   */
  7469.   open_file_packet.filename = &filename;
  7470.  
  7471.   rc = LogOpenFile(service,                       /* service */
  7472.               &open_file_packet)              /* parameter packet  */
  7473.  
  7474.   if (rc |= 0)
  7475.     {
  7476.      printf("LogOpenFile error: return code = %d",rc);
  7477.      return;
  7478.     }
  7479.  
  7480.  
  7481. ΓòÉΓòÉΓòÉ <hidden> LogOpenFile - Topics ΓòÉΓòÉΓòÉ
  7482.  
  7483. Select an item: 
  7484.  
  7485. Syntax
  7486. Parameters
  7487. Returns
  7488. Remarks
  7489. Example Code
  7490. Related Functions
  7491.  
  7492.  
  7493. ΓòÉΓòÉΓòÉ 10.1.10. LogReadEntry ΓòÉΓòÉΓòÉ
  7494.  
  7495.  
  7496. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Syntax ΓòÉΓòÉΓòÉ
  7497.  
  7498. LogReadEntry reads a specified log entry from a log file. 
  7499.  
  7500. You can specify a filter that is used to select only entries of a desired 
  7501. class. The format of the filter is described by the event-filter data structure 
  7502. FILTERBLOCK. 
  7503.  
  7504.  
  7505. #define INCL_LOGGING
  7506. #include <os2.h>
  7507. #include <lfdef.h>
  7508.  
  7509. ULONG     service;
  7510. PVOID     pReadEntry;
  7511. APIRET    rc;
  7512.  
  7513. rc = LogReadEntry(service, pReadEntry);
  7514.  
  7515.  
  7516. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry Parameter - service ΓòÉΓòÉΓòÉ
  7517.  
  7518.  service (ULONG) - input 
  7519.     The class of Logging Service: 
  7520.  
  7521.     1         Error Logging 
  7522.  
  7523.               All other values are reserved for future use. 
  7524.  
  7525.  
  7526. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry Parameter - pReadEntry ΓòÉΓòÉΓòÉ
  7527.  
  7528.  pReadEntry (PVOID) - in/out 
  7529.     A pointer to the LogReadEntry parameter packet. 
  7530.  
  7531.     For Error Logging, this is a pointer to a LREREQUEST structure. 
  7532.  
  7533.     The caller can specify an event filter that is used to select only entries 
  7534.     of a desired class.  The format of the event filter is the same as the 
  7535.     event notification filter that is described in the LogOpenEventNotification 
  7536.     API.  The caller also provides an entry key data structure.  Entry keys are 
  7537.     generated by this API and by the LogWaitEvent API. 
  7538.  
  7539.     Log File searching typically begins at the entry that follows the one that 
  7540.     is specified within the event key.  The event key is updated as new entries 
  7541.     are read.  If no event filter is provided, the LogReadEntry API will read 
  7542.     the entry that is pointed to by the event key.  The caller also has the 
  7543.     option of starting a search at the logical beginning of the Log File. 
  7544.  
  7545.  
  7546. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry Return Value - rc ΓòÉΓòÉΓòÉ
  7547.  
  7548.  rc (APIRET) - returns 
  7549.     Return code. 
  7550.  
  7551.     LogReadEntry returns the following values: 
  7552.  
  7553.          0    No error 
  7554.         520    Error LF buf too small 
  7555.         523    Error LF invalid service 
  7556.         524    Error LF general failure 
  7557.         1703    Invalid data pointer 
  7558.         1701    Invalid LF log file id 
  7559.         1702    Invalid LF packet revision number 
  7560.         1706    Invalid LF parm packet ptr 
  7561.         1750    Invalid LF at end of log 
  7562.         1751    Invalid LF flag 
  7563.         1759    Invalid LF entry key 
  7564.         1761    Error LF invalid packet size 
  7565.  
  7566.  
  7567. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Parameters ΓòÉΓòÉΓòÉ
  7568.  
  7569.  service (ULONG) - input 
  7570.     The class of Logging Service: 
  7571.  
  7572.     1         Error Logging 
  7573.  
  7574.               All other values are reserved for future use. 
  7575.  
  7576.  pReadEntry (PVOID) - in/out 
  7577.     A pointer to the LogReadEntry parameter packet. 
  7578.  
  7579.     For Error Logging, this is a pointer to a LREREQUEST structure. 
  7580.  
  7581.     The caller can specify a filter that is used to select only entries of a 
  7582.     desired class.  The format of the filter is the same as the filter that is 
  7583.     described in the LogOpenEventNotification API pFilter parameter. The caller 
  7584.     also provides an entry key data structure.  Entry keys are generated by 
  7585.     this API and by the LogWaitEvent API. 
  7586.  
  7587.     Log File searching typically begins at the entry that follows the one that 
  7588.     is specified within the event key.  The event key is updated as new entries 
  7589.     are read.  If no event filter is provided, the LogReadEntry API will read 
  7590.     the entry that is pointed to by the event key.  The caller also has the 
  7591.     option of starting a search at the logical beginning of the Log File. 
  7592.  
  7593.  rc (APIRET) - returns 
  7594.     Return code. 
  7595.  
  7596.     LogReadEntry returns the following values: 
  7597.  
  7598.          0    No error 
  7599.         520    Error LF buf too small 
  7600.         523    Error LF invalid service 
  7601.         524    Error LF general failure 
  7602.         1703    Invalid data pointer 
  7603.         1701    Invalid LF log file id 
  7604.         1702    Invalid LF packet revision number 
  7605.         1706    Invalid LF parm packet ptr 
  7606.         1750    Invalid LF at end of log 
  7607.         1751    Invalid LF flag 
  7608.         1759    Invalid LF entry key 
  7609.         1761    Error LF invalid packet size 
  7610.  
  7611.  
  7612. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Remarks ΓòÉΓòÉΓòÉ
  7613.  
  7614. The library LFAPI.LIB must be linked with object files that use LogReadEntry. 
  7615.  
  7616.  
  7617. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Related Functions ΓòÉΓòÉΓòÉ
  7618.  
  7619.      LogFormatEntry 
  7620.      LogOpenEventNotification 
  7621.      LogWaitEvent 
  7622.  
  7623.  
  7624. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Example Code ΓòÉΓòÉΓòÉ
  7625.  
  7626. The following example reads an entry from the default Error Logging log file. 
  7627. It searches for the first (that is, most recent) entry in the file that has a 
  7628. product manufacturer named "IBM" and a severity less than 4. 
  7629.  
  7630.   #define INCL_LOGGING
  7631.   #include <unidef.h>
  7632.   #include <os2.h>
  7633.   #include <stdio.h>
  7634.   #include <lfdef.h>
  7635.   #define ERROR_LOG_FILE_ID 1
  7636.   #define START_AT_FIRST_ENTRY 0
  7637.  
  7638.   {
  7639.   ULONG service;
  7640.   ULONG severity = 4;
  7641.   ULONG entry_id = 12;
  7642.   LREREQUEST read_entry_packet;
  7643.   EVENTKEY EventKey;
  7644.   BYTE log_entry_buffer╨½2048!;
  7645.   ULONG log_entry_buffer_length;
  7646.   SUBBLOCK subblock1, subblock2, subblock3;
  7647.   HEADERBLOCK headerblock1, headerblock2;
  7648.   FILTERBLOCK filter;
  7649.  
  7650.   UniChar *manufacturer_name = L"IBM";
  7651.  
  7652.   service = ERROR_LOGGING_SERVICE;
  7653.  
  7654.   /*  Construct an event notification filter with 2 header blocks.    */
  7655.   /*  The first header block points to a single subblock.      */
  7656.   /*  The second header block points to a chain of two subblocks.  */
  7657.  
  7658.   filter.packet_size = sizeof(FILTERBLOCK);
  7659.   filter.packet_revision_number = LF_UNI_API;
  7660.   filter.header_block = &headerblock1;
  7661.  
  7662.   /*-------------construct headerblock1---------------------*/
  7663.   headerblock1.pSubblock = &subblock1;
  7664.   headerblock1.pNextBlock = &headerblock2;
  7665.  
  7666.   /*construct subblock1 of headerblock1*/
  7667.   subblock1.entry_attribute_ID = LOG_ERROR_DMI_VENDOR_TAG;
  7668.   subblock1.comparison_operator = LOG_ERROR_EQUAL;
  7669.   subblock1.comparison_data_ptr = &manufacturer_name;
  7670.   subblock1.next_subblock = NULL;
  7671.  
  7672.   /*------------construct headerblock2----------------------*/
  7673.   headerblock2.pSubblock = &subblock2;
  7674.   headerblock2.pNextBlock = NULL;
  7675.  
  7676.   /*construct subblock2 of headerblock2*/
  7677.   subblock2.entry_attribute_ID = LOG_ERROR_SEVERITY;
  7678.   subblock2.comparison_operator = LOG_ERROR_LESS_THAN;
  7679.   subblock2.comparison_data_ptr = severity;
  7680.   subblock2.comparison_data_length = sizeof(ULONG);
  7681.   subblock2.next_subblock = &subblock3;
  7682.  
  7683.   /*construct subblock3 of headerblock2*/
  7684.   subblock3.entry_attribute_ID = LOG_ERROR_ENTRY_ID;
  7685.   subblock3.comparison_operator = LOG_ERROR_GREATER_THAN;
  7686.   subblock3.comparison_data_ptr = entry_id;
  7687.   subblock3.comparison_data_length = sizeof(ULONG);
  7688.   subblock3.next_subblock = null;
  7689.  
  7690.   /* Construct the LogReadEntry parameter packet. */
  7691.   read_entry_packet.packet_size = sizeof(LREREQUEST);
  7692.   read_entry_packet.packet_revision_number = LF_UNI_API;
  7693.   read_entry_packet.log_file_ID = ERROR_LOG_FILE_ID;
  7694.   read_entry_packet.flags = START_AT_FIRST_ENTRY;
  7695.   read_entry_packet.pEventKey = &EventKey;
  7696.   read_entry_packet.pFilter = &filter;
  7697.   log_entry_buffer_length = sizeof(log_entry_buffer);
  7698.   read_entry_packet.pLogEntryBufferLength = &log_entry_buffer_length;
  7699.   read_entry_packet.LogEntryBuffer = &log_entry_buffer;
  7700.  
  7701.   rc = LogReadEntry(service,           /*service*/
  7702.               &read_entry_packet); /*parameter packet*/
  7703.  
  7704.   if (rc |= 0)
  7705.     {
  7706.      printf("LogReadEntry error: return code = %d",rc);
  7707.      return;
  7708.     }
  7709.  
  7710.  
  7711. ΓòÉΓòÉΓòÉ <hidden> LogReadEntry - Topics ΓòÉΓòÉΓòÉ
  7712.  
  7713. Select an item: 
  7714.  
  7715. Syntax
  7716. Parameters
  7717. Returns
  7718. Remarks
  7719. Example Code
  7720. Related Functions
  7721.  
  7722.  
  7723. ΓòÉΓòÉΓòÉ 10.1.11. LogWaitEvent ΓòÉΓòÉΓòÉ
  7724.  
  7725.  
  7726. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Syntax ΓòÉΓòÉΓòÉ
  7727.  
  7728. LogWaitEvent waits for event-notification information for which the process 
  7729. registered. You receive the event-key data structure and log entry data from 
  7730. the Logging Service. 
  7731.  
  7732. For details on event-notification filters, see LogOpenEventNotification. 
  7733.  
  7734.  
  7735. #define INCL_LOGGING
  7736. #include <os2.h>
  7737. #include <lfdef.h>
  7738.  
  7739. ULONG     service;
  7740. PVOID     pWaitEvent;
  7741. APIRET    rc;
  7742.  
  7743. rc = LogWaitEvent(service, pWaitEvent);
  7744.  
  7745.  
  7746. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent Parameter - service ΓòÉΓòÉΓòÉ
  7747.  
  7748.  service (ULONG) - input 
  7749.     The class of Logging Service: 
  7750.  
  7751.     1         Error Logging 
  7752.  
  7753.               All other values are reserved for future use. 
  7754.  
  7755.  
  7756. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent Parameter - pWaitEvent ΓòÉΓòÉΓòÉ
  7757.  
  7758.  pWaitEvent (PVOID) - in/out 
  7759.     A pointer to the LogWaitEvent parameter packet. 
  7760.  
  7761.     For Error Logging, this is a pointer to a LWEREQUEST structure. 
  7762.  
  7763.  
  7764. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent Return Value - rc ΓòÉΓòÉΓòÉ
  7765.  
  7766.  rc (APIRET) - returns 
  7767.     Return code. 
  7768.  
  7769.     LogWaitEvent returns the following values: 
  7770.  
  7771.          0    No error 
  7772.         520    Error LF buf too small 
  7773.         523    Error LF invalid service 
  7774.         1703    Invalid data pointer 
  7775.         1702    Invalid LF packet revision number 
  7776.         1704    Invalid LF filename length 
  7777.         1705    Invalid LF filename ptr 
  7778.         1706    Invalid LF parm packet ptr 
  7779.         1709    Invalid logrecord buffer ptr 
  7780.         1751    Invalid LF flag 
  7781.         1758    RAS invalid log notify id 
  7782.         1761    RAS invalid packet size 
  7783.         2055    Error LF timeout 
  7784.         2508    RAS invalid eventkey ptr 
  7785.         2509    RAS invalid pathlen ptr 
  7786.         2510    RAS invalid buflen ptr 
  7787.  
  7788.  
  7789. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Parameters ΓòÉΓòÉΓòÉ
  7790.  
  7791.  service (ULONG) - input 
  7792.     The class of Logging Service: 
  7793.  
  7794.     1         Error Logging 
  7795.  
  7796.               All other values are reserved for future use. 
  7797.  
  7798.  pWaitEvent (PVOID) - in/out 
  7799.     A pointer to the LogWaitEvent parameter packet. 
  7800.  
  7801.     For Error Logging, this is a pointer to a LWEREQUEST structure. 
  7802.  
  7803.  rc (APIRET) - returns 
  7804.     Return code. 
  7805.  
  7806.     LogWaitEvent returns the following values: 
  7807.  
  7808.          0    No error 
  7809.         520    Error LF buf too small 
  7810.         523    Error LF invalid service 
  7811.         1703    Invalid data pointer 
  7812.         1702    Invalid LF packet revision number 
  7813.         1704    Invalid LF filename length 
  7814.         1705    Invalid LF filename ptr 
  7815.         1706    Invalid LF parm packet ptr 
  7816.         1709    Invalid logrecord buffer ptr 
  7817.         1751    Invalid LF flag 
  7818.         1758    RAS invalid log notify id 
  7819.         1761    RAS invalid packet size 
  7820.         2055    Error LF timeout 
  7821.         2508    RAS invalid eventkey ptr 
  7822.         2509    RAS invalid pathlen ptr 
  7823.         2510    RAS invalid buflen ptr 
  7824.  
  7825.  
  7826. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Remarks ΓòÉΓòÉΓòÉ
  7827.  
  7828. The library LFAPI.LIB must be linked with object files that use LogWaitEvent. 
  7829.  
  7830.  
  7831. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Related Functions ΓòÉΓòÉΓòÉ
  7832.  
  7833.      LogOpenEventNotification 
  7834.      LogCloseEventNotification 
  7835.      LogChangeEventFilter 
  7836.      LogReadEntry 
  7837.  
  7838.  
  7839. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Example Code ΓòÉΓòÉΓòÉ
  7840.  
  7841. The following example waits for an event notification from the Error Logging 
  7842. service. The call will wait indefinitely for an event notification. 
  7843.  
  7844.   #define INCL_LOGGING
  7845.   #include <unidef.h>
  7846.   #include <os2.h>
  7847.   #include <stdio.h>
  7848.   #include <lfdef.h>
  7849.  
  7850.   {
  7851.   APIRET rc;              /* return code */
  7852.   ULONG service;
  7853.   LWEREQUEST log_wait_event_packet;
  7854.   HLOGNOTIFY log_notify;
  7855.   EVENTKEY EventKey;
  7856.   BYTE log_entry_buffer╨½4096!;
  7857.   UniChar pathname╨½512!;
  7858.   ULONG pathname_length = sizeof(pathname);
  7859.  
  7860.  
  7861.   service =  ERROR_LOGGING_SERVICE;
  7862.  
  7863.   /* Construct the LogChangeEventFilter parameter packet  */
  7864.   log_wait_event_packet.packet_size = sizeof(LWEREQUEST);
  7865.   log_wait_event_packet.packet_revision_number = LF_UNI_API;
  7866.   log_wait_event_packet.LogNotify = log_notify;
  7867.   log_wait_event_packet.pEventKey = &EventKey;
  7868.   log_wait_event_packet.pLogEntryBuffer = &log_entry_buffer;
  7869.   log_wait_event_packet.timeout = 0;
  7870.   log_wait_event_packet.queue_flags = 0;
  7871.   log_wait_event_packet.pathname_length = &pathname_length;
  7872.   log_wait_event_packet.pathname = pathname;
  7873.  
  7874.   rc = LogWaitEvent(service,                      /* service */
  7875.                    &log_wait_event_packet)        /* parameter packet */
  7876.   if (rc |= 0)
  7877.     {
  7878.      printf("LogWaitEvent error: return code = %d",rc);
  7879.      return;
  7880.     }
  7881.  
  7882.  
  7883. ΓòÉΓòÉΓòÉ <hidden> LogWaitEvent - Topics ΓòÉΓòÉΓòÉ
  7884.  
  7885. Select an item: 
  7886.  
  7887. Syntax
  7888. Parameters
  7889. Returns
  7890. Remarks
  7891. Example Code
  7892. Related Functions
  7893.  
  7894.  
  7895. ΓòÉΓòÉΓòÉ 10.1.12. TraceCreateEntry ΓòÉΓòÉΓòÉ
  7896.  
  7897.  
  7898. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry - Syntax ΓòÉΓòÉΓòÉ
  7899.  
  7900. TraceCreateEntry creates an event entry in the system event buffer. It is the 
  7901. static trace-point creation mechanism. 
  7902.  
  7903.  
  7904. #define INCL_TRACE
  7905. #include <os2.h>
  7906.  
  7907. PTCEREQUEST    pTraceCreateEntry;
  7908. APIRET         rc;
  7909.  
  7910. rc = TraceCreateEntry(pTraceCreateEntry);
  7911.  
  7912.  
  7913. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry Parameter - pTraceCreateEntry ΓòÉΓòÉΓòÉ
  7914.  
  7915.  pTraceCreateEntry (PTCEREQUEST) - input 
  7916.     Pointer to the TraceCreateEntry parameter packet. 
  7917.  
  7918.  
  7919. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry Return Value - rc ΓòÉΓòÉΓòÉ
  7920.  
  7921.  rc (APIRET) - returns 
  7922.     TraceCreateEntry returns the following values: 
  7923.  
  7924.         1702  INVALID_LF_PACKET_REVISION_NUMBER 
  7925.         1703  INVALID_DATA_POINTER 
  7926.         1802  INVALID_TRACE_MAJOR_CODE 
  7927.         1803  INVALID_TRACE_MINOR_CODE 
  7928.         1806  INVALID_PACKET_SIZE 
  7929.  
  7930.  
  7931. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry - Parameters ΓòÉΓòÉΓòÉ
  7932.  
  7933.  pTraceCreateEntry (PTCEREQUEST) - input 
  7934.     Pointer to the TraceCreateEntry parameter packet. 
  7935.  
  7936.  rc (APIRET) - returns 
  7937.     TraceCreateEntry returns the following values: 
  7938.  
  7939.         1702  INVALID_LF_PACKET_REVISION_NUMBER 
  7940.         1703  INVALID_DATA_POINTER 
  7941.         1802  INVALID_TRACE_MAJOR_CODE 
  7942.         1803  INVALID_TRACE_MINOR_CODE 
  7943.         1806  INVALID_PACKET_SIZE 
  7944.  
  7945.  
  7946. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry - Remarks ΓòÉΓòÉΓòÉ
  7947.  
  7948. Event trace records contain information that describes the occurrence of 
  7949. software events. They can be used both as service aids and in performance 
  7950. monitoring. 
  7951.  
  7952. The library TRACE.LIB must be linked with object files that use 
  7953. TraceCreateEntry. 
  7954.  
  7955.  
  7956. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry - Example Code ΓòÉΓòÉΓòÉ
  7957.  
  7958. The following example adds an event trace entry to the system trace buffer. For 
  7959. this example, the trace entry will contain the contents of two internal program 
  7960. variables. 
  7961.  
  7962.   #define INCL_DOSPROCESS
  7963.  
  7964.   #include <stdio.h>                     /* C library for standard I/O        */
  7965.   #include <stdlib.h>                    /* C library of standard routines    */
  7966.   #include <string.h>                    /* C library for string operations   */
  7967.   #include <os2.h>                       /* OS/2 Dos api calls                */
  7968.   #include <trace.h>                     /* Trace public API data structures  */
  7969.  
  7970.   #define HKWD_TEST 43
  7971.   #define hkwd_test_entry 0001
  7972.  
  7973.   struct {
  7974.     ULONG  var1;
  7975.     USHORT var2;
  7976.   } trace_data;
  7977.  
  7978.   TCEREQUEST trace_create_entry_packet;
  7979.  
  7980.   VOID main(VOID)
  7981.   {
  7982.     APIRET rc = NO_ERROR;
  7983.  
  7984.     /**************************************************************************/
  7985.     /* Set up the TraceCreateEntry parameter packet                           */
  7986.     /**************************************************************************/
  7987.     trace_create_entry_packet.packet_size            = sizeof(TCEREQUEST);
  7988.     trace_create_entry_packet.packet_revision_number = TRACE_RELEASE;
  7989.     trace_create_entry_packet.major_event_code       = HKWD_TEST;
  7990.     trace_create_entry_packet.minor_event_code       = hkwd_test_entry;
  7991.     trace_create_entry_packet.event_data_length      = sizeof(trace_data);
  7992.     trace_create_entry_packet.event_data             = (PVOID)&trace_data;
  7993.  
  7994.     /**************************************************************************/
  7995.     /* Place tracepoint data in the tracepoint data buffer                    */
  7996.     /**************************************************************************/
  7997.     trace_data.var1 = UINT_MAX;
  7998.     trace_data.var2 = 1;
  7999.  
  8000.     rc = TraceCreateEntry(&trace_create_entry_packet);
  8001.     if (rc |= NO_ERROR) {
  8002.       printf("TraceCreateEntry RC(%d)\n", rc);
  8003.     }
  8004.   }
  8005.  
  8006.  
  8007. ΓòÉΓòÉΓòÉ <hidden> TraceCreateEntry - Topics ΓòÉΓòÉΓòÉ
  8008.  
  8009. Select an item: 
  8010.  
  8011. Syntax
  8012. Parameters
  8013. Returns
  8014. Remarks
  8015. Example Code
  8016.  
  8017.  
  8018. ΓòÉΓòÉΓòÉ 10.2. Problem Determination Data Types ΓòÉΓòÉΓòÉ
  8019.  
  8020. This section describes the following data types that are used with the Problem 
  8021. Determination functions: 
  8022.  
  8023.      CONFIGPARMS 
  8024.      DISABLEPRODUCT 
  8025.      DMIDATA 
  8026.      DUMPDATAVAR 
  8027.      DUMPUSERDATA 
  8028.      EVENTKEY 
  8029.      FFSTPARMS 
  8030.      FILTERBLOCK 
  8031.      HEADERBLOCK 
  8032.      LCEFREQUEST 
  8033.      LCENREQUEST 
  8034.      LCFREQUEST 
  8035.      LFEREQUEST 
  8036.      LOENREQUEST 
  8037.      LOFREQUEST 
  8038.      LREREQUEST 
  8039.      LWEREQUEST 
  8040.      MODINFO 
  8041.      MSGINSDATA 
  8042.      MSGINSTXT 
  8043.      PRODUCTDATA 
  8044.      PRODUCTINFO 
  8045.      SUBBLOCK 
  8046.      TCEREQUEST 
  8047.  
  8048.  
  8049. ΓòÉΓòÉΓòÉ 10.2.1. CONFIGPARMS ΓòÉΓòÉΓòÉ
  8050.  
  8051. typedef struct _CONFIGPARMS {
  8052.   ULONG               packet_size;
  8053.   ULONG               packet_revision_number;
  8054.   ULONG               dump_file_wrap;
  8055.   UniChar            *dump_file_directory_name_length;
  8056.   PVOID               dump_file_directory_name;
  8057.   ULONG               no_of_probe_disabled_products;
  8058.   PDISABLEPRODUCT     pDisableProduct;
  8059.   ULONG               message_pop_up;
  8060. } CONFIGPARMS;
  8061.  
  8062. typedef CONFIGPARMS *PCONFIGPARMS;
  8063.  
  8064.  
  8065. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - packet_size ΓòÉΓòÉΓòÉ
  8066.  
  8067.  packet_size (ULONG) 
  8068.     Size, in bytes, of this packet. 
  8069.  
  8070.  
  8071. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8072.  
  8073.  packet_revision_number (ULONG) 
  8074.     A long integer value that indicates the revision level of the parameter 
  8075.     packet. Use one of the following values defined in FFST.H: 
  8076.  
  8077.     UniCode parameter packet.     Use CONFIGPARMS_OS2_UNICODE to specify the 
  8078.                                   UniCode parameter packet. 
  8079.     ASCII parameter packet.       Use CONFIGPARMS_OS2_ASCII to specify the 
  8080.                                   ASCII parameter packet. 
  8081.  
  8082.  
  8083. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - dump_file_wrap ΓòÉΓòÉΓòÉ
  8084.  
  8085.  dump_file_wrap (ULONG) 
  8086.     Indicates whether the dumps captured by FFST are to be wrapped or not. 
  8087.  
  8088.     If dump wrap is set to on then dumps will be wrapped when the specified 
  8089.     maximum size is reached. If dump wrap is set to off when the specified 
  8090.     maximum size is reached then FFST will not create any new dump files. 
  8091.  
  8092.     May be one of the following values: 
  8093.  
  8094.     0        Set dump wrap to off 
  8095.     1        Set dump wrap to on (system default) 
  8096.  
  8097.  
  8098. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - dump_file_directory_name_length ΓòÉΓòÉΓòÉ
  8099.  
  8100.  dump_file_directory_name_length (ULONG) 
  8101.     Length, in bytes, of the dump directory name. 
  8102.  
  8103.  
  8104. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - dump_file_directory_name ΓòÉΓòÉΓòÉ
  8105.  
  8106.  dump_file_directory_name (PVOID) 
  8107.     Pointer to the fully-qualified dump directory name. 
  8108.  
  8109.  
  8110. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - no_of_probe_disabled_products ΓòÉΓòÉΓòÉ
  8111.  
  8112.  no_of_probe_disabled_products (ULONG) 
  8113.     Number of products whose FFSTProbes are disabled. 
  8114.  
  8115.  
  8116. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - pDisableProduct ΓòÉΓòÉΓòÉ
  8117.  
  8118.  pDisableProduct (PDISABLEPRODUCT) 
  8119.     Pointer to the structure that identifies the product data of the disabled 
  8120.     probe. This parameter can be ignored when no_of_probe_disabled_products is 
  8121.     0 or 'FFFFFFFF'. 
  8122.  
  8123.  
  8124. ΓòÉΓòÉΓòÉ <hidden> CONFIGPARMS Field - message_pop_up ΓòÉΓòÉΓòÉ
  8125.  
  8126.  message_pop_up (ULONG) 
  8127.     Reserved parameter. 
  8128.  
  8129.  
  8130. ΓòÉΓòÉΓòÉ 10.2.2. DISABLEPRODUCT ΓòÉΓòÉΓòÉ
  8131.  
  8132. typedef struct _DISABLEPRODUCT {
  8133.   UniChar      *DMI_vendor_tag;
  8134.   UniChar      *DMI_tag;
  8135.   UniChar      *DMI_revision;
  8136. } DISABLEPRODUCT;
  8137.  
  8138. typedef DISABLEPRODUCT *PDISABLEPRODUCT;
  8139.  
  8140.  
  8141. ΓòÉΓòÉΓòÉ <hidden> DISABLEPRODUCT Field - DMI_vendor_tag ΓòÉΓòÉΓòÉ
  8142.  
  8143.  DMI_vendor_tag (UniChar *) 
  8144.     Pointer to the short product manufacturer name that was logged in the DMI 
  8145.     database. 
  8146.  
  8147.  
  8148. ΓòÉΓòÉΓòÉ <hidden> DISABLEPRODUCT Field - DMI_tag ΓòÉΓòÉΓòÉ
  8149.  
  8150.  DMI_tag (UniChar *) 
  8151.     Pointer to the short product name that was logged in the DMI database. 
  8152.  
  8153.  
  8154. ΓòÉΓòÉΓòÉ <hidden> DISABLEPRODUCT Field - DMI_revision ΓòÉΓòÉΓòÉ
  8155.  
  8156.  DMI_revision (UniChar *) 
  8157.     Pointer to the product revision information that was logged in the DMI 
  8158.     database. 
  8159.  
  8160.  
  8161. ΓòÉΓòÉΓòÉ 10.2.3. DMIDATA ΓòÉΓòÉΓòÉ
  8162.  
  8163. typedef struct _DMIDATA {
  8164.   ULONG         packet_size;
  8165.   ULONG         packet_revision_number;
  8166.   PVOID         DMI_product_ID;
  8167.   PVOID         DMI_modification_level;
  8168.   PVOID         DMI_fix_level;
  8169.   ULONG         template_filename_length;
  8170.   PVOID         template_filename;
  8171. } DMIDATA;
  8172.  
  8173. typedef DMIDATA *PDMIDATA;
  8174.  
  8175. Use appropriate packet_revision_number to indicate whether character
  8176. data in the parameter packet is in UniCode or ASCII format.
  8177.  
  8178.  
  8179. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - packet_size ΓòÉΓòÉΓòÉ
  8180.  
  8181.  packet_size (ULONG) 
  8182.     Length, in bytes, of this packet. 
  8183.  
  8184.  
  8185. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8186.  
  8187.  packet_revision_number (ULONG) 
  8188.     A long integer value that indicates the revision level of the parameter 
  8189.     packet. Use one of the following values defined in FFST.H: 
  8190.  
  8191.     UniCode parameter packet.     Use DMIDATA_UNICODE to specify the UniCode 
  8192.                                   parameter packet. 
  8193.     ASCII parameter packet.       Use DMIDATA_ASCII to specify the ASCII 
  8194.                                   parameter packet. 
  8195.  
  8196.  
  8197. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - DMI_product_ID ΓòÉΓòÉΓòÉ
  8198.  
  8199.  DMI_product_ID (PVOID) 
  8200.     Pointer to the product ID. 
  8201.  
  8202.  
  8203. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - DMI_modification_level ΓòÉΓòÉΓòÉ
  8204.  
  8205.  DMI_modification_level (PVOID) 
  8206.     Pointer to the product modification level. 
  8207.  
  8208.  
  8209. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - DMI_fix_level ΓòÉΓòÉΓòÉ
  8210.  
  8211.  DMI_fix_level (PVOID) 
  8212.     Pointer to the product fix level. 
  8213.  
  8214.  
  8215. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - template_filename_length ΓòÉΓòÉΓòÉ
  8216.  
  8217.  template_filename_length (ULONG) 
  8218.     Length of the template repository file name pointed to by 
  8219.     template_filename. 
  8220.  
  8221.  
  8222. ΓòÉΓòÉΓòÉ <hidden> DMIDATA Field - template_filename ΓòÉΓòÉΓòÉ
  8223.  
  8224.  template_filename (PVOID) 
  8225.     Pointer to the fully-qualified path of the template repository file. 
  8226.  
  8227.  
  8228. ΓòÉΓòÉΓòÉ 10.2.4. DUMPDATAVAR ΓòÉΓòÉΓòÉ
  8229.  
  8230. typedef struct _DUMPDATAVAR {
  8231.   ULONG     var_n_length;
  8232.   PVOID     var_n;
  8233. } DUMPDATAVAR;
  8234.  
  8235. typedef DUMPDATAVAR *PDUMPDATAVAR;
  8236.  
  8237.  
  8238. ΓòÉΓòÉΓòÉ <hidden> DUMPDATAVAR Field - var_n_length ΓòÉΓòÉΓòÉ
  8239.  
  8240.  var_n_length (ULONG) 
  8241.     Length, in bytes, of the data structure pointed to by var_n. 
  8242.  
  8243.  
  8244. ΓòÉΓòÉΓòÉ <hidden> DUMPDATAVAR Field - var_n ΓòÉΓòÉΓòÉ
  8245.  
  8246.  var_n (PVOID) 
  8247.     Pointer to the data structure to be collected. 
  8248.  
  8249.  
  8250. ΓòÉΓòÉΓòÉ 10.2.5. DUMPUSERDATA ΓòÉΓòÉΓòÉ
  8251.  
  8252. typedef struct _DUMPUSERDATA {
  8253.   ULONG           no_of_variables;
  8254.   DUMPDATAVAR     DumpDataVar[MAX_USER_DUMPS];
  8255. } DUMPUSERDATA;
  8256.  
  8257. typedef DUMPUSERDATA *PDUMPUSERDATA;
  8258.  
  8259.  
  8260. ΓòÉΓòÉΓòÉ <hidden> DUMPUSERDATA Field - no_of_variables ΓòÉΓòÉΓòÉ
  8261.  
  8262.  no_of_variables (ULONG) 
  8263.     Number of data/structures to be collected by the probe. Maximum number of 
  8264.     variables that can be collected is 30. 
  8265.  
  8266.  
  8267. ΓòÉΓòÉΓòÉ <hidden> DUMPUSERDATA Field - DumpDataVar[MAX_USER_DUMPS] ΓòÉΓòÉΓòÉ
  8268.  
  8269.  DumpDataVar[MAX_USER_DUMPS] (DUMPDATAVAR) 
  8270.     Dump data variables repeated no_of_variables times. 
  8271.  
  8272.  
  8273. ΓòÉΓòÉΓòÉ 10.2.6. EVENTKEY ΓòÉΓòÉΓòÉ
  8274.  
  8275. Event key data structure. 
  8276.  
  8277. typedef struct _EVENTKEY {
  8278.   ULONG     location;
  8279.   ULONG     entry_ID;
  8280. } EVENTKEY;
  8281.  
  8282. typedef EVENTKEY *PEVENTKEY;
  8283.  
  8284.  
  8285. ΓòÉΓòÉΓòÉ <hidden> EVENTKEY Field - location ΓòÉΓòÉΓòÉ
  8286.  
  8287.  location (ULONG)  - output 
  8288.     An unsigned long word that contains a relative location within the log 
  8289.     file. This value will point to the beginning of a log entry. 
  8290.  
  8291.  
  8292. ΓòÉΓòÉΓòÉ <hidden> EVENTKEY Field - entry_ID ΓòÉΓòÉΓòÉ
  8293.  
  8294.  entry_ID (ULONG)  - output 
  8295.     Entry ID of the record. 
  8296.  
  8297.  
  8298. ΓòÉΓòÉΓòÉ 10.2.7. FFSTPARMS ΓòÉΓòÉΓòÉ
  8299.  
  8300. typedef struct _FFSTPARMS {
  8301.   ULONG             packet_size;
  8302.   ULONG             packet_revision_number;
  8303.   PVOID             module_name;
  8304.   ULONG             probe_ID;
  8305.   ULONG             severity;
  8306.   ULONG             template_record_ID;
  8307.   PMSGINSDATA       pMsgInsData;
  8308.   ULONG             probe_flags;
  8309.   PDUMPUSERDATA     pDumpUserData;
  8310.   ULONG             log_user_data_length;
  8311.   PVOID             log_user_data;
  8312. } FFSTPARMS;
  8313.  
  8314. typedef FFSTPARMS *PFFSTPARMS;
  8315.  
  8316. Use appropriate packet_revision_number to indicate whether character
  8317. data in the parameter packet is in UniCode or ASCII format.
  8318.  
  8319.  
  8320. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - packet_size ΓòÉΓòÉΓòÉ
  8321.  
  8322.  packet_size (ULONG) 
  8323.     Length, in bytes, of the packet. 
  8324.  
  8325.  
  8326. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8327.  
  8328.  packet_revision_number (ULONG) 
  8329.     A long integer value that indicates the revision level of the parameter 
  8330.     packet. Use one of the following values defined in FFST.H: 
  8331.  
  8332.     UniCode parameter packet.     Use FFSTPARMS_OS2_UNICODE to specify the 
  8333.                                   UniCode parameter packet. 
  8334.     ASCII parameter packet.       Use FFSTPARMS_OS2_ASCII to specify the ASCII 
  8335.                                   parameter packet. 
  8336.  
  8337.  
  8338. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - module_name ΓòÉΓòÉΓòÉ
  8339.  
  8340.  module_name (PVOID) 
  8341.     Address of the module name. 
  8342.  
  8343.  
  8344. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - probe_ID ΓòÉΓòÉΓòÉ
  8345.  
  8346.  probe_ID (ULONG) 
  8347.     Unique identifier of the detection point within the module_name. 
  8348.  
  8349.  
  8350. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - severity ΓòÉΓòÉΓòÉ
  8351.  
  8352.  severity (ULONG) 
  8353.     The severity of this error. Valid values are 1 (highest) through 6 
  8354.     (lowest): 
  8355.  
  8356.     1         SEVERITY1 
  8357.               Critical: Condition from which there is no recovery. 
  8358.     2         SEVERITY2 
  8359.               Major: Condition signifying that the loss of availability of a 
  8360.               device or subproduct is imminent, or the performance of the 
  8361.               device or subproduct has degraded to below an acceptable level. 
  8362.     3         SEVERITY3 
  8363.               Minor: Condition that was recovered from after a number of 
  8364.               attempts or a nonservice-affecting fault has occurred that should 
  8365.               be corrected before a more serious error occurs. 
  8366.     4         SEVERITY4 
  8367.               Warning: A potential error has been detected before any 
  8368.               significant effects have been felt. 
  8369.     5         SEVERITY5 
  8370.               Indeterminate: Condition where it is not possible to determine 
  8371.               the severity of the error. 
  8372.     6         SEVERITY6 
  8373.               Information 
  8374.  
  8375.               For severity 1, 2 and 3, FFST will request trace information, if 
  8376.               system trace is 'ON'. For severity 4, 5 and 6, FFST will not 
  8377.               request trace information, unless the end user specifically 
  8378.               requests it through a probe control table entry. 
  8379.  
  8380.  
  8381. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - template_record_ID ΓòÉΓòÉΓòÉ
  8382.  
  8383.  template_record_ID (ULONG) 
  8384.     Identifier to specify the Log Entry Format Template that is be used by 
  8385.     SYSLOG utility. 
  8386.  
  8387.  
  8388. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - pMsgInsData ΓòÉΓòÉΓòÉ
  8389.  
  8390.  pMsgInsData (PMSGINSDATA) 
  8391.     A pointer to message insert data. NULL indicates that there are no insert 
  8392.     texts for the message. 
  8393.  
  8394.  
  8395. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - probe_flags ΓòÉΓòÉΓòÉ
  8396.  
  8397.  probe_flags (ULONG) 
  8398.     Indicates what type of system information is needed and where to keep the 
  8399.     information that is collected. If PSTAT or Process Environment are 
  8400.     requested, FFST will create a dump file and will keep this information in 
  8401.     the dump file. The user can specify a combination of these flags. As an 
  8402.     example, if it is desired to capture both PSTAT and Process Environment 
  8403.     information, then the value specified will be 3. 
  8404.  
  8405.     If the user sets any of the probe flags listed below, FFST will create an 
  8406.     FFST dump file where the information will be stored. The exceptions are 
  8407.     Process Dump (PROCESS_DUMP_FLAG) and System Trace (CAPTURE_TRACE). These 
  8408.     processes will have their own files that FFST will maintain. Trace 
  8409.     information will be automatically generated for severity 1, 2, and 3 
  8410.     probes. For severity 4, 5 and 6 probes, trace will not be collected. 
  8411.  
  8412.     PSTAT_FLAG (0x01) Capture PSTAT information. 
  8413.     PROC_ENV_FLAG (0x02) Capture process environment information. 
  8414.  
  8415.  
  8416. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - pDumpUserData ΓòÉΓòÉΓòÉ
  8417.  
  8418.  pDumpUserData (PDUMPUSERDATA) 
  8419.     Pointer to user_data containing various storage areas. Maximum storage 
  8420.     areas that can be specified are 30. NULL indicates that there are no user 
  8421.     data items for this probe call. The items specified will be stored in a 
  8422.     dump file created by FFST. Each individual data area can have a maximum 
  8423.     size of 32K. 
  8424.  
  8425.  
  8426. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - log_user_data_length ΓòÉΓòÉΓòÉ
  8427.  
  8428.  log_user_data_length (ULONG) 
  8429.     The length in bytes of log_user_data. A length of 0 means there is no user 
  8430.     data. 
  8431.  
  8432.  
  8433. ΓòÉΓòÉΓòÉ <hidden> FFSTPARMS Field - log_user_data ΓòÉΓòÉΓòÉ
  8434.  
  8435.  log_user_data (PVOID) 
  8436.     Pointer to data to be placed in the Error Log File. The data can be 
  8437.     formatted through the template for display. If no user data is desired, 
  8438.     then the pointer must be null. This data will be stored in the Error Log 
  8439.     File as part of the log entry. 
  8440.  
  8441.  
  8442. ΓòÉΓòÉΓòÉ 10.2.8. FILTERBLOCK ΓòÉΓòÉΓòÉ
  8443.  
  8444. Filter block structure. 
  8445.  
  8446. typedef struct _FILTERBLOCK {
  8447.   ULONG            packet_size;
  8448.   ULONG            packet_revision_number;
  8449.   PHEADERBLOCK     header_block;
  8450. } FILTERBLOCK;
  8451.  
  8452. typedef FILTERBLOCK *PFILTERBLOCK;
  8453.  
  8454. Use appropriate packet_revision_number to indicate whether character
  8455. data in the parameter packet is in UniCode or ASCII format.
  8456.  
  8457.  
  8458. ΓòÉΓòÉΓòÉ <hidden> FILTERBLOCK Field - packet_size ΓòÉΓòÉΓòÉ
  8459.  
  8460.  packet_size (ULONG)  - input 
  8461.     The size, in bytes, of this packet. 
  8462.  
  8463.  
  8464. ΓòÉΓòÉΓòÉ <hidden> FILTERBLOCK Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8465.  
  8466.  packet_revision_number (ULONG)  - input 
  8467.     A long integer value that indicates the revision level of the parameter 
  8468.     packet. 
  8469.  
  8470.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8471.               specify the UniCode parameter packet for the revision level. 
  8472.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8473.               specify the ASCII parameter packet for the revision level. 
  8474.  
  8475.  
  8476. ΓòÉΓòÉΓòÉ <hidden> FILTERBLOCK Field - header_block ΓòÉΓòÉΓòÉ
  8477.  
  8478.  header_block (PHEADERBLOCK)  - input 
  8479.     Pointer to the first header block. 
  8480.  
  8481.  
  8482. ΓòÉΓòÉΓòÉ 10.2.9. HEADERBLOCK ΓòÉΓòÉΓòÉ
  8483.  
  8484. Header block for an event notification filter structure. 
  8485.  
  8486. typedef struct _HEADERBLOCK {
  8487.   PSUBBLOCK                 pSubblock;
  8488.   struct _HEADERBLOCK      *pNextBlock;
  8489. } HEADERBLOCK;
  8490.  
  8491. typedef HEADERBLOCK *PHEADERBLOCK;
  8492.  
  8493.  
  8494. ΓòÉΓòÉΓòÉ <hidden> HEADERBLOCK Field - pSubblock ΓòÉΓòÉΓòÉ
  8495.  
  8496.  pSubblock (PSUBBLOCK)  - input 
  8497.     Pointer to the first sub-block. 
  8498.  
  8499.  
  8500. ΓòÉΓòÉΓòÉ <hidden> HEADERBLOCK Field - pNextBlock ΓòÉΓòÉΓòÉ
  8501.  
  8502.  pNextBlock (struct _HEADERBLOCK *)  - input 
  8503.     Pointer to the next header block in the chain. A NULL indicates the end of 
  8504.     the chain. 
  8505.  
  8506.  
  8507. ΓòÉΓòÉΓòÉ 10.2.10. LCEFREQUEST ΓòÉΓòÉΓòÉ
  8508.  
  8509. LogChangeEventFilter parameter packet. 
  8510.  
  8511. typedef struct _LCEFREQUEST {
  8512.   ULONG            packet_size;
  8513.   ULONG            packet_revision_number;
  8514.   ULONG            purge_flags;
  8515.   ULONG            LogNotify;
  8516.   PFILTERBLOCK     pFilter;
  8517. } LCEFREQUEST;
  8518.  
  8519. typedef LCEFREQUEST *PLCEFREQUEST;
  8520.  
  8521. Use appropriate packet_revision_number to indicate whether character
  8522. data in the parameter packet is in UniCode or ASCII format.
  8523.  
  8524.  
  8525. ΓòÉΓòÉΓòÉ <hidden> LCEFREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8526.  
  8527.  packet_size (ULONG)  - input 
  8528.     The size, in bytes, of this packet. 
  8529.  
  8530.  
  8531. ΓòÉΓòÉΓòÉ <hidden> LCEFREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8532.  
  8533.  packet_revision_number (ULONG)  - input 
  8534.     A long integer value that indicates the revision level of the parameter 
  8535.     packet. 
  8536.  
  8537.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8538.               specify the UniCode parameter packet for the revision level. 
  8539.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8540.               specify the ASCII parameter packet for the revision level. 
  8541.  
  8542.  
  8543. ΓòÉΓòÉΓòÉ <hidden> LCEFREQUEST Field - purge_flags ΓòÉΓòÉΓòÉ
  8544.  
  8545.  purge_flags (ULONG)  - input 
  8546.     Indicates whether the contents of the event notification mechanism should 
  8547.     be purged when the event filter is changed. 
  8548.  
  8549.     Value          Defintion 
  8550.     0              Do not purge the existing contents before the filter change 
  8551.                    takes effect 
  8552.  
  8553.                    The KEEP_EVENT_NOTIFICATION value defined in LFDEF.H can 
  8554.                    also be used for this parameter. 
  8555.     1              Purge the existing contents before the filter change takes 
  8556.                    effect 
  8557.  
  8558.                    The PURGE_EVENT_NOTIFICATION value defined in LFDEF.H can 
  8559.                    also be used for this parameter. 
  8560.  
  8561.  
  8562. ΓòÉΓòÉΓòÉ <hidden> LCEFREQUEST Field - LogNotify ΓòÉΓòÉΓòÉ
  8563.  
  8564.  LogNotify (ULONG)  - input 
  8565.     ID of event notification mechanism for which filtering is to be changed. 
  8566.  
  8567.  
  8568. ΓòÉΓòÉΓòÉ <hidden> LCEFREQUEST Field - pFilter ΓòÉΓòÉΓòÉ
  8569.  
  8570.  pFilter (PFILTERBLOCK)  - input 
  8571.     A pointer to the new event notification filter data structure.  A NULL 
  8572.     pointer indicates that no filter is specified. 
  8573.  
  8574.     The valid set of error log entry attribute IDs and comparison operators is 
  8575.     the same as was specified for the LogOpenEventNotification API pFilter 
  8576.     parameter. 
  8577.  
  8578.  
  8579. ΓòÉΓòÉΓòÉ 10.2.11. LCENREQUEST ΓòÉΓòÉΓòÉ
  8580.  
  8581. LogCloseEventNotification parameter packet. 
  8582.  
  8583. typedef struct _LCENREQUEST {
  8584.   ULONG     packet_size;
  8585.   ULONG     packet_revision_number;
  8586.   ULONG     LogNotify;
  8587. } LCENREQUEST;
  8588.  
  8589. typedef LCENREQUEST *PLCENREQUEST;
  8590.  
  8591. Use appropriate packet_revision_number to indicate whether character
  8592. data in the parameter packet is in UniCode or ASCII format.
  8593.  
  8594.  
  8595. ΓòÉΓòÉΓòÉ <hidden> LCENREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8596.  
  8597.  packet_size (ULONG)  - input 
  8598.     The size, in bytes, of this packet. 
  8599.  
  8600.  
  8601. ΓòÉΓòÉΓòÉ <hidden> LCENREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8602.  
  8603.  packet_revision_number (ULONG)  - input 
  8604.     A long integer value that indicates the revision level of the parameter 
  8605.     packet. 
  8606.  
  8607.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8608.               specify the UniCode parameter packet for the revision level. 
  8609.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8610.               specify the ASCII parameter packet for the revision level. 
  8611.  
  8612.  
  8613. ΓòÉΓòÉΓòÉ <hidden> LCENREQUEST Field - LogNotify ΓòÉΓòÉΓòÉ
  8614.  
  8615.  LogNotify (ULONG)  - input 
  8616.     ID of the event notification to be closed. 
  8617.  
  8618.  
  8619. ΓòÉΓòÉΓòÉ 10.2.12. LCFREQUEST ΓòÉΓòÉΓòÉ
  8620.  
  8621. LogCloseFile parameter packet. 
  8622.  
  8623. typedef struct _LCFREQUEST {
  8624.   ULONG            packet_size;
  8625.   ULONG            packet_revision_number;
  8626.   ULONG            log_file_ID;
  8627. } LCFREQUEST;
  8628.  
  8629. typedef LCFREQUEST *PLCFREQUEST;
  8630.  
  8631. Use appropriate packet_revision_number to indicate whether character
  8632. data in the parameter packet is in UniCode or ASCII format.
  8633.  
  8634.  
  8635. ΓòÉΓòÉΓòÉ <hidden> LCFREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8636.  
  8637.  packet_size (ULONG)  - input 
  8638.     The size, in bytes, of this packet. 
  8639.  
  8640.  
  8641. ΓòÉΓòÉΓòÉ <hidden> LCFREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8642.  
  8643.  packet_revision_number (ULONG)  - input 
  8644.     A long integer value that indicates the revision level of the parameter 
  8645.     packet. 
  8646.  
  8647.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8648.               specify the UniCode parameter packet for the revision level. 
  8649.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8650.               specify the ASCII parameter packet for the revision level. 
  8651.  
  8652.  
  8653. ΓòÉΓòÉΓòÉ <hidden> LCFREQUEST Field - log_file_ID ΓòÉΓòÉΓòÉ
  8654.  
  8655.  log_file_ID (ULONG)  - input 
  8656.     ID of the file to be closed. 
  8657.  
  8658.  
  8659. ΓòÉΓòÉΓòÉ 10.2.13. LFEREQUEST ΓòÉΓòÉΓòÉ
  8660.  
  8661. LogFormatEntry parameter packet. 
  8662.  
  8663. typedef struct _LFEREQUEST {
  8664.   ULONG         packet_size;
  8665.   ULONG         packet_revision_number;
  8666.   PVOID         log_entry_buffer;
  8667.   PVOID         locale_object;
  8668.   PULONG        number_of_detail_records;
  8669.   ULONG         flags;
  8670.   PULONG        string_buffer_length;
  8671.   PVOID         string_buffer;
  8672. } LFEREQUEST;
  8673.  
  8674. typedef LFEREQUEST *PLFEREQUEST;
  8675.  
  8676. Use appropriate packet_revision_number to indicate whether character
  8677. data in the parameter packet is in UniCode or ASCII format.
  8678.  
  8679.  
  8680. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8681.  
  8682.  packet_size (ULONG)  - input 
  8683.     The size, in bytes, of this packet. 
  8684.  
  8685.  
  8686. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8687.  
  8688.  packet_revision_number (ULONG)  - input 
  8689.     A long integer value that indicates the revision level of the parameter 
  8690.     packet. 
  8691.  
  8692.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8693.               specify the UniCode parameter packet for the revision level. 
  8694.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8695.               specify the ASCII parameter packet for the revision level. 
  8696.  
  8697.  
  8698. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - log_entry_buffer ΓòÉΓòÉΓòÉ
  8699.  
  8700.  log_entry_buffer (PVOID)  - input 
  8701.     Pointer to the Log Entry record to be formatted. 
  8702.  
  8703.  
  8704. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - locale_object ΓòÉΓòÉΓòÉ
  8705.  
  8706.  locale_object (PVOID)  - input 
  8707.     A pointer to the locale object.  Not required when using ASCII data. 
  8708.  
  8709.  
  8710. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - number_of_detail_records ΓòÉΓòÉΓòÉ
  8711.  
  8712.  number_of_detail_records (PULONG)  - output 
  8713.     The number of records that were returned in the buffer. 
  8714.  
  8715.  
  8716. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - flags ΓòÉΓòÉΓòÉ
  8717.  
  8718.  flags (ULONG)  - input/output 
  8719.     A 4-Byte flags word that contains the following bit flags: 
  8720.  
  8721.          Bit Value      Description 
  8722.          -------        ------- 
  8723.     1  Input            (ERR_FORMAT_DETAIL_DATA 0x00000001)  Indicates that the 
  8724.                         user data portion of the error record should be 
  8725.                         formatted.  If not set, the user data will be returned 
  8726.                         using the hex format. 
  8727.     2  Input            (FORMAT_ONLY_ERROR_DESCRIPTION 0x00000010)  Only the 
  8728.                         error description portion of the record will be 
  8729.                         formatted. 
  8730.     4  Output           (TEMPLATE_NOT_FOUND 0x00000100)  Formatting of this 
  8731.                         record could not be accomplished because the specified 
  8732.                         template record could not be found. 
  8733.     8  Output           (ERROR_DESCRIPTION_FILE_NOT_FOUND 0x00001000)  The 
  8734.                         Error description file was not found. 
  8735.     16  Output          (CAUSE_MSG_FILE_NOT_FOUND 0x00010000)  The Cause 
  8736.                         message file was not found. 
  8737.     32  Output          (ACTION_MSG_FILE_NOT_FOUND 0x00100000)  The Actions 
  8738.                         message file was not found. 
  8739.     64  Output          (DETAIL_DATA_FILE_WAS_NOT_FOUND 0x01000000)  The Detail 
  8740.                         Data file was not found. 
  8741.  
  8742.  All other values are reserved for future use. 
  8743.  
  8744.  
  8745. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - string_buffer_length ΓòÉΓòÉΓòÉ
  8746.  
  8747.  string_buffer_length (PULONG)  - input/output 
  8748.     On input, the length of the caller's formatted string buffer. 
  8749.  
  8750.     On output, the total number of bytes of formatting strings that are placed 
  8751.     within the formatted string buffer.  If the callers's buffer is too small 
  8752.     to fit all the formatted strings, the this will be set to the required size 
  8753.     and no data will be placed in the buffer. 
  8754.  
  8755.  
  8756. ΓòÉΓòÉΓòÉ <hidden> LFEREQUEST Field - string_buffer ΓòÉΓòÉΓòÉ
  8757.  
  8758.  string_buffer (PVOID)  - input 
  8759.     Pointer to the output buffer that will be filled with a set of formatted 
  8760.     strings. 
  8761.  
  8762.     The packet_revision_number parameter determines if character data is 
  8763.     returned as ASCII or UniCode character data. 
  8764.  
  8765.  
  8766. ΓòÉΓòÉΓòÉ 10.2.14. LOENREQUEST ΓòÉΓòÉΓòÉ
  8767.  
  8768. LogOpenEventNotification parameter packet. 
  8769.  
  8770. typedef struct _LOENREQUEST {
  8771.   ULONG            packet_size;
  8772.   ULONG            packet_revision_number;
  8773.   ULONG            log_file_ID;
  8774.   ULONG            read_flags;
  8775.   PULONG           pLogNotify;
  8776.   PFILTERBLOCK     pFilter;
  8777. } LOENREQUEST;
  8778.  
  8779. typedef LOENREQUEST *PLOENREQUEST;
  8780.  
  8781. Use appropriate packet_revision_number to indicate whether character
  8782. data in the parameter packet is in UniCode or ASCII format.
  8783.  
  8784.  
  8785. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8786.  
  8787.  packet_size (ULONG)  - input 
  8788.     The size, in bytes, of this packet. 
  8789.  
  8790.  
  8791. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8792.  
  8793.  packet_revision_number (ULONG)  - input 
  8794.     A long integer value that indicates the revision level of the parameter 
  8795.     packet. 
  8796.  
  8797.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8798.              specify the UniCode parameter packet for the revision level. 
  8799.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8800.              specify the ASCII parameter packet for the revision level. 
  8801.  
  8802.  
  8803. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - log_file_ID ΓòÉΓòÉΓòÉ
  8804.  
  8805.  log_file_ID (ULONG)  - input 
  8806.     An integer ID that describes which log file the event notification is to be 
  8807.     associated with. This is restricted to the current log file which has an ID 
  8808.     of 1. 
  8809.  
  8810.  
  8811. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - read_flags ΓòÉΓòÉΓòÉ
  8812.  
  8813.  read_flags (ULONG)  - input 
  8814.     Flag values used to control the notification. 
  8815.  
  8816.     0        Return the record 
  8817.     1        Do not return the record. 
  8818.  
  8819.              The RETURN_NO_DATA value defined in LFDEF.H can also be used for 
  8820.              this parameter. 
  8821.  
  8822.  
  8823. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - pLogNotify ΓòÉΓòÉΓòÉ
  8824.  
  8825.  pLogNotify (PULONG)  - output 
  8826.     A pointer to a variable that will receive the ID of event notification 
  8827.     mechanism. 
  8828.  
  8829.     This ID will be used on future LogWaitEvent calls to specify which event 
  8830.     notification mechanism is being used. 
  8831.  
  8832.  
  8833. ΓòÉΓòÉΓòÉ <hidden> LOENREQUEST Field - pFilter ΓòÉΓòÉΓòÉ
  8834.  
  8835.  pFilter (PFILTERBLOCK)  - input 
  8836.     Pointer to the event filter data structure. A NULL indicates that no 
  8837.     initial filter is specified. 
  8838.  
  8839.     The following attribute IDs are defined for error log entries.  They 
  8840.     identify the fields of an error log entry that can be used within an event 
  8841.     notification filter: 
  8842.  
  8843.         LOG_ERROR_DATE 
  8844.         LOG_ERROR_TIME 
  8845.         LOG_ERROR_ENTRY_ID 
  8846.         LOG_ERROR_RECORD_TYPE 
  8847.         LOG_ERROR_SEVERITY 
  8848.         LOG_ERROR_PROCESS_PATHNAME 
  8849.         LOG_ERROR_SOURCE_MODULE_NAME 
  8850.         LOG_ERROR_PROBE_ID 
  8851.         LOG_ERROR_DMI_VENDOR_TAG 
  8852.         LOG_ERROR_DMI_TAG 
  8853.         LOG_ERROR_DMI_REVISION 
  8854.         LOG_ERROR_MACHINE_TYPE 
  8855.         LOG_ERROR_SERIAL_NUMBER 
  8856.         LOG_ERROR_USER_DATA 
  8857.  
  8858.     The following comparison operator IDs are defined for the error logging 
  8859.     service.  They identify comparison operators that can be used within an 
  8860.     event notification filter: 
  8861.  
  8862.         LOG_ERROR_EQUAL 
  8863.         LOG_ERROR_NOT_EQUAL 
  8864.         LOG_ERROR_GREATER_THAN 
  8865.         LOG_ERROR_GREATER_THAN_OR_EQUAL 
  8866.         LOG_ERROR_LESS_THAN 
  8867.         LOG_ERROR_LESS_THAN_OR_EQUAL 
  8868.         LOG_ERROR_SUBSTRING_MATCH 
  8869.  
  8870.  
  8871. ΓòÉΓòÉΓòÉ 10.2.15. LOFREQUEST ΓòÉΓòÉΓòÉ
  8872.  
  8873. LogOpenFile parameter packet. 
  8874.  
  8875. typedef struct _LOFREQUEST {
  8876.   ULONG         packet_size;
  8877.   ULONG         packet_revision_number;
  8878.   PULONG        log_file_ID;
  8879.   PULONG        filename_length;
  8880.   PVOID         filename;
  8881. } LOFREQUEST;
  8882.  
  8883. typedef LOFREQUEST *PLOFREQUEST;
  8884.  
  8885. Use appropriate packet_revision_number to indicate whether character
  8886. data in the parameter packet is in UniCode or ASCII format.
  8887.  
  8888.  
  8889. ΓòÉΓòÉΓòÉ <hidden> LOFREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8890.  
  8891.  packet_size (ULONG)  - input 
  8892.     The size, in bytes, of this packet. 
  8893.  
  8894.  
  8895. ΓòÉΓòÉΓòÉ <hidden> LOFREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8896.  
  8897.  packet_revision_number (ULONG)  - input 
  8898.     A long integer value that indicates the revision level of the parameter 
  8899.     packet. 
  8900.  
  8901.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  8902.               specify the UniCode parameter packet for the revision level. 
  8903.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  8904.               specify the ASCII parameter packet for the revision level. 
  8905.  
  8906.  
  8907. ΓòÉΓòÉΓòÉ <hidden> LOFREQUEST Field - log_file_ID ΓòÉΓòÉΓòÉ
  8908.  
  8909.  log_file_ID (PULONG)  - input/output 
  8910.     A pointer to an area that contains an integer ID of the file to be opened. 
  8911.  
  8912.     On input, specifies the number of the file that you wish to open.  There 
  8913.     can be various combinations of log_file_ID and filename requests.  The 
  8914.     following table shows what will happen in each case. 
  8915.  
  8916.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8917.         ΓöéContents of ΓöéContents  ΓöéWhat happens                       Γöé
  8918.         Γöélog_file_ID Γöéof        Γöé                                   Γöé
  8919.         Γöé            Γöéfile_name Γöé                                   Γöé
  8920.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8921.         ΓöéA number wasΓöéA name wasΓöéThe file_name is ignored           Γöé
  8922.         Γöéentered     Γöéentered   ΓöéIf log_file_ID exists, the file is Γöé
  8923.         Γöé            Γöé          Γöéopened and a new log_file_ID numberΓöé
  8924.         Γöé            Γöé          Γöéis assigned.                       Γöé
  8925.         Γöé            Γöé          ΓöéIf log_file_ID does not exist, a   Γöé
  8926.         Γöé            Γöé          Γöéfailing return code is returned.   Γöé
  8927.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8928.         ΓöéA number wasΓöéNULL      ΓöéIf log_file_ID exists, the file is Γöé
  8929.         Γöéentered     Γöé          Γöéopened and a new log_file_ID numberΓöé
  8930.         Γöé            Γöé          Γöéis assigned.                       Γöé
  8931.         Γöé            Γöé          ΓöéIf log_file_ID does not exist, a   Γöé
  8932.         Γöé            Γöé          Γöéfailing return code is returned.   Γöé
  8933.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8934.         ΓöéNULL        ΓöéA name wasΓöéIf the file exists, the file is    Γöé
  8935.         Γöé            Γöéentered   Γöéopened and a new log_file_ID numberΓöé
  8936.         Γöé            Γöé          Γöéis assigned.                       Γöé
  8937.         Γöé            Γöé          ΓöéIf the file does not exist, a      Γöé
  8938.         Γöé            Γöé          Γöéfailing return code is returned.   Γöé
  8939.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8940.  
  8941.     On output, contains the number of the file that was opened. 
  8942.  
  8943.  
  8944. ΓòÉΓòÉΓòÉ <hidden> LOFREQUEST Field - filename_length ΓòÉΓòÉΓòÉ
  8945.  
  8946.  filename_length (PULONG)  - input/output 
  8947.     Length of filename. 
  8948.  
  8949.     On input, specifies the length of the filename that you are opening.  A 
  8950.     length of 0 specifies that no filename was specified. 
  8951.  
  8952.     On output, the length of the filename that corresponds to the log_file_ID 
  8953.     that was opened. 
  8954.  
  8955.  
  8956. ΓòÉΓòÉΓòÉ <hidden> LOFREQUEST Field - filename ΓòÉΓòÉΓòÉ
  8957.  
  8958.  filename (PVOID)  - input/output 
  8959.     Pointer to the filename. 
  8960.  
  8961.     On input, specifies the fielname that you are opening.  This may be NULL if 
  8962.     you specify a log_file_ID number. 
  8963.  
  8964.     On output, the filename that corresponds to the log_file_ID that was 
  8965.     opened. 
  8966.  
  8967.  The packet_revision_number parameter defines if this pointer points to ASCII 
  8968.  or UniCode character data. 
  8969.  
  8970.  
  8971. ΓòÉΓòÉΓòÉ 10.2.16. LREREQUEST ΓòÉΓòÉΓòÉ
  8972.  
  8973. LogReadEntry parameter packet. 
  8974.  
  8975. typedef struct _LREREQUEST {
  8976.   ULONG            packet_size;
  8977.   ULONG            packet_revision_number;
  8978.   ULONG            log_file_ID;
  8979.   ULONG            flags;
  8980.   PEVENTKEY        pEventKey;
  8981.   PFILTERBLOCK     pFilter;
  8982.   PULONG           pLogEntryBufferLength;
  8983.   PVOID            pLogEntryBuffer;
  8984. } LREREQUEST;
  8985.  
  8986. typedef LREREQUEST *PLREREQUEST;
  8987.  
  8988. Use appropriate packet_revision_number to indicate whether character
  8989. data in the parameter packet is in UniCode or ASCII format.
  8990.  
  8991.  
  8992. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  8993.  
  8994.  packet_size (ULONG)  - input 
  8995.     The size, in bytes, of this packet. 
  8996.  
  8997.  
  8998. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  8999.  
  9000.  packet_revision_number (ULONG)  - input 
  9001.     A long integer value that indicates the revision level of the parameter 
  9002.     packet. 
  9003.  
  9004.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  9005.               specify the UniCode parameter packet for the revision level. 
  9006.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  9007.               specify the ASCII parameter packet for the revision level. 
  9008.  
  9009.  
  9010. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - log_file_ID ΓòÉΓòÉΓòÉ
  9011.  
  9012.  log_file_ID (ULONG)  - input 
  9013.     ID of the log file to be used by the logging service.  This would normally 
  9014.     be the log_file_ID returned from the LogOpenFile API. 
  9015.  
  9016.  
  9017. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - flags ΓòÉΓòÉΓòÉ
  9018.  
  9019.  flags (ULONG)  - input 
  9020.     Indicates the relative position to start the read and the amount of data to 
  9021.     return. 
  9022.  
  9023.          Bit Value      Definition 
  9024.          -------        ------- 
  9025.     No bits set         Start with the entry prior to the one specified in the 
  9026.                         event key structure. 
  9027.     1                   Start with the entry prior to the one specified in the 
  9028.                         event key structure. 
  9029.     2                   Start at the most recent entry. 
  9030.     4                   Start at the oldest (last) record on file.  This 
  9031.                         request will not be limited by in formation in the 
  9032.                         event key or filter structures. 
  9033.  
  9034.                         Note:  The multiple record flag is NOT valid for this 
  9035.                         request;  only the oldest (last) record on file will be 
  9036.                         returned to the caller. 
  9037.  
  9038.  
  9039.     8                   Start at the entry identified by the EventKey. 
  9040.  
  9041.     Note: the previous bit settings are mutually exclusive.  If multiples are 
  9042.     set ON, the most recent entry will be returned. 
  9043.  
  9044.     16                  Multiple Read;  Return as many complete records as 
  9045.                         possible (limited by buffer size or End-of-file 
  9046.                         condition).  Upon completion, the event key structure 
  9047.                         contains information pertaining to the last record 
  9048.                         returned to the caller. 
  9049.  
  9050.                         Note:  This flag will be ignored if specified along 
  9051.                         with an oldest record request. 
  9052.  
  9053.  
  9054. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - pEventKey ΓòÉΓòÉΓòÉ
  9055.  
  9056.  pEventKey (PEVENTKEY)  - input/output 
  9057.     Pointer to the event key data structure. 
  9058.  
  9059.     When used as an input parameter to this function, you can specify which 
  9060.     entry is to be read.  For example, when an event key is returned from 
  9061.     LogWaitEvent API, the event key can be used to read a particular entry from 
  9062.     the system error log. 
  9063.  
  9064.  
  9065. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - pFilter ΓòÉΓòÉΓòÉ
  9066.  
  9067.  pFilter (PFILTERBLOCK)  - input 
  9068.     Pointer to the event filter to use for the search. 
  9069.  
  9070.     The valid set of error log entry attribute IDs and comparison operators is 
  9071.     the same as was specified for the LogOpenEventNotification API pFilter 
  9072.     parameter. 
  9073.  
  9074.  
  9075. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - pLogEntryBufferLength ΓòÉΓòÉΓòÉ
  9076.  
  9077.  pLogEntryBufferLength (PULONG)  - input/output 
  9078.     On input, length of caller's buffer. 
  9079.  
  9080.     On output, the total number of bytes placed in the provided buffer.  If the 
  9081.     caller's buffer is too small, it will be set to the required size. 
  9082.  
  9083.     If the packet_revision_number parameter specifies ASCII character data, the 
  9084.     data returned will be in ASCII format. 
  9085.  
  9086.     If the packet_revision_number parameter specifies UniCode character data, 
  9087.     the data returned will be in UniCode. 
  9088.  
  9089.  
  9090. ΓòÉΓòÉΓòÉ <hidden> LREREQUEST Field - pLogEntryBuffer ΓòÉΓòÉΓòÉ
  9091.  
  9092.  pLogEntryBuffer (PVOID)  - input 
  9093.     Pointer to the buffer containing the log record. 
  9094.  
  9095.  The packet_revision_number parameter defines if pointers point to ASCII or 
  9096.  UniCode character data. 
  9097.  
  9098.  
  9099. ΓòÉΓòÉΓòÉ 10.2.17. LWEREQUEST ΓòÉΓòÉΓòÉ
  9100.  
  9101. LogWaitEvent parameter packet. 
  9102.  
  9103. typedef struct _LWEREQUEST {
  9104.   ULONG         packet_size;
  9105.   ULONG         packet_revision_number;
  9106.   ULONG         LogNotify;
  9107.   PEVENTKEY     pEventKey;
  9108.   PULONG        log_entry_buffer_length;
  9109.   PVOID         pLogEntryBuffer;
  9110.   ULONG         timeout;
  9111.   ULONG         queue_flags;
  9112.   ULONG         pathname_length;
  9113.   PVOID         pathname;
  9114. } LWEREQUEST;
  9115.  
  9116. typedef LWEREQUEST *PLWEREQUEST;
  9117.  
  9118. Use appropriate packet_revision_number to indicate whether character
  9119. data in the parameter packet is in UniCode or ASCII format.
  9120.  
  9121.  
  9122. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  9123.  
  9124.  packet_size (ULONG)  - input 
  9125.     The size, in bytes, of this packet. 
  9126.  
  9127.  
  9128. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  9129.  
  9130.  packet_revision_number (ULONG)  - input 
  9131.     A long integer value that indicates the revision level of the parameter 
  9132.     packet. 
  9133.  
  9134.     UniCode parameter packet. LF_UNI_API defined in LFDEF.H can also be used to 
  9135.               specify the UniCode parameter packet for the revision level. 
  9136.     ASCII parameter packet. LF_ASCII_API defined in LFDEF.H can also be used to 
  9137.               specify the ASCII parameter packet for the revision level. 
  9138.  
  9139.  
  9140. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - LogNotify ΓòÉΓòÉΓòÉ
  9141.  
  9142.  LogNotify (ULONG)  - input 
  9143.     Log ID returned from event notification. 
  9144.  
  9145.  
  9146. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - pEventKey ΓòÉΓòÉΓòÉ
  9147.  
  9148.  pEventKey (PEVENTKEY)  - input 
  9149.     Pointer to the event key data structure. 
  9150.  
  9151.     This event key data structure is returned by the logging service. 
  9152.  
  9153.     This data structure can subsequently be passed to LogReadEntry so that the 
  9154.     event consumer can read the log file entry that is associated with this 
  9155.     event notification. 
  9156.  
  9157.  
  9158. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - log_entry_buffer_length ΓòÉΓòÉΓòÉ
  9159.  
  9160.  log_entry_buffer_length (PULONG)  - input/output 
  9161.     The size, in bytes, of the provided buffer pointed to by pLogEntryBuffer. 
  9162.  
  9163.     On input, this is the length of the caller's provided buffer. 
  9164.  
  9165.     On output, this is the total number of bytes placed in the provided buffer. 
  9166.     If the caller's buffer is too small, then this will be set to the required 
  9167.     size and no data will be written to the buffer. 
  9168.  
  9169.  
  9170. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - pLogEntryBuffer ΓòÉΓòÉΓòÉ
  9171.  
  9172.  pLogEntryBuffer (PVOID)  - output 
  9173.     Pointer to the buffer that is to receive the selected error log record. 
  9174.  
  9175.  Note that the data returned in the buffer can be either an ASCII or UniCode 
  9176.  data.  The type of character string is determined by the 
  9177.  packet_revision_number parameter. 
  9178.  
  9179.  
  9180. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - timeout ΓòÉΓòÉΓòÉ
  9181.  
  9182.  timeout (ULONG)  - input 
  9183.     Milliseconds to wait before timing out. A value of 0 indicates to wait 
  9184.     indefinitely. 
  9185.  
  9186.  
  9187. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - queue_flags ΓòÉΓòÉΓòÉ
  9188.  
  9189.  queue_flags (ULONG)  - input 
  9190.     Flags that indicate how the queue will be handled if the buffer provided by 
  9191.     the user is not large enough to hold the record. 
  9192.  
  9193.     May be one of the following valued: 
  9194.  
  9195.     0        Do not remove record from queue. 
  9196.     1        Remove record from queue. (If the record is still required, it can 
  9197.              be retrieved from the log file by using the EVENTKEY structure and 
  9198.              LogReadEntry.) 
  9199.  
  9200.              The DEQ_ON_ERROR value defined in LFDEF.H can also be used for 
  9201.              this parameter. 
  9202.  
  9203.  
  9204. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - pathname_length ΓòÉΓòÉΓòÉ
  9205.  
  9206.  pathname_length (ULONG)  - output 
  9207.     Length of the pathname. 
  9208.  
  9209.     This is the total number of bytes placed in pathname. If the caller's 
  9210.     pathname length is too small, then this will be set to the required length 
  9211.     and no data will be written to pathname. 
  9212.  
  9213.  
  9214. ΓòÉΓòÉΓòÉ <hidden> LWEREQUEST Field - pathname ΓòÉΓòÉΓòÉ
  9215.  
  9216.  pathname (PVOID)  - output 
  9217.     Pointer to the pathname where the error log record being reported in 
  9218.     LogEntryBuffer resides. 
  9219.  
  9220.  The packet_revision_number parameter defines if pointers point to ASCII or 
  9221.  UniCode character data. 
  9222.  
  9223.  
  9224. ΓòÉΓòÉΓòÉ 10.2.18. MODINFO ΓòÉΓòÉΓòÉ
  9225.  
  9226. typedef struct _MODINFO {
  9227.   ULONG        packet_size;
  9228.   ULONG        packet_revision_number;
  9229.   PUNICHAR     subproduct_name;
  9230.   PUNICHAR     module_name;
  9231. } MODINFO;
  9232.  
  9233. typedef MODINFO *PMODINFO;
  9234.  
  9235.  
  9236. ΓòÉΓòÉΓòÉ <hidden> MODINFO Field - packet_size ΓòÉΓòÉΓòÉ
  9237.  
  9238.  packet_size (ULONG) 
  9239.     Length, in bytes, of this packet. 
  9240.  
  9241.  
  9242. ΓòÉΓòÉΓòÉ <hidden> MODINFO Field - packet_revision_number ΓòÉΓòÉΓòÉ
  9243.  
  9244.  packet_revision_number (ULONG) 
  9245.     Revision number for this packet. 
  9246.  
  9247.     MODINFO_REVISION_NUMBER_1 1 
  9248.  
  9249.  
  9250. ΓòÉΓòÉΓòÉ <hidden> MODINFO Field - subproduct_name ΓòÉΓòÉΓòÉ
  9251.  
  9252.  subproduct_name (PUNICHAR) 
  9253.     Pointer to the subproduct name. 
  9254.  
  9255.  
  9256. ΓòÉΓòÉΓòÉ <hidden> MODINFO Field - module_name ΓòÉΓòÉΓòÉ
  9257.  
  9258.  module_name (PUNICHAR) 
  9259.     Pointer to the module identifier name. Identifies the originator of the 
  9260.     probe. 
  9261.  
  9262.  
  9263. ΓòÉΓòÉΓòÉ 10.2.19. MSGINSDATA ΓòÉΓòÉΓòÉ
  9264.  
  9265. typedef struct _MSGINSDATA {
  9266.   ULONG         no_inserts;
  9267.   MSGINSTXT     MsgInsTxt[MAX_MSG_INSERTS];
  9268. } MSGINSDATA;
  9269.  
  9270. typedef MSGINSDATA *PMSGINSDATA;
  9271.  
  9272.  
  9273. ΓòÉΓòÉΓòÉ <hidden> MSGINSDATA Field - no_inserts ΓòÉΓòÉΓòÉ
  9274.  
  9275.  no_inserts (ULONG) 
  9276.     Number of insert strings provided. Maximum allowed is 9. 
  9277.  
  9278.  
  9279. ΓòÉΓòÉΓòÉ <hidden> MSGINSDATA Field - MsgInsTxt[MAX_MSG_INSERTS] ΓòÉΓòÉΓòÉ
  9280.  
  9281.  MsgInsTxt[MAX_MSG_INSERTS] (MSGINSTXT) 
  9282.     Message insert text details repeated no_inserts times. 
  9283.  
  9284.  
  9285. ΓòÉΓòÉΓòÉ 10.2.20. MSGINSTXT ΓòÉΓòÉΓòÉ
  9286.  
  9287. typedef struct _MSGINSTXT {
  9288.   ULONG         insert_number;
  9289.   PVOID         insert_text;
  9290. } MSGINSTXT;
  9291.  
  9292. typedef MSGINSTXT *PMSGINSTXT;
  9293.  
  9294. The packet_revision_number parameter defines if pointers point
  9295. to ASCII or UniCode character data.
  9296.  
  9297.  
  9298. ΓòÉΓòÉΓòÉ <hidden> MSGINSTXT Field - insert_number ΓòÉΓòÉΓòÉ
  9299.  
  9300.  insert_number (ULONG) 
  9301.     The insert number. This must match the %n in the message. 
  9302.  
  9303.  
  9304. ΓòÉΓòÉΓòÉ <hidden> MSGINSTXT Field - insert_text ΓòÉΓòÉΓòÉ
  9305.  
  9306.  insert_text (UniChar *) 
  9307.     Address of the message text. 
  9308.  
  9309.  
  9310. ΓòÉΓòÉΓòÉ 10.2.21. PRODUCTDATA ΓòÉΓòÉΓòÉ
  9311.  
  9312. typedef struct _PRODUCTDATA {
  9313.   ULONG         packet_size;
  9314.   ULONG         packet_revision_number;
  9315.   PVOID         DMI_vendor_tag;
  9316.   PVOID         DMI_tag;
  9317.   PVOID         DMI_revision;
  9318. } PRODUCTDATA;
  9319.  
  9320. typedef PRODUCTDATA *PPRODUCTDATA;
  9321.  
  9322. Use appropriate packet_revision_number to indicate whether character
  9323. data in the parameter packet is in UniCode or ASCII format.
  9324.  
  9325.  
  9326. ΓòÉΓòÉΓòÉ <hidden> PRODUCTDATA Field - packet_size ΓòÉΓòÉΓòÉ
  9327.  
  9328.  packet_size (ULONG) 
  9329.     Length, in bytes, of this packet. 
  9330.  
  9331.  
  9332. ΓòÉΓòÉΓòÉ <hidden> PRODUCTDATA Field - packet_revision_number ΓòÉΓòÉΓòÉ
  9333.  
  9334.  packet_revision_number (ULONG) 
  9335.     A long integer value that indicates the revision level of the parameter 
  9336.     packet. Use one of the following values defined in FFST.H: 
  9337.  
  9338.     UniCode parameter packet.     Use PRODUCTDATA_UNICODE to specify the 
  9339.                                   UniCode parameter packet. 
  9340.     ASCII parameter packet.       Use PRODUCTDATA_ASCII to specify the ASCII 
  9341.                                   parameter packet. 
  9342.  
  9343.  
  9344. ΓòÉΓòÉΓòÉ <hidden> PRODUCTDATA Field - DMI_vendor_tag ΓòÉΓòÉΓòÉ
  9345.  
  9346.  DMI_vendor_tag (PVOID) 
  9347.     Pointer to the name of the product manufacturer. 
  9348.  
  9349.  
  9350. ΓòÉΓòÉΓòÉ <hidden> PRODUCTDATA Field - DMI_tag ΓòÉΓòÉΓòÉ
  9351.  
  9352.  DMI_tag (PVOID) 
  9353.     Pointer to the product name that was logged in the DMI database. 
  9354.  
  9355.  
  9356. ΓòÉΓòÉΓòÉ <hidden> PRODUCTDATA Field - DMI_revision ΓòÉΓòÉΓòÉ
  9357.  
  9358.  DMI_revision (PVOID) 
  9359.     Pointer to the product version number. 
  9360.  
  9361.  
  9362. ΓòÉΓòÉΓòÉ 10.2.22. PRODUCTINFO ΓòÉΓòÉΓòÉ
  9363.  
  9364. typedef struct _PRODUCTINFO {
  9365.   PPRODUCTDATA     pProductData;
  9366.   PDMIDATA         pDMIData;
  9367. } PRODUCTINFO;
  9368.  
  9369. typedef PRODUCTINFO *PPRODUCTINFO;
  9370.  
  9371.  
  9372. ΓòÉΓòÉΓòÉ <hidden> PRODUCTINFO Field - pProductData ΓòÉΓòÉΓòÉ
  9373.  
  9374.  pProductData (PPRODUCTDATA) 
  9375.     Pointer to a structure that identifies the module in which the probe is 
  9376.     inserted. 
  9377.  
  9378.  
  9379. ΓòÉΓòÉΓòÉ <hidden> PRODUCTINFO Field - pDMIData ΓòÉΓòÉΓòÉ
  9380.  
  9381.  pDMIData (PDMIDATA) 
  9382.     Pointer to a structure that specifies the product information if DMI is not 
  9383.     used. A NULL value indicates that the DMI information will be retrieved 
  9384.     from the DMI Repository (recommended approach). 
  9385.  
  9386.  
  9387. ΓòÉΓòÉΓòÉ 10.2.23. SUBBLOCK ΓòÉΓòÉΓòÉ
  9388.  
  9389. Selection criteria sub-block structure. 
  9390.  
  9391. typedef struct _SUBBLOCK {
  9392.   ULONG                  entry_attribute_ID;      /*  The identifier of a field within a log entry. */
  9393.   ULONG                  comparison_operator_ID;  /*  The identifier of a comparison operator. */
  9394.   ULONG                  comparison_data_length;  /*  The length of the comparison data. */
  9395.   PVOID                  comparison_data_ptr;
  9396.   struct _SUBBLOCK      *next_subblock;
  9397. } SUBBLOCK;
  9398.  
  9399. typedef SUBBLOCK *PSUBBLOCK;
  9400.  
  9401. Note that the comparison_data_ptr can point to either ASCII or UniCode 
  9402. character data.  The type of character data is determined by the 
  9403. packet_revision_number parameter of FILTERBLOCK. 
  9404.  
  9405.  
  9406. ΓòÉΓòÉΓòÉ <hidden> SUBBLOCK Field - entry_attribute_ID ΓòÉΓòÉΓòÉ
  9407.  
  9408.  entry_attribute_ID (ULONG)  - input 
  9409.     The identifier of a field within a log entry. 
  9410.  
  9411.     When character data that is pointed to, the data can be either ASCII or 
  9412.     UniCode data.  Use the appropriate packet_revision_number to specify the 
  9413.     data type. 
  9414.  
  9415.     The field within an entry that will be compared against the target data 
  9416.     value that is pointed to by comparison_data_ptr. 
  9417.  
  9418.     May be one of the following values for Error Logging: 
  9419.  
  9420.     LOG_ERROR_DATE                          Date type 
  9421.     LOG_ERROR_TIME                          Time type 
  9422.     LOG_ERROR_ENTRY_ID                      Unsigned long integer type 
  9423.     LOG_ERROR_RECORD_TYPE                   String type 
  9424.     LOG_ERROR_SEVERITY                      Unsigned long integer type 
  9425.     LOG_ERROR_PROCESS_PATHNAME              String type 
  9426.     LOG_ERROR_SOURCE_MODULE_NAME            String type 
  9427.     LOG_ERROR_PROBE_ID                      Unsigned long integer type 
  9428.     LOG_ERROR_DMI_VENDOR_TAG                String type 
  9429.     LOG_ERROR_DMI_TAG                       String type 
  9430.     LOG_ERROR_DMI_REVISION                  String type 
  9431.     LOG_ERROR_MACHINE_TYPE                  String type 
  9432.     LOG_ERROR_SERIAL_NUMBER                 String type 
  9433.     LOG_ERROR_USER_DATA                     String type 
  9434.  
  9435.  
  9436. ΓòÉΓòÉΓòÉ <hidden> SUBBLOCK Field - comparison_operator_ID ΓòÉΓòÉΓòÉ
  9437.  
  9438.  comparison_operator_ID (ULONG)  - input 
  9439.     The identifier of a comparison operator. 
  9440.  
  9441.     This comparison operator must be valid for the type of log entry data item 
  9442.     that was specified by entry_attribute_ID. 
  9443.  
  9444.     May be one of the following values: 
  9445.  
  9446.     LOG_ERROR_EQUAL                         Date, time, string, and unsigned 
  9447.                                             long integer types 
  9448.     LOG_ERROR_NOT_EQUAL                     Date, time, string, and unsigned 
  9449.                                             long integer types 
  9450.     LOG_ERROR_GREATER_THAN                  Date, time, string, and unsigned 
  9451.                                             long integer types 
  9452.     LOG_ERROR_GREATER_THAN_OR_EQUAL         Date, time, string, and unsigned 
  9453.                                             long integer types 
  9454.     LOG_ERROR_LESS_THAN                     Date, time, string, and unsigned 
  9455.                                             long integer types 
  9456.     LOG_ERROR_LESS_THAN_OR_EQUAL            Date, time, string, and unsigned 
  9457.                                             long integer types 
  9458.     LOG_SUBSTRING_MATCH                     String type only 
  9459.  
  9460.  
  9461. ΓòÉΓòÉΓòÉ <hidden> SUBBLOCK Field - comparison_data_length ΓòÉΓòÉΓòÉ
  9462.  
  9463.  comparison_data_length (ULONG)  - input 
  9464.     The length of the comparison data. 
  9465.  
  9466.  
  9467. ΓòÉΓòÉΓòÉ <hidden> SUBBLOCK Field - comparison_data_ptr ΓòÉΓòÉΓòÉ
  9468.  
  9469.  comparison_data_ptr (PVOID)  - input 
  9470.     Pointer to a data item that will be compared against the specified log 
  9471.     entry attribute. 
  9472.  
  9473.     Note:  The data item is expected to be in the proper format. An example is 
  9474.     the date and time attributes, which require data in the format that is 
  9475.     maintained in the Log File. 
  9476.  
  9477.  
  9478. ΓòÉΓòÉΓòÉ <hidden> SUBBLOCK Field - next_subblock ΓòÉΓòÉΓòÉ
  9479.  
  9480.  next_subblock (struct _SUBBLOCK *)  - input 
  9481.     Pointer to the next sub-block in the chain. A NULL indicate the end of the 
  9482.     chain. 
  9483.  
  9484.  
  9485. ΓòÉΓòÉΓòÉ 10.2.24. TCEREQUEST ΓòÉΓòÉΓòÉ
  9486.  
  9487. Structure for TraceCreateEntry. 
  9488.  
  9489. typedef struct _TCEREQUEST {
  9490.   ULONG     packet_size;
  9491.   ULONG     packet_revision_number;
  9492.   ULONG     major_event_code;
  9493.   ULONG     minor_event_code;
  9494.   ULONG     event_data_length;
  9495.   PVOID     event_data;
  9496. } TCEREQUEST;
  9497.  
  9498. typedef TCEREQUEST *PTCEREQUEST;
  9499.  
  9500.  
  9501. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - packet_size ΓòÉΓòÉΓòÉ
  9502.  
  9503.  packet_size (ULONG) 
  9504.     The size, in bytes, of this packet. 
  9505.  
  9506.  
  9507. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - packet_revision_number ΓòÉΓòÉΓòÉ
  9508.  
  9509.  packet_revision_number (ULONG) 
  9510.     A long integer value that indicates the revision level of the parameter 
  9511.     packet. 
  9512.  
  9513.     2         Trace release number. 
  9514.               TRACE_RELEASE defined in TRACE.H can also be used to specify the 
  9515.               release number. 
  9516.  
  9517.  
  9518. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - major_event_code ΓòÉΓòÉΓòÉ
  9519.  
  9520.  major_event_code (ULONG) 
  9521.     The major event code of the event to be logged (must be between 0 and 255). 
  9522.  
  9523.  
  9524. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - minor_event_code ΓòÉΓòÉΓòÉ
  9525.  
  9526.  minor_event_code (ULONG) 
  9527.     The minor event code of the event to be logged (must be between 1 and 
  9528.     65535). 
  9529.  
  9530.  
  9531. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - event_data_length ΓòÉΓòÉΓòÉ
  9532.  
  9533.  event_data_length (ULONG) 
  9534.     The length of the data, in bytes, that is contained within the caller's 
  9535.     event data buffer. 
  9536.  
  9537.  
  9538. ΓòÉΓòÉΓòÉ <hidden> TCEREQUEST Field - event_data ΓòÉΓòÉΓòÉ
  9539.  
  9540.  event_data (PVOID) 
  9541.     The pointer to a buffer that contains the event data to be logged. The 
  9542.     format of the data is specific to each tracepoint. 
  9543.  * 
  9544.  
  9545.  
  9546. ΓòÉΓòÉΓòÉ 11. Notices ΓòÉΓòÉΓòÉ
  9547.  
  9548. September 1996 
  9549.  
  9550. The following paragraph does not apply to the United Kingdom or any country 
  9551. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  9552. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  9553. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  9554. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  9555. do not allow disclaimer of express or implied warranties in certain 
  9556. transactions, therefore, this statement may not apply to you. 
  9557.  
  9558. This publication could include technical inaccuracies or typographical errors. 
  9559. Changes are periodically made to the information herein; these changes will be 
  9560. incorporated in new editions of the publication. IBM may make improvements 
  9561. and/or changes in the product(s) and/or the program(s) described in this 
  9562. publication at any time. 
  9563.  
  9564. It is possible that this publication may contain reference to, or information 
  9565. about, IBM products (machines and programs), programming, or services that are 
  9566. not announced in your country.  Such references or information must not be 
  9567. construed to mean that IBM intends to announce such IBM products, programming, 
  9568. or services in your country. 
  9569.  
  9570. Requests for technical information about IBM products should be made to your 
  9571. IBM reseller or IBM marketing representative. 
  9572.  
  9573.  
  9574. ΓòÉΓòÉΓòÉ 11.1. Copyright Notices ΓòÉΓòÉΓòÉ
  9575.  
  9576. COPYRIGHT LICENSE: This publication contains printed sample application 
  9577. programs in source language, which illustrate OS/2 programming techniques. You 
  9578. may copy, modify, and distribute these sample programs in any form without 
  9579. payment to IBM, for the purposes of developing, using, marketing or 
  9580. distributing application programs conforming to the OS/2 application 
  9581. programming interface. 
  9582.  
  9583. Each copy of any portion of these sample programs or any derivative work, which 
  9584. is distributed to others, must include a copyright notice as follows: "(C) 
  9585. (your company name) (year).  All rights reserved." 
  9586.  
  9587. (C)Copyright International Business Machines Corporation 1996.  All rights 
  9588. reserved. 
  9589. Note to U.S. Government Users - Documentation related to restricted rights - 
  9590. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  9591. Schedule Contract with IBM Corp. 
  9592.  
  9593.  
  9594. ΓòÉΓòÉΓòÉ 11.2. Disclaimers ΓòÉΓòÉΓòÉ
  9595.  
  9596. References in this publication to IBM products, programs, or services do not 
  9597. imply that IBM intends to make these available in all countries in which IBM 
  9598. operates. Any reference to an IBM product, program or service is not intended 
  9599. to state or imply that only that IBM product, program, or service may be used. 
  9600. Subject to IBM's valid intellectual property or other legally protectable 
  9601. rights, any functionally equivalent product, program, or service may be used 
  9602. instead of the IBM product, program, or service. The evaluation and 
  9603. verification of operation in conjunction with other products, except those 
  9604. expressly designated by IBM, are the responsibility of the user. 
  9605.  
  9606. IBM may have patents or pending patent applications covering subject matter in 
  9607. this document. The furnishing of this document does not give you any license to 
  9608. these patents. You can send license inquiries, in writing, to: 
  9609.  
  9610.       IBM Director of Licensing 
  9611.       IBM Corporation 
  9612.       500 Columbus Avenue 
  9613.       Thornwood, NY  10594 
  9614.       U.S.A. 
  9615.  
  9616.  Asia-Pacific users can inquire, in writing, to the IBM Director of 
  9617.  Intellectual Property and Licensing, IBM World Trade Asia Corporation, 2-31 
  9618.  Roppongi 3-chome, Minato-ku, Tokyo 106, Japan. 
  9619.  
  9620.  Licensees of this program who wish to have information about it for the 
  9621.  purpose of enabling: (i) the exchange of information between independently 
  9622.  created programs and other programs (including this one) and (ii) the mutual 
  9623.  use of the information which has been exchanged, should contact IBM 
  9624.  Corporation, Department LZKS, 11400 Burnet Road, Austin, TX 78758 U.S.A.  Such 
  9625.  information may be available, subject to appropriate terms and conditions, 
  9626.  including in some cases, payment of a fee. 
  9627.  
  9628.  
  9629. ΓòÉΓòÉΓòÉ 11.3. Trademarks ΓòÉΓòÉΓòÉ
  9630.  
  9631. The following terms are trademarks of the IBM Corporation in the United States 
  9632. or other countries or both: 
  9633.  
  9634. FFST
  9635. First Failure Support Technology
  9636. IBM
  9637. OS/2
  9638. OS/2 Warp
  9639. OS/2 Warp Connect
  9640.  
  9641. The following terms are trademarks of other companies: 
  9642.  
  9643. Other company, product, and service names, which may be denoted by a double 
  9644. asterisk (**), may be trademarks or service marks of others. 
  9645.  
  9646.  
  9647.