|
WMIDiskPerf
The WMIDiskPerf sample surfaces disk performance information
produced by the DiskPerf driver using WMI. The driver produces disk partition performance
instrumentation data and exposes this data through a WMI interface. The information provided includes statistics
such as number of bytes read and written, number of read and write operations
performed and the time these operations took to complete. The DiskPerf driver is included as a sample
on the Windows 2000 Professional DDK and is also standard as part of the
Windows 2000 Professional operating system installation.
Building the WMIDiskPerf Sample
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 WMIDiskPerf.dsp file
Getting
Started with the WMIDiskPerf Sample
To use this sample, the following steps are required:
1)
Install Windows 2000 Professional operating system.
2)
Install the WMI SDK for Windows 2000.
3)
Build the sample application provided here, using the WMI SDK to
produce WMIDiskPerf.exe.
4)
If desired, the DiskPerf driver in the Windows 2000 Professional
DDK can replace the one from the operating system install. To do so, compile the DiskPerf driver in the
DDK and substitute it for the standard driver.
5)
Execute the WMIDiskPerf sample. You should see instrumentation
data produced by the DiskPerf driver visible via the WMI application. From
the command line in the sample installation directory, type the following:
WMIDiskPerf.exe
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 wmi\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.