WMI SDK Sample - HiPerfClient

Windows Management Instrumentation SDK Sample

HiPerfClient
The HiPerfClient sample simply creates a refresher using the WMI high performance API. The client adds a set of Win32_BasicHiPerf enumerators and instances to the refresher, enters a finite loop that will refresh the values and outputs them to the console, and finally removes the objects from the refresher and quits.

The WMI high performance API is only supported on Windows 2000 platforms.

NOTE: The HiPerfClient sample has been designed to work with the HiPerfProvider sample. Please see the HiPerfProvider sample documentation for instructions on building and using the provider sample. Make sure the provider is properly built and registered before using the HiPerfClient sample.

Building the Client Application

The application can be built from the command line using NMAKE, or it can be built using Microsoft Visual C++.

From the command line in the sample installation directory, type the following:

NMAKE /f "Makefile"

From Microsoft Visual C++:

1. Select File + Open Workspace

2. Select the SamplCli.dsp file

General Notes

Things to remember when you're building your own WMI client application:

1. If you want your client to run on NT and non-DCOM versions of Windows 95, manually load the ole32.dll and see if CoInitializeSecurity() exists. This routine won’t exist on Windows 95 installations that don’t have DCOM installed separately. If this routine doesn't exist, the asynchronous routines in this sample won’t work because of mismatched security level problems. The synchronous techniques will still work.

2. If you don’t care about non-DCOM versions of Windows 95, you can define _WIN32_DCOM so that CoInitializeSecurity() is available for implicit linking. Don't use _WIN32_WINNT to get this prototype since it won't compile under the Windows 95/98 operating systems.

3. In any case, the CoInitializeSecurity() call (in InitInstance()) is required to work around a security problem when WMI trying to call a Sink object but won't identify itself. The CoInitializeSecurity() call turns off the authentication requirement.

4. WMI interfaces are defined in wbemcli.h and wbemprov.h found in the wbem\include directory. You may #include both these files by including just wbemidl.h located in the same directory.

5. WMI interface CLSIDs are defined in wbemuuid.lib. If you get unresolved externals in interfaces and CLSIDs, this is what is missing.

6. You'll need to link with oleaut32.lib and ole32.lib to get the needed COM support.

7. In the Link|Output settings, specify 'wWinMainCRTStartup' as the entry point. This is per the Unicode programming instructions.

8. If you're using the makefiles, don't forget to set the Visual C++ environment variables. This is done by running VCVARS32.BAT.