|
|
/******************************************************************
PhysicalMedia.H -- WMI provider class definition
Copyright (c) 2000-2001 Microsoft Corporation, All Rights Reserved
*******************************************************************/
#ifndef _CPHYSICALMEDIA_H_
#define _CPHYSICALMEDIA_H_
#define PROVIDER_NAME_PHYSICALMEDIA L"Win32_PhysicalMedia"
#define ERROR_CLASSPATH L"\\\\.\\root\\cimv2:__ExtendedStatus"
#define TAG L"Tag"
#define SERIALNUMBER L"SerialNumber"
//
// Valid values for the bCommandReg member of IDEREGS.
//
#define IDE_ATAPI_ID 0xA1 // Returns ID sector for ATAPI.
#define IDE_ID_FUNCTION 0xEC // Returns ID sector for ATA.
#define IDE_EXECUTE_SMART_FUNCTION 0xB0 // Performs SMART cmd.
// Requires valid bFeaturesReg,
#if(_WIN32_WINNT >= 0x0400)
#define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
// IOCTL support for SMART drive fault prediction.
#define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
#define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#endif /* _WIN32_WINNT >= 0x0400 */ // bCylLowReg, and bCylHighReg
//---------------------------------------------------------------------
// The following struct defines the interesting part of the IDENTIFY
// buffer:
//---------------------------------------------------------------------
typedef struct _IDSECTOR { USHORT wGenConfig; USHORT wNumCyls; USHORT wReserved; USHORT wNumHeads; USHORT wBytesPerTrack; USHORT wBytesPerSector; USHORT wSectorsPerTrack; USHORT wVendorUnique[3]; CHAR sSerialNumber[20]; USHORT wBufferType; USHORT wBufferSize; USHORT wECCSize; CHAR sFirmwareRev[8]; CHAR sModelNumber[40]; USHORT wMoreVendorUnique; USHORT wDoubleWordIO; USHORT wCapabilities; USHORT wReserved1; USHORT wPIOTiming; USHORT wDMATiming; USHORT wBS; USHORT wNumCurrentCyls; USHORT wNumCurrentHeads; USHORT wNumCurrentSectorsPerTrack; ULONG ulCurrentSectorCapacity; USHORT wMultSectorStuff; ULONG ulTotalAddressableSectors; USHORT wSingleWordDMA; USHORT wMultiWordDMA; BYTE bReserved[128]; } IDSECTOR, *PIDSECTOR;
class CPhysicalMedia : public Provider { private: HRESULT Enumerate( MethodContext *pMethodContext ); HRESULT GetPhysDiskInfoNT ( CInstance *pInstance, LPCWSTR lpwszDiskSpec, BYTE bIndex ); void ChangeByteOrder(char *szString, USHORT uscStrSize); HRESULT GetIdentifyData( HANDLE hDrive, BYTE bDriveNumber, BYTE bDfpDriveMap, BYTE bIDCmd, CHString &a_SerialNumber ); HRESULT EnableSmart( HANDLE hDrive, BYTE bDriveNum, BYTE & bDfpDriveMap ); HRESULT GetSmartVersion( HANDLE Handle, BYTE bDriveNumber, CHString &a_SerialNumber ); HRESULT GetSCSIVersion( HANDLE h, BYTE bDriveNumber, CHString &a_SerialNumber);
protected:
HRESULT EnumerateInstances (
MethodContext *pMethodContext, long lFlags = 0L ) ;
HRESULT GetObject (
CInstance *pInstance, long lFlags, CFrameworkQuery &Query ) ; public: CPhysicalMedia (
LPCWSTR lpwszClassName, LPCWSTR lpwszNameSpace ) ;
virtual ~CPhysicalMedia () ; private: }; #endif
|