La idea de este artículo, es para realizar un acercamiento más de WMI (Windows Management Instrumentation) y Visual FoxPro.
Conociendo un poco más WMI
(Windows Management Instrumentation)
Clases WMI-CIMv2-WIN32 y MS Visual FoxPro.
Manifestando el apoyo a la comunidad de desarrolladores de MS Visual FoxPro.
Antonio Muñoz de Burgos y Caravaca.
www.emans.com
Breve introducción
La idea de este artículo, es para realizar un acercamiento más de WMI y VFP, tener la información correspondiente, y poder aprovechar, lo que nos puede proporcionarWMI en la explotación del entorno administrativo, en algún caso o momento determinado.
WMI, no es más, que un componente del Sistema operativo MS Windows, que esta basado en la iniciativa WBEM (Web-Based Enterprise Management)
WMI, nos proporciona acceso a la información de los objetos del entorno administrativo, donde el abanico es realmente extenso, en este artículo me centraré en la sección de ClasesWMI y dentro de estas clases en la que hace referencia a las clases Win32.
El sub-apartado de clases Win32, nos representa el esquema de clases, que se obtiene a partir del espacio nombres (namespace) [rootcimv2]
La clase Win32 nos proporciona las siguientes categorías de clases:
Computer system hardware: clase que representa los objetos relacionados con el hardware.
Operating system: clase que representa los objetos relativos al sistema.
Installed applicaciones: clase que representa los objetos relativos al software
WMI service management: clases usadas por el administrador WMI.
Performance counters: clase que representa la estructuración y actuación de datos.
Si miramos la infraestructura de WMI, encontramos WQL (WMI Query Language), donde WQL no es más que un subset de SQL (ANSI standard Structured Query Language (SQL) con sus especificaciones de extensión.
Debemos de tener en cuenta que WQL, es el lenguaje de consulta de WMI, pero de solo lectura, por lo tanto no es posible realizar inserciones, modificaciones, o borrados en el repositorio de datos WMI o en el proveedor que estemos actuando. Por medio de WQL solamente podremos recibir (explotar) la información.
Nota: cuando menciono que es de "solo lectura" hago referencia exclusiva al sistema de consulta WQL, diferencia clara que tenemos con SQL,no confundir con la exposición e interacción con el modelo de objetos, puede ser de lectura y escritura.
Retomando el origen de este artículo, para la explotación de la información que nos proporciona WMI dentro la clase Win32, debemos de partir del siguiente (namespace) [rootCIMv2]
Para información detallada de CIM (Common Information Model)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/common_information_model.asp
A continuación expongo la lista de las clases WMI que parte del (namespace - espacio de nombre) CIMv2.
En esta lista de clase WIN32, se acompaña cada una, con un ejemplo en VFP para ver su funcionamiento, consulta WQL y propiedades.
Entendiendo; como están expuestos los ejemplos de cada una las clase |
Los ejemplos, están expuestos realizando la consulta WQL sin cláusula WHERE, con el fin de explotar todos los datos posibles, como es lógico; eso es para la representación del ejemplo, pero la aplicación de una cláusula WHERE es simple, ya que cada ejemplo va acompañado de sus correspondientes propiedades.
Detallemos un poco el caso: La primera clase WMI dentro de nuestra lista (ordenada alfabéticamente) es: CMI_DataFile Esta clase, nos proporciona, como su propio nombre nos indica, todos los ficheros del ordenador (PC) al que realizamos la solicitud.
Otro ejemplo: utilicemos la clase : Win32_DiskDrive Esta clase, nos proporciona, información de los discos duros (HHD) del ordenador (PC) al que realizamos la solicitud. En el ejemplo que expongo, al igual que el caso comentado anteriormente, se retornará la información de todos los discos, con todas las propiedades correspondientes, que son las siguientes: .Availability Como aplicar una cláusula WHERE en este caso, pues de igual forma que en el anterior, supongamos que deseamos filtrar por los disco que tenga el interface del tipo [IDE], para ello haremos uso de la propiedad : [InterfaceType] lcWQL = "SELECT * FROM CIM_DataFile WHERE InterfaceType = 'IDE' " Otro ejemplo: utilicemos la clase : Win32_NetworkConnection Esta clase, nos proporciona, información sobre las conexiones de Red del ordenador (PC) al que realizamos la solicitud. En el ejemplo que expongo, al igual que el los casos anteriores, se retornará la información de todos las conexiones. Podemos aplicar una cláusula WHERE por alguna de sus propiedades, según se indican en el ejemplo, si filtramos por [localName] de la conexión, se corresponde con la [unidad], si lo hacemos por [Name] es el nombre del recurso compartido lcWQL = "SELECT * FROM CIM_DataFile WHERE LocalName = 'Z:' "
CONSIDERACIÓN IMPORTANTE: La propiedades como es lógico, retornan valores de diferentes tipos, ya pueden ser de tipo "string", "fecha", "numérico", etc, pero si es importante tener en cuenta, que hay propiedades que retornan [ARRAY] u objetos, por supuesto eso no representa problema alguno, ya que lo podemos tratar según el caso de forma fácil con VFP. Concretamente, en el ejemplo que he expuesto de la Clase: Win32_DiskDrive, tenemos una propiedad que nos retorna un [ARRAY], que es la propiedad ".Capabilities" Tal como esta puesta en el ejemplo, dará un error de incompatibilidad de tipos, debería tener algo como esto: FOR lnIndi = 1 TO ALEN( loItem.Capabilities ) El realizar esta mención; Para ello se debe anular la línea ON ERROR |
Como os podéis dar cuenta, aquí lo importante y fundamental es:
(1) Saber, que existe una clase WMI que realiza una determinada acción.
(2) Saber, como realizar la consulta a la clase WMI con WQL.
(3) Saber las propiedades de la clase WMI.
A partir de ahí, el cambiar el código, para explotar una información concreta, ya no es un problema.
|
Para más detalles sobre los comandos y/o palabras (SQL for WMI)
SQL for WMI
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/sql_for_wmi.asp
NOTA |
Lista de Clases WMI a partir de CIMv2 (ordenadas alfabéticamente) |
CMI_DataFile CMI_DirectoryContainsFile CMI_ProcessExecutable CIM_VideoControllerResolution Msft_Providers Msft_WmiProvider_Counters NetDiagnostics Win32_1394Controller Win32_1394ControllerDevice Win32_AccountSID Win32_ActionCheck Win32_ActiveRoute Win32_AllocatedResource Win32_ApplicationCommandLine Win32_ApplicationService Win32_AssociatedBattery Win32_AssociatedProcessorMemory Win32_AutochkSetting Win32_BaseBoard Win32_Battery Win32_Binary Win32_BindImageAction Win32_BIOS Win32_BootConfiguration Win32_Bus Win32_CacheMemory Win32_CDROMDrive Win32_CheckCheck Win32_CIMLogicalDeviceCIMDataFile Win32_ClassicCOMApplicationClasses Win32_ClassicCOMClass Win32_ClassicCOMClassSetting Win32_ClassicCOMClassSettings Win32_ClassInforAction Win32_ClientApplicationSetting Win32_CodecFile Win32_COMApplicationSettings Win32_COMClassAutoEmulator Win32_ComClassEmulator Win32_CommandLineAccess Win32_ComponentCategory Win32_ComputerSystem Win32_ComputerSystemProcessor Win32_ComputerSystemProduct Win32_ComputerSystemWindowsProductActivationSetting Win32_Condition Win32_ConnectionShare Win32_ControllerHastHub Win32_CreateFolderAction Win32_CurrentProbe Win32_DCOMApplication Win32_DCOMApplicationAccessAllowedSetting Win32_DCOMApplicationLaunchAllowedSetting Win32_DCOMApplicationSetting Win32_DependentService Win32_Desktop Win32_DesktopMonitor Win32_DeviceBus Win32_DeviceMemoryAddress Win32_Directory Win32_DirectorySpecification Win32_DiskDrive Win32_DiskDrivePhysicalMedia Win32_DiskDriveToDiskPartition Win32_DiskPartition Win32_DiskQuota Win32_DisplayConfiguration Win32_DisplayControllerConfiguration Win32_DMAChanner Win32_DriverForDevice Win32_DriverVXD Win32_DuplicateFileAction Win32_Environment Win32_EnvironmentSpecification Win32_ExtensionInfoAction Win32_Fan Win32_FileSpecification Win32_FloppyController Win32_FloppyDrive Win32_FontInfoAction Win32_Group Win32_GroupDomain Win32_GroupUser Win32_HeatPipe Win32_IDEController Win32_IDEControllerDevice Win32_ImplementedCategory Win32_InfraredDevice Win32_IniFileSpecification Win32_InstalledSoftwareElement Win32_IP4PersistedRouteTable Win32_IP4RouteTable Win32_IRQResource Win32_Keyboard Win32_LaunchCondition Win32_LoadOrderGroup Win32_LoadOrderGroupServiceDependencies Win32_LoadOrderGroupServiceMembers Win32_LocalTime Win32_LoggedOnUser Win32_LogicalDisk Win32_LogicalDiskRootDirectory Win32_LogicalDiskToPartition Win32_LogicalFileAccess Win32_LogicalFileAuditing Win32_LogicalFileGroup Win32_LogicalFileOwner Win32_LogicalFileSecuritySetting Win32_LogicalMemoryConfiguration Win32_LogicalProgramGroup Win32_LogicalProgramGroupDirectory Win32_LogicalProgramGroupItem Win32_LogicalProgramGroupItemDataFile Win32_LogicalShareAccess Win32_LogicalShareAuditing Win32_LogicalShareSecuritySetting Win32_LogonSession Win32_LogonSessionMappedDisk Win32_MappedLogicalDisk Win32_MemoryArray Win32_MemoryArrayLocation Win32_MemoryDevice Win32_MemoryDeviceArray Win32_MemoryDeviceLocation Win32_MIMEInfoAction Win32_MotherboardDevice Win32_MoveFileAction Win32_NamedJobObject Win32_NamedJobObjectActgInfo Win32_NamedJobObjectLimit Win32_NamedJobObjectLimitSetting Win32_NamedJobObjectProcess Win32_NamedJobObjectSecLimit Win32_NamedJobObjectSecLimitSetting Win32_NamedJobObjectStatistics Win32_NetworkAdapter Win32_NetworkAdapterConfiguration Win32_NetworkAdapterSetting Win32_NetworkClient Win32_NetworkConnection Win32_NetworkLoginProfile Win32_NetworkProtocol Win32_NTDomain Win32_NTEventlogFile Win32_NTLogEvent Win32_NTLogEventComputer Win32_NTLogEvnetLog Win32_NTLogEventUser Win32_ODBCAttribute Win32_ODBCDataSourceAttribute Win32_ODBCDataSourceSpecification Win32_ODBCDriverAttribute Win32_ODBCDriverSoftwareElement Win32_ODBCDriverSpecification Win32_ODBCSourceAttribute Win32_ODBCTranslatorSpecification Win32_OnBoardDevice Win32_OperatingSystem Win32_OperatingSystemAutochkSetting Win32_OperatingSystemQFE Win32_OSRecoveryConfiguración Win32_PageFile Win32_PageFileElementSetting Win32_PageFileSetting Win32_PageFileUsage Win32_ParallelPort Win32_Patch Win32_PatchFile Win32_PatchPackage Win32_PCMCIAControler Win32_PerfFormattedData_ASP_ActiveServerPages Win32_PerfFormattedData_ASPNET_114322_ASPNETAppsv114322 Win32_PerfFormattedData_ASPNET_114322_ASPNETv114322 Win32_PerfFormattedData_ASPNET_2040607_ASPNETAppsv2040607 Win32_PerfFormattedData_ASPNET_2040607_ASPNETv2040607 Win32_PerfFormattedData_ASPNET_ASPNET Win32_PerfFormattedData_ASPNET_ASPNETApplications Win32_PerfFormattedData_aspnet_state_ASPNETStateService Win32_PerfFormattedData_ContentFilter_IndexingServiceFilter Win32_PerfFormattedData_ContentIndex_IndexingService Win32_PerfFormattedData_DTSPipeline_SQLServerDTSPipeline Win32_PerfFormattedData_Fax_FaxServices Win32_PerfFormattedData_InetInfo_InternetInformationServicesGlobal Win32_PerfFormattedData_ISAPISearch_HttpIndexingService Win32_PerfFormattedData_MSDTC_DistributedTransactionCoordinator Win32_PerfFormattedData_NETCLRData_NETCLRData Win32_PerfFormattedData_NETCLRNetworking_NETCLRNetworking Win32_PerfFormattedData_NETDataProviderforOracle_NETCLRData Win32_PerfFormattedData_NETDataProviderforSqlServer_NETDataProviderforSqlServer Win32_PerfFormattedData_NETFramework_NETCLRExceptions Win32_PerfFormattedData_NETFramework_NETCLRInterop Win32_PerfFormattedData_NETFramework_NETCLRJit Win32_PerfFormattedData_NETFramework_NETCLRLoading Win32_PerfFormattedData_NETFramework_NETCLRLocksAndThreads Win32_PerfFormattedData_NETFramework_NETCLRMemory Win32_PerfFormattedData_NETFramework_NETCLRRemoting Win32_PerfFormattedData_NETFramework_NETCLRSecurity Win32_PerfFormattedData_NTFSDRV_ControladordealmacenamientoNTFSdeSMTP Win32_PerfFormattedData_Outlook_Outlook Win32_PerfFormattedData_PerfDisk_LogicalDisk Win32_PerfFormattedData_PerfDisk_PhysicalDisk Win32_PerfFormattedData_PerfNet_Browser Win32_PerfFormattedData_PerfNet_Redirector Win32_PerfFormattedData_PerfNet_Server Win32_PerfFormattedData_PerfNet_ServerWorkQueues Win32_PerfFormattedData_PerfOS_Cache Win32_PerfFormattedData_PerfOS_Memory Win32_PerfFormattedData_PerfOS_Objects Win32_PerfFormattedData_PerfOS_PagingFile Win32_PerfFormattedData_PerfOS_Processor Win32_PerfFormattedData_PerfOS_System Win32_PerfFormattedData_PerfProc_FullImage_Costly Win32_PerfFormattedData_PerfProc_Image_Costly Win32_PerfFormattedData_PerfProc_JobObject Win32_PerfFormattedData_PerfProc_JobObjectDetails Win32_PerfFormattedData_PerfProc_Process Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly Win32_PerfFormattedData_PerfProc_Thread Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly Win32_PerfFormattedData_RemoteAccess_RASPort | Win32_PerfFormattedData_RemoteAccess_RASTotal Win32_PerfFormattedData_RSVP_RSVPInterfaces Win32_PerfFormattedData_RSVP_RSVPService Win32_PerfFormattedData_Spooler_PrintQueue Win32_PerfFormattedData_TapiSrv_Telephony Win32_PerfFormattedData_Tcpip_ICMP Win32_PerfFormattedData_Tcpip_IP Win32_PerfFormattedData_Tcpip_NBTConnection Win32_PerfFormattedData_Tcpip_NetworkInterface Win32_PerfFormattedData_Tcpip_TCP Win32_PerfFormattedData_Tcpip_UDP Win32_PerfFormattedData_TermService_TerminalServices Win32_PerfFormattedData_TermService_TerminalServicesSession Win32_PerfFormattedData_W3SVC_WebService Win32_PerfRawData_ASP_ActiveServerPages Win32_PerfRawData_ASPNET_114322_ASPNETAppsv114322 Win32_PerfRawData_ASPNET_114322_ASPNETv114322 Win32_PerfRawData_ASPNET_2040607_ASPNETAppsv2040607 Win32_PerfRawData_ASPNET_2040607_ASPNETv2040607 Win32_PerfRawData_ASPNET_ASPNET Win32_PerfRawData_ASPNET_ASPNETApplications Win32_PerfRawData_aspnet_state_ASPNETStateService Win32_PerfRawData_ContentFilter_IndexingServiceFilter Win32_PerfRawData_ContentIndex_IndexingService Win32_PerfRawData_DTSPipeline_SQLServerDTSPipeline Win32_PerfRawData_Fax_FaxServices Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal Win32_PerfRawData_ISAPISearch_HttpIndexingService Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator Win32_PerfRawData_NETCLRData_NETCLRData Win32_PerfRawData_NETCLRNetworking_NETCLRNetworking Win32_PerfRawData_NETDataProviderforOracle_NETCLRData Win32_PerfRawData_NETDataProviderforSqlServer_NETDataProviderforSqlServer Win32_PerfRawData_NETFramework_NETCLRExceptions Win32_PerfRawData_NETFramework_NETCLRInterop Win32_PerfRawData_NETFramework_NETCLRJit Win32_PerfRawData_NETFramework_NETCLRLoading Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads Win32_PerfRawData_NETFramework_NETCLRMemory Win32_PerfRawData_NETFramework_NETCLRRemoting Win32_PerfRawData_NETFramework_NETCLRSecurity Win32_PerfRawData_NTFSDRV_ControladordealmacenamientoNTFSdeSMTP Win32_PerfRawData_Outlook_Outlook Win32_PerfRawData_PerfDisk_LogicalDisk Win32_PerfRawData_PerfDisk_PhysicalDisk Win32_PerfRawData_PerfNet_Browser Win32_PerfRawData_PerfNet_Redirector Win32_PerfRawData_PerfNet_Server Win32_PerfRawData_PerfNet_ServerWorkQueues Win32_PerfRawData_PerfOS_Cache Win32_PerfRawData_PerfOS_Memory Win32_PerfRawData_PerfOS_Objects Win32_PerfRawData_PerfOS_PagingFile Win32_PerfRawData_PerfOS_Processor Win32_PerfRawData_PerfOS_System Win32_PerfRawData_PerfProc_FullImage_Costly Win32_PerfRawData_PerfProc_Image_Costly Win32_PerfRawData_PerfProc_JobObject Win32_PerfRawData_PerfProc_JobObjectDetails Win32_PerfRawData_PerfProc_Process Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly Win32_PerfRawData_PerfProc_Thread Win32_PerfRawData_PerfProc_ThreadDetails_Costly Win32_PerfRawData_RemoteAccess_RASPort Win32_PerfRawData_RemoteAccess_RASTotal Win32_PerfRawData_RSVP_RSVPInterfaces Win32_PerfRawData_RSVP_RSVPService Win32_PerfRawData_Spooler_PrintQueue Win32_PerfRawData_TapiSrv_Telephony Win32_PerfRawData_Tcpip_ICMP Win32_PerfRawData_Tcpip_IP Win32_PerfRawData_Tcpip_NBTConnection Win32_PerfRawData_Tcpip_NetworkInterface Win32_PerfRawData_Tcpip_TCP Win32_PerfRawData_Tcpip_UDP Win32_PerfRawData_TermService_TerminalServices Win32_PerfRawData_TermService_TerminalServicesSession Win32_PerfRawData_W3SVC_WebService Win32_PhysicalMedia Win32_PhysicalMemory Win32_PhysicalMemoryArray Win32_PhysicalMemoryLocation Win32_PingStatus Win32_PNPAllocatedResource Win32_PnPDevice Win32_PnPEntity Win32_PnPSignedDriver Win32_PnPSignedDriverCIMDataFile Win32_PointingDevice Win32_PortableBattery Win32_PortConnector Win32_PortResource Win32_POTSModem Win32_POTSModemToSerialPort Win32_Printer Win32_PrinterConfiguration Win32_PrinterController Win32_PrinterDriver Win32_PrinterDriverDll Win32_PrinterSetting Win32_PrinterShare Win32_PrintJob Win32_Process Win32_Processor Win32_Product Win32_ProductCheck Win32_ProductResource Win32_ProductSoftwareFeatures Win32_ProgIDSpecification Win32_ProgramGroup Win32_ProgramGroupContents Win32_Property Win32_ProtocolBinding Win32_Proxy Win32_PublishComponentAction Win32_QuickFixEngineering Win32_QuotaSetting Win32_Refrigeration Win32_Registry Win32_RegistryAction Win32_RemoveFileAction Win32_RemoveIniAction Win32_ReserveCost Win32_ScheduledJob Win32_SCSIController Win32_SCSIControllerDevice Win32_SecuritySettingOfLogicalFile Win32_SecuritySettingOfLogicalShare Win32_SelfRegModuleAction Win32_SerialPort Win32_SerialPortConfiguration Win32_SerialPortSetting Win32_ServerConnection Win32_ServerSession Win32_Service Win32_ServiceControl Win32_ServiceSpecification Win32_ServiceSpecificationService Win32_SessionConnection Win32_SessionProcess Win32_Share Win32_ShareToDirectory Win32_ShortcutAction Win32_ShortcutFile Win32_ShortcutSAP Win32_SID Win32_SoftwareElement Win32_SoftwareElementAction Win32_SoftwareElementCheck Win32_SoftwareElementCondition Win32_SoftwareElementResource Win32_SoftwareFeature Win32_SoftwareFeatureAction Win32_SoftwareFeatureCheck Win32_SoftwareFeatureParent Win32_SoftwareFeatureSoftwareElements Win32_SoundDevice Win32_StartupCommand Win32_SubDirectory Win32_SystemAccount Win32_SystemBIOS Win32_SystemBootConfiguration Win32_SystemDesktop Win32_SystemDevices Win32_SystemDriver Win32_SystemDriverPNPEntity Win32_SystemEnclosure Win32_SystemLoadOrderGroups Win32_SystemLogicalMemoryConfiguration Win32_SystemNetworkConnections Win32_SystemOperatingSystem Win32_SystemPartitions Win32_SystemProcesses Win32_SystemProgramGroups Win32_SystemResources Win32_SystemServices Win32_SystemSlot Win32_SystemSystemDriver Win32_SystemTimeZone Win32_SystemUsers Win32_TapeDrive Win32_TCPIPPrinterPort Win32_TemperatureProbe Win32_Terminal Win32_TerminalService Win32_TerminalServiceSetting Win32_TerminalServiceToSetting Win32_TerminalTerminalSetting Win32_Thread Win32_TimeZone Win32_TSAccount Win32_TSClientSetting Win32_TSEnvironmentSetting Win32_TSGeneralSetting Win32_TSLogonSetting Win32_TSNetworkAdapterListSetting Win32_TSNetworkAdapterSetting Win32_TSPermissionsSetting Win32_TSRemoteControlSetting Win32_TSSessionDirectory Win32_TSSessionDirectorySetting Win32_TSSessionSetting Win32_TypeLibraryAction Win32_UninterruptiblePowerSupply Win32_USBController Win32_USBControllerDevice Win32_USBHub Win32_UserAccount Win32_UserDesktop Win32_UserInDomain Win32_UTCTime Win32_VideoController Win32_VideoSettings Win32_VoltageProbe Win32_VolumeQuotaSetting Win32_WindowsProductActivation Win32_WMIElementSetting Win32_WMISetting |
Requerimientos mínimos, en cuando a la disponibilidad en el Sistema Operativo y componentes WMI |
WMI, se encuentra incluido en MS Windows 2000 o superior, MS Windows XP, y MS Windows Millenniun Edition (Me).
Para MS Windows 95 (OSR2), MS Windows 98 o MS Windows NT 4.0, puedes realizar la descarga de la siguiente URL:
Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98)
http://www.microsoft.com/downloads/details.aspx?FamilyId=98A4C5BA-337B-4E92-8C18-A63847760EA5&displaylang=en
Zona de descarga en la Web de Microsoft |
Management (WMI) Extensions for Visual Studio .NET 2003 Server Explorer
http://www.microsoft.com/downloads/details.aspx?FamilyID=62d91a63-1253-4ea6-8599-68fb3ef77de1&DisplayLang=en
Management (WMI) Extensions for Visual Studio .NET 2002 Server Explorer (RTM)
http://www.microsoft.com/downloads/details.aspx?FamilyId=EF7594D3-4907-4AF6-B7D8-6E22115FFAF0&displaylang=en
WMI Administrative Tools
http://www.microsoft.com/downloads/details.aspx?FamilyId=6430F853-1120-48DB-8CC5-F2ABDC3ED314&displaylang=en
Windows Management Instrumentation Tutorial
http://www.microsoft.com/downloads/details.aspx?FamilyId=720F0CAE-64A7-457F-BB95-E4F33E0CBC55&displaylang=en
Windows Management Instrumentation (WMI) SNMP Provider 1.5 Build 1085.0005 (Windows NT 4.0 and 2000)
http://www.microsoft.com/downloads/details.aspx?FamilyId=C6B30755-6D20-4107-82C5-089E3DFE4FEE&displaylang=en
● Información detallada de WMI en la plataforma [SDK: Windows Management Instrumentation]
Antonio Muñoz de Burgos y Caravaca
www.emans.com (Web realizada en vFoxPro)
Sevilla - España
Manifestando el apoyo a la comunidad de desarrolladores de MS Visual FoxPro.
Todas las marcas aquí mencionadas, están registradas por sus respectivos fabricantes.