<HTML> <HEAD> <TITLE>Device Console Scripting</TITLE> <META content="text/html; charset=windows-1252" http-equiv=Content-Type> <META content="Microsoft FrontPage 5.0" name=GENERATOR> </HEAD> <BODY link=#0000ff><FONT face=Verdana size=5> <H2>Device Console Scripting</H2></FONT><FONT face=Verdana size=2> <P><SPAN style="COLOR: #ff0000; FONT-FAMILY: Arial; FONT-SIZE: 10pt">[This is preliminary documentation and subject to change.]</SPAN></P> <H3>SUMMARY</H3> This document accompanies the Device Console COM Objects. The instructions herein apply to the Windows Whistler operating system. <p>The COM objects described in this document allow device query and management using any COM aware language, for example, Visual Basic, VBScript and JScript. <H3>HOW IT WORKS</H3> <p>Right-click on "devcon.inf" and click "install". The COM objects will be installed and made available for use. The following document describes the objects available and samples on how to use them in context of VBScript.<h3>COM Objects</h3> <h4>DevCon.DeviceConsole {2F4D685C-7304-45F1-8075-443255A11156}</h4> <p>Root object that can be created via CreateObject either locally or remote.<h5>Properties</h5> <p>RebootRequired (Get/Set)<blockquote> <p>This property is set if any derived objects indicate a reboot is required.</blockquote> <h5>Methods</h5> <p>AllDevices(<i>[flags]</i>,<i>[machine]</i>)<blockquote> <p>Returns a <i>Devices </i>collection of all devices for local or specified machine. Flags include 1 (Include not-present devices), 2 (In context of current hardware profile rather than globally).</blockquote> <p>DevicesBySetupClasses(<i>classList</i>,<i>[flags]</i>,<i>[machine]</i>)<blockquote> <p>Returns a <i>Devices</i> collection of all devices of the specified setup classes, otherwise similar to AllDevices. The classes may either be GUID's in string form or class names. ClassList may be either a single string, a collection of strings or an array of strings.</blockquote> <p>DevicesByInterfaceClasses(<i>classList</i>,<i>[flags]</i>,<i>[machine]</i>)<blockquote> <p>Returns a <i>Devices</i> collection of all devices that currently support any of the specified interface classes. Interface classes must be specified as GUID's in string form. Classlist may be either a single string, a collection of strings or an array of strings.</blockquote> <p>DevicesByInstanceIds(<i>idList</i>,<i>[machine]</i>)<blockquote> <p>Same as CreateEmptyDeviceList followed by an "Add" on that device list.</blockquote> <p>SetupClasses(<i>[classList]</i>,<i>[machine]</i>)<blockquote> <p>Create a <i>SetupClasses</i> collection from the specified classlist. Classlist may be either a single string, a collection of strings or an array of strings. If classlist is omitted or is "", all classes for local/specified machine is returned.</blockquote> <p>CreateEmptyDeviceList(<i>[machine]</i>)<blockquote> <p>Create a <i>Devices</i> collection that contains no devices for specified machine. Creating the collection object this way (or by any of the other methods in this object) associates the collection with this object and allows child objects to be associated with this object. Creating the<i> </i>collection object directly will not associate it with this object or a machine.<i> </i> </blockquote> <p>CreateEmptySetupClassList(<i>[machine]</i>)<blockquote> <p>Create a <i>SetupClasses</i> collection that contains no setup classes for specified machine. Creating the collection object this way (or by any of the other methods in this object) associates the collection with this object and allows child objects to be associated with this object. Creating the collection object directly will not associate it with this object or a machine.</blockquote> <p>UpdateDriver(<i>scriptName</i>,<i>hardwareId</i>,<i>[flags]</i>)<blockquote> <p>Updates all devices that have specified<i> </i>hardwareId with best<i> </i> driver in either specified script or system scripts (currently only INF files are supported). A failure must be caught with appropriate error handling. Reboot status can be checked via RebootRequired property. Appropriate permissions are required.</blockquote> <p>CheckReboot<blockquote> <p>Prompts user for reboot if one is required. Reboots machine if user says ok, otherwise returns. Appropriate permissions are required.</blockquote> <p>RebootReasonHardware<blockquote> <p>Unconditionally reboots the machine logging the reason as planned "hardware". Appropriate permissions are required.</blockquote> <p>AttachEvent(<i>event,handler</i>)<blockquote> <p>Attach an event handler for the specified <i>event</i>. This function returns 'true' to indicate success. <span style="background-color: #FFFF00">currently no other value is returned.</span> <i>Handler</i> is a function pointer. If multiple handlers are specified, there is no guarantee on order of execution. In VBScript, the <i>handler</i> parameter must be obtained using "getRef". The following events are currently defined:<blockquote> <table border="0" cellpadding="4" style="border-collapse: collapse" bordercolor="#111111" cellspacing="4"> <tr> <td><b>Event name</b></td> <td><b>Parameters</b></td> <td><b>Action</b></td> </tr> <tr> <td>OnDeviceNodesChanged</td> <td><i>none</i></td> <td>Indicates a device change (inserted/deleted/started/stopped) akin to DBT_DEVNODES_CHANGED.</td> </tr> </table> </blockquote> </blockquote> <p>DetachEvent(<i>event,</i><i>handler</i>)<blockquote> <p>Detach event handler previously attached by AttachEvent. <i>Handler</i> and <i>event</i> must be exactly the same as that specified in AttachEvent.</blockquote> <h4>DevCon.Strings {BFDE9AEE-9418-42C0-8FA2-8B04C31ECDC7}</h4> <p>Root object that can be created via CreateObject, also may be returned by methods/properties. Provides a dynamic collection of strings. This dynamic collection may be enumerated and/or indexed. Default method is "Item".<h5> Properties</h5> <p>CaseSensative (Get/Set)<blockquote> <p>Normally the strings collection is lenient on case when indexing by string or when finding strings. Leniency may be changed using this property. All strings are stored case sensitive.</blockquote> <p>Count (Get)<blockquote> <p>Number of items in the collection. The Collection is indexed 1..Count inclusive.</blockquote> <h5>Methods</h5> <p>Item(<i>[index/value]</i>) (Default)<blockquote> <p>If no index specified, a snapshot of the collection is returned as a 1-based array, otherwise the indexed string is returned. Either a numerical or string index may be specified.</blockquote> <p>Add(<i>items</i>)<blockquote> <p>A string, collection of strings or array of strings may be added to the collection. Multi-dimension arrays are flattened.</blockquote> <p>Insert(<i>index/value</i>,<i>items</i>)<blockquote> <p>A string, collection of strings or array of strings may be inserted before the specified index (which may be a string in the collection or a numeric index).</blockquote> <p>Remove(<i>index/value</i>)<blockquote> <p>Remove a string either by numeric index or by value.</blockquote> <p>Find(<i>value</i>)<blockquote> <p>Returns index of string if it exists, otherwise 0.</blockquote> <h4> </h4> <h4>DevCon.SetupClasses {84524499-52D7-4336-8A5D-EC6FE6A9C8DE}</h4> <p>Root object that can be created via CreateObject (although creation via DeviceConsole is preferred). Provides a dynamic collection of setup classes. This dynamic collection may be enumerated and/or indexed. Default method is "Item". This object may be associated with a machine and is typically associated with a DeviceConsole object.<h5>Properties</h5> <p>Count (Get)<blockquote> <p>Returns number of SetupClass objects in the collection.</blockquote> <h5>Methods</h5> <p>Item(<i>index/guid</i>) (Default)<blockquote> <p>Returns <i>SetupClass</i> object at specified index. Index is 1-based numeric, or the class GUID may be supplied.</blockquote> <p>Add(<i>classNames</i>)<blockquote> <p>Add one or more classes to the collection. If a single GUID string is specified, then only one SetupClass object will be added. If a class name is specified, it is possible for multiple SetupClass objects to be associated with the class name.</blockquote> <p>Remove(<i>index/guid</i>)<blockquote> <p>Remove a class from the collection.</blockquote> <p>Devices(<i>[flags]</i>)<blockquote> <p>Return <i>Devices</i> collection that contains the union of the devices of all the device classes specified in this collection.</blockquote> <h4> </h4> <h4>DevCon.SetupClass</h4> <p>A single object in the SetupClasses collection. Inherits any information associated with the SetupClasses collection it was derived from. Default property is "Guid".<h5>Properties</h5> <p>Guid (Get, Default)<blockquote> <p>Returns class Guid.</blockquote> <p>Name (Get)<blockquote> <p>Returns simple name of the setup class.</blockquote> <p>Description (Get)<blockquote> <p>Returns class description.</blockquote> <p>Security (Get/Set)<blockquote> <p>Default device security for class in SDDL format. Setting it to null or nothing will delete setting.<span style="background-color: #FFFF00"> Not yet implemented.</span></p> </blockquote> <p>DeviceTypeOverride (Set/Get)<blockquote> <p>Default device type for class (eg FILE_DEVICE_CDROM = 0x02). Setting it to null or nothing will delete setting.<span style="background-color: #FFFF00"> Not yet implemented.</span></blockquote> <p>ForceExclusive (Set/Get)<blockquote> <p>If TRUE, sets default to force all devices in the class to only be opened in exclusive mode. Setting it to null or nothing will delete setting.<span style="background-color: #FFFF00"> Not yet implemented.</span></blockquote> <p>CharacteristicsOverride (Get/Set)<blockquote> <p>Allows forcing (setting) of FILE_REMOVABLE_MEDIA (1) FILE_READ_ONLY_DEVICE (2) FILE_FLOPPY_DISKETTE (4) FILE_WRITE_ONCE_MEDIA (8) FILE_DEVICE_SECURE_OPEN (256)<p>If specified, sets default for the class. Setting it to null or nothing will delete setting.<span style="background-color: #FFFF00"> Not yet implemented.</span></blockquote> <p>Machine (Get)<blockquote> <p>Name of remote machine (usually prefixed by '\\').</blockquote> <p> <h5>Methods</h5> <p>Devices(<i>[flags]</i>)<blockquote> <p>Return <i>Devices</i> collection for devices of this specific setup class.</blockquote> <p>CreateEmptyDeviceList()<blockquote> <p>Creates an empty device list that is locked to this setup class. (That is, no devices can be added to it unless that device has the same setup class).</p> </blockquote> <p>RegRead(<i>keyPath</i>)<blockquote> <p>If keyPath ends in "\" then read key's default value, otherwise read named value. Supports reading of REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ and REG_DWORD values.</blockquote> <p>RegWrite(<i>keyPath</i>,<i>value</i>,<i>[type]</i>)<blockquote> <p>If keyPath ends in "\" then write key's default value, otherwise write named value. Supports writing of REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD and REG_BINARY values. If type is specified, it should be a string "REG_SZ", "REG_EXPAND_SZ", "REG_MULTI_SZ", "REG_DWORD" or "REG_BINARY" and explicitly indicates the type of value to be written. If not specified, type is determined from value (collections will be written as REG_MULTI_SZ, strings as REG_SZ, integers as REG_DWORD). If "REG_BINARY" is specified, value must be numeric.</blockquote> <p>RegDelete(keyPath)<blockquote> <p>Delete class specific value.</blockquote> <h4> </h4> <h4>DevCon.Devices {176FAC5E-3A43-42A3-9CFC-157308934DF4}</h4> <p>Root object that can be created via CreateObject (although creation via DeviceConsole or derived objects is preferred). Provides a dynamic collection of devices. This dynamic collection may be enumerated and/or indexed. This object may be associated with a machine and is typically associated with a DeviceConsole object. Default method is "Item".<h5>Properties</h5> <p>Count (Get)<blockquote> <p>Returns number of Device objects in the collection.</blockquote> <h5>Methods</h5> <p>Item(<i>index/instanceId</i>) (Default)<blockquote> <p>Return specified Device object. Index is 1-based.</blockquote> <p>Add(<i>instanceId/instanceIdCollection</i>)<blockquote> <p>Add one or more devices with specified instance ID's to this collection. This operation will fail if the specified device does not exist, or if the collection is locked to a specific setup class and the devi ce is of a different setup class.</blockquote> <p>Remove(<i>index/instanceId</i>)<blockquote> <p>Remove a device from collection. Index is 1-based. Does not delete the device itself.</blockquote> <p>CreateRootDevice(<i>[hardwareId]</i>)<blockquote> <p>Create a root-enumerated device and add to the collection. If the collection is locked to a specific setup class, the new device is associated with that setup class. The device will have the specified hardware id. Returns a Device object for the newly created device.</blockquote> <h4> </h4> <h4>DevCon.Device</h4> <p>A single object representing a device. Usually associated with a DeviceConsole object and may be associated with a specific machine. Default property is "InstanceId"<h5>Properties</h5> <p>InstanceId (Default,Get)<blockquote> <p>Instance Id of the device.</blockquote> <p>RebootRequired (Get/Set)<blockquote> <p>Indicates if this device requires a reboot to start. Setting this property will also set the RebootRequired property of the associated DeviceConsole object if any.</blockquote> <p>Description (Get)<blockquote> <p>Description of device as it would appear in device manager. If friendly name is available, that is returned instead.</blockquote> <p>HardwareIds (Get/Set)<blockquote> <p>Strings collection of all hardware Id's reported by the device. May be modified for root-enumerated devices. Setting it to null or nothing will delete it.</blockquote> <p>CompatibleIds (Get/Set)<blockquote> <p>Strings collection of all compatible Id's reported by the device. May be modified for root-enumerated devices. Setting it to null or nothing will delete it.</blockquote> <p>ServiceName (Get)<blockquote> <p>Name of FDO service.</blockquote> <p>Class (Get)<blockquote> <p>GUID of SetupClass that device is associated with.</blockquote> <p>Manufacturer (Get)<blockquote> <p>Name of manufacturer of device if known.</blockquote> <p>FriendlyName (Get/Set)<blockquote> <p>Friendly name of device. Setting it to null or nothing will delete it.</blockquote> <p>LocationInformation (Get/Set)<blockquote> <p>Informative information about where the device is located. Setting it to null or nothing will delete it.</blockquote> <p>UpperFilters (Get/Set)<blockquote> <p>Strings collection of all upper filter services. Setting it to null or nothing will delete it.</blockquote> <p>LowerFilters (Get/Set)<blockquote> <p>Strings collection of all lower filter services. Setting it to null or nothing will delete it.</blockquote> <p>EnumeratorName (Get)<blockquote> <p>Indicates bus enumerator type.</blockquote> <p>Security (Get/Set)<blockquote> <p>Device security in SDDL format. Setting it to null or nothing will delete it.</p> </blockquote> <p>DeviceTypeOverride (Set/Get)<blockquote> <p>Allows device type to be specified (eg FILE_DEVICE_CDROM = 0x02). If specified overrides class settings. Setting it to null or nothing will delete it.</blockquote> <p>ForceExclusive (Set/Get)<blockquote> <p>If TRUE, forces the device to only be opened in exclusive mode. If specified, overrides class settings. Setting it to null or nothing will delete it.</blockquote> <p>CharacteristicsOverride (Get/Set)<blockquote> <p>Allows forcing (setting) of FILE_REMOVABLE_MEDIA (1) FILE_READ_ONLY_DEVICE (2) FILE_FLOPPY_DISKETTE (4) FILE_WRITE_ONCE_MEDIA (8) FILE_DEVICE_SECURE_OPEN (256)<p>If specified, overrides class settings. Setting it to null or nothing will delete it.</blockquote> <p>IsRunning (Get)<blockquote> <p>True if device is up and running.</blockquote> <p>IsDisabled (Get)<blockquote> <p>True if device is disabled.</blockquote> <p>HasProblem (Get)<blockquote> <p>True if device has any kind of problem.</blockquote> <p>ProblemCode (Get)<blockquote> <p>Non-zero problem code if available, otherwise 0 (including if the device has a private problem).</blockquote> <p>HasPrivateProblem (Get)<blockquote> <p>True if device has a private problem that no code is available for.</blockquote> <p>IsRootEnumerated (Get)<blockquote> <p>True if device is root enumerated.</blockquote> <p>IsDisableable (Get)<blockquote> <p>True if device can be disabled.</blockquote> <p>IsRemovable (Get)<blockquote> <p>True if device supports being removed while OS is running.</blockquote> <p>Machine (Get)<blockquote> <p>Name of remote machine (usually prefixed by '\\').</blockquote> <h5>Methods</h5> <p>Delete<blockquote> <p>Delete (remove) the device. If successful, this object is invalid and the device is removed.</blockquote> <p>Enable<blockquote> <p>Enable the device. If reboot is required, it is reported through the RebootRequired property.</blockquote> <p>Disable<blockquote> <p>Disable the device. If reboot is required, it is reported through the RebootRequired property.</blockquote> <p>Start<blockquote> <p>Start a stopped device.</blockquote> <p>Stop<blockquote> <p>Stop a running device.</blockquote> <p>Restart<blockquote> <p>Stop and then Start a device (property-change). This may succeed in cases where Stop-Start would not.</blockquote> <p>HasInterface(<i>interfaceClass</i>)<blockquote> <p>Return true if the device supports the specified interface (and that interface is currently active).</blockquote> <p>RegRead(<i>keyPath</i>)<blockquote> <p>If keyPath is prefixed with "SW\" then read the devices software key. If it is prefixed with "HW\" then read the devices hardware key. If keyPath ends in "\" then read key's default value, otherwise read named value. Supports reading of REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ and REG_DWORD values.</blockquote> <p>RegWrite(<i>keyPath</i>,<i>value</i>,<i>[type]</i>)<blockquote> <p>If keyPath is prefixed with "SW\" then write to the devices software key. If it is prefixed with "HW\" then write to the devices hardware key. If keyPath ends in "\" then write key's default value, otherwise write named value. Supports writing of REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD and REG_BINARY values. If type is specified, it should be a string "REG_SZ", "REG_EXPAND_SZ", "REG_MULTI_SZ", "REG_DWORD" or "REG_BINARY" and explicitly indicates the type of value to be written. If not specified, type is determined from value (collections will be written as REG_MULTI_SZ, strings as REG_SZ, integers as REG_DWORD). If "REG_BINARY" is specified, value must be numeric.</blockquote> <p>RegDelete(keyPath)<blockquote> <p>If keyPath is prefixed with "SW\" then delete the specified device software value. If it is prefixed with "HW\" then delete the specified device hardware value.</blockquote> <p>CurrentDriverPackage<blockquote> <p>Determine driver package that was used for device. Return a DriverPackage object or "nothing" if no driver package found for this device.</blockquote> <p>FindDriverPackages(<i>[pathList]</i>)<blockquote> <p>Obtain a DriverPackages collection of all viable drivers by searching system directories and specified pathList (string/collection/array) for driver packages. PathList may contain directories to search for installation scripts, or may specify installation scripts by name (currently only INF files). Sub-directories are not searched. An empty collection is returned if no compatible drivers were found. If a path list is specified, only those files/directories are searched unless one of the paths is "*" (search default paths).<p> </blockquote> <h4>DevCon.DriverPackages</h4> <p>A collection of Driver Packages for a specific device. This collection may be enumerated and/or indexed. This object is always associated with a device. Default method is "Item".<h5>Properties</h5> <p>Count<blockquote> <p>Number of drivers.</blockquote> <h5>Methods</h5> <p>Item(<i>[index]</i>)<blockquote> <p>Returns a specific DriverPackage object. Index is 1-based.</blockquote> <p>BestDriver<blockquote> <p>Returns best DriverPackage object for device.</blockquote> <p>Add(<i>[pathlist]</i>)<blockquote> <p>Add more drivers. <span style="background-color: #FFFF00">Not implemented.</span><p> </blockquote> <h4>DevCon.DriverPackage</h4> <p>An individual driver package.<h5>Properties</h5> <p>Description (Get)<blockquote> <p>Default description for the device. (Note that this may be different to DriverDescription).</blockquote> <p>Manufacturer (Get)<blockquote> <p>Manufacturer of the device.</blockquote> <p>Provider (Get)<blockquote> <p>Provider of the install script.</blockquote> <p>Date (Get)<blockquote> <p>Driver date (returned as a date/time type).</blockquote> <p>Version (Get)<blockquote> <p>Version of driver (returned as a string in format "a.b.c.d").</blockquote> <p>ScriptFile (Get)<blockquote> <p>Name of file that determines how driver is to be installed. Currently only INF files are supported.</blockquote> <p>ScriptName (Get)<blockquote> <p>In context of INF files, this is the decorated "DDInstall" section.</blockquote> <p>HardwareIds (Get)<blockquote> <p>Zero or more hardware ID's returned as a collection of strings. These are devices the package was designed for.</blockquote> <p>CompatibleIds (Get)<blockquote> <p>Zero or more compatible ID's returned as a collection of strings. These are devices the package will work with.</blockquote> <p>DriverDescription (Get)<blockquote> <p>A description of the driver (vs. the default description of the device).</blockquote> <p>Reject (Get/Set)<blockquote> <p>Mark the driver that it should not be considered when using "BestDriver" method in containing collection.</blockquote> <p>IsClassDriver (Get)<blockquote> <p>Indicates this is a class driver.</blockquote> <p>IsCompatibleDriver (Get)<blockquote> <p>Indicates this is a compatible driver.</blockquote> <p>DescriptionIsDuplicate (Get)<blockquote> <p>Indicates there is another driver with same description in the containing collection.</blockquote> <p>ProviderIsDuplicate (Get)<blockquote> <p>Indicates there is another driver with same provider in the containing collection.</blockquote> <p>ExcludeFromList (Get)<blockquote> <p>Exclude this driver when using (future) DisplayAndSelectDriver method on the containing collection.</blockquote> <p>FromInternet (Get)<blockquote> <p>Indicates this driver is from the internet.</blockquote> <p>NoDriver (Get)<blockquote> <p>No physical driver will be installed with this driver package.</blockquote> <p>OldDriver (Get)<blockquote> <p>Driver presently/previously controlled device.</blockquote> <p>OldInternetDriver (Get)<blockquote> <p>Driver was from internet but source files are no longer available.</blockquote> <p>Rank (Get/Set)<blockquote> <p>Obtains/modifies ranking of driver prior to searching using "BestDriver" method in containing collection. The value '0' indicates ideal driver. Values 0x8000-0xFFFF indicate an un-trusted driver.</blockquote> <h5>Methods</h5> <p>DriverFiles<blockquote> <p>For an installed package, the files that are used by the driver. For other drivers, the files that would be used by the driver once installed.</blockquote> <p>Manifest<blockquote> <p>Source location of the files. <span style="background-color: #FFFF00">Not implemented correctly, needs rethinking.</span></blockquote> <p> <h4>DevCon.DeviceIcon {514C3095-47E8-4B24-B831-FB1C22C1B1B6}</h4> <p>ActiveX control to display a device/class icon. Control is windowless and transparent.<h5>Properties</h5> <h5>Methods</h5> <p>ObtainIcon(<i>deviceObject</i>/<i>classObject</i>)</p> <blockquote> <p>Pass in a device or class object. An appropriate icon will be displayed.</p> </blockquote> <p> </p> </FONT><FONT face="Courier" size="3"><H3>FEEDBACK</H3> <P>We welcome your comments, problem reports and wish-list requests. Please submit them by pointing your Internet browser to <A href="http://www.microsoft.com/ddk">http://www.microsoft.com/ddk</A>. </FONT></P> <P align=center><FONT face=Verdana size=2><A href="#top">Top of page</A></P></FONT> <TABLE border=0" cellSpacing="0" width="624"> <TR> <TD bgColor="#00ffff" height="2" vAlign="middle"></TD></TR></TABLE> <FONT face="MS Sans Serif" size=1> <P>© Microsoft Corporation 2001</FONT><FONT face=Verdana size=2> </P></FONT> </BODY>