www.it-ebooks.info A02LOC622310.fm Page ii Tuesday, September20, 2005 1:59 PM PUBLISHED BY Microsoft Press A Division of Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399 Copyright © 2006 by Ed Wilson All rights reserved. No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher. Library of Congress Control Number 2005933639 Printed and bound in the United States of America. 1 2 345 6 7 8 9 QWT 8 7 6 5 43 Distributed in Canada by H.B. Fenn and Company Ltd. A CIP catalogue record for this book is available from the British Library. Microsoft Press books are available through booksellers and distributors worldwide. For further information about international editions, contact your local Microsoft Corporation office or contact Microsoft Press Inter- national directly at fax (425) 936-7329. Visit our Web site at www.microsoft.com/mspress. Send comments to [email protected]. Microsoft, Active Directory, Excel, JScript, Microsoft Press, MSDN, Outlook, Visual Basic, Win32, Windows, Windows NT, and Windows Server are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. The example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, e-mail address, logo, person, place, or event is intended or should be inferred. This book expresses the author’s views and opinions. The information contained in this book is provided with- out any express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book. Acquisitions Editor: Martin DelRe Project Editors: Melissa von Tschudi-Sutton and Barbara Moreland Technical Editor: Bob Hogan Copy Editor: Christina Palaia Indexer: Julie Bess Body Part No. X11-50076 www.it-ebooks.info A03D622310.fm Page iii Tuesday,September 6, 2005 12:53 PM This book is dedicated to my best friend and wife, Teresa. www.it-ebooks.info A03D622310.fm Page iv Tuesday, September 6, 2005 12:53 PM www.it-ebooks.info Contents at a Glance Getting Started with WMI/ Part I 1 Introducing WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Configuring WMI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 WMI Queries and Events/ Part II 3 Using Basic WMI Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4 Using Advanced WMI Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5 Using WMI Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Connect Server and Additional Privileges/ Part III 6 Using the SWbemLocator Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 7 Requesting Additional Privileges for WMI . . . . . . . . . . . . . . . . . . . . . . 139 Classes/ Part IV 8 Understanding WMI Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9 Using Win32 WMI Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 10 Using System Hardware Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11 Using Operating System Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 12 Using the Performance Counter Classes . . . . . . . . . . . . . . . . . . . . . . . . 255 Security and Troubleshooting/ Part V 13 Understanding WMI Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 14 Troubleshooting WMI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 v www.it-ebooks.info vi Contents at a Glance Appendixes/ Part VI A Scripting API Methods and Properties. . . . . . . . . . . . . . . . . . . . . . . . . . 313 B WMI Security Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 C WMI Security Privileges and Operations. . . . . . . . . . . . . . . . . . . . . . . . 319 D Computer System Hardware Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 E Operating System Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 F Performance Monitor Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 www.it-ebooks.info A05T622310.fm Page vii Tuesday, September27, 2005 7:55 AM Table of Contents Acknowledgments . . . . . . . .. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . ... . . . . . . . . . . . . . . .xix About This Book . . . . . . . . .. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . ... . . . . . . . . . . . . . ..xxi Getting Started with WMI Part I 1 Introducing WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Before You Begin . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . .3 Defining WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Querying and Startinga Service . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . .6 Defining the Query . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . 7 Evaluating the State of the Service . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . .7 Capturing the Return Code .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . .8 UsingWMI as a Tool . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . .9 Implementing Microsoft WBEM . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .10 DescribingObjects Using the CIM . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .11 Working with Namespaces . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .12 Working with Providers. . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 16 Understanding Classes . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .17 Implementing Programming Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Usingthe WMI Architecture . . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .20 UsingManaged Objects and Providers .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .20 WMIInfrastructure . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .21 WMIApplications . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .22 WBEM Repository. . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 22 Location . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .22 Retrieving from the Repository . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 23 Handing Off to a Provider . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 23 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 QuizYourself . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .24 On YourOwn. . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 24 Lab 1 Installingand Configuring the Core Platform SDK . . . . . . . . . . . . . . . .24 Lab 2 Online Install(Optional) . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 25 Lab 3 Navigatingthe SDK . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 26 vii www.it-ebooks.info A05T622310.fm Page viii Tuesday, September27, 2005 7:55 AM viii Table of Contents 2 Configuring WMI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Before You Begin . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 29 Understanding the WMI Control Snap-in . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 30 Configuring Logging.. . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 30 Backing Up the WMI Repository.. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 32 Restoring the WMI Repository. . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 33 Changing the Target ofOperations . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 35 Understanding RegistrySettings.. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 36 Enabled . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 36 LogSecurityFailures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 LogSecuritySuccesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Remote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Usingthe CIM ObjectManager... . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 39 Implementing Providers . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 41 Configuring WMI Service Settings . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 42 Automatically Recovering Providers . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 42 Initial Installation . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 42 Manually Editing the Autorecover MOF Key . . .. . . . . . . . . .. . . . . . . . . . . . . . 44 Adding the #pragma autorecover tag tothe MOF File . . . .. . . . . . . . . . . . . . 44 UsingMofcomp.exe . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 45 Exploring WMI Settings with WMI . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 45 Summary .. . . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 46 QuizYourself . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 46 On YourOwn . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 47 Lab 4 Backing Up the WMI Repository . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 47 Lab 5 Restoring the WMI Repository . . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 48 Lab 6 Exploring WMI Settings via Script . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 49 WMI Queries and Events Part II 3 Using Basic WMI Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Before You Begin . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 55 Understanding WQL . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 56 Usingthe Moniker. . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 56 The Prefix . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 57 The Security . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 57 The Path . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 58 Usingthe Defaults . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 58 www.it-ebooks.info A05T622310.fm Page ix Tuesday, September27, 2005 7:55 AM Table of Contents ix Understanding DataQueries . . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .59 Using the Select Statement .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .60 SelectEverything from Everything . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .60 SelectSome Thingsfrom Everything . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .61 Where Is the Where Clause? . . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .62 SelectEverything from Some Things . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .62 Comparison Operators . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .64 Select Some Things from Some Things. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . .65 IS Operator . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .65 Compound Where Clause . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .66 Is Not Operator . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .67 Understanding EventQueries . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .68 Understanding Schema Queries. . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . 71 SWbemObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 SWbemObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76 QuizYourself . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .76 On YourOwn . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .77 Lab 7 Exploring Win32_NTDomain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77 Lab 8 Using Schema Queries. . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .77 4 Using Advanced WMI Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Before You Begin . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .81 Using __Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 Using ISA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 Scripting API Objects . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .83 SWbemServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83 Using the associators of Command . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .83 Using the references of Command . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .85 Modifying the Where Clause . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .86 Using the ExecQuery Method . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .88 Returning an SWbemObjectSet Collection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88 Iflags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88 Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89 Using the Get Method . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . .89 SWbemLastError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 SWbemObject . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . 91 SWbemObjectPath . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . 92 www.it-ebooks.info A05T622310.fm Page x Tuesday,September 27,2005 7:55 AM x Table of Contents SWbemObjectSet . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 94 SWbemProperty . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 95 SWbemPropertySet . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 95 SWbemSink . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 96 Introducing New Objects in Windows XP and Windows Server 2003 . . . . . . . . . . . . 96 SWbemDateTime . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 97 SWbemObjectEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 SWbemRefresher . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 97 SWbemRefreshableItem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 SWbemServicesEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Summary .. . . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 98 QuizYourself . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 98 On YourOwn . . . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . 99 Lab 9 Working with the AutoDiscovery Process . . . . . . . . . .. . . . . . . . . . . . . . 99 Lab 10 Using the Get Method for Inventory Types of Data.. . . . . . . . . . . . . 101 5 Using WMI Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Before You Begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Using SWbemEventSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 NextEvent . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 104 Security_ . . . . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 105 Working with SWbemServices . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 106 ExecNotificationQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 ExecNotificationQueryAsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Understanding EventConsumers . . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 109 Creating an Instance of the Consumer . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 110 Creating an Event Filter . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 110 Creating an Event Query .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 111 Bindingthe Filter to the Consumer . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 111 ActiveScriptEventConsumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Using SMTPEventConsumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Understanding the New Event Consumers . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 114 LogFileEventConsumer . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 114 NTEventLogEventConsumer . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 114 CommandLineEventConsumer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Working with Different Types of Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ClassEvents . . . . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 115 Instance Events . . . . . . . . .. . . . . . . . . .. . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . 115 www.it-ebooks.info