Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

176 lines
5.6 KiB

#include "namellst.h"
#include "hwdev.h"
#include "cmmn.h"
#include "misc.h"
#include <objbase.h>
#include <shpriv.h>
///////////////////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////////////////////
class CVolume : public CNamedElem, public CHandleNotifTarget
{
public:
// CNamedElem
HRESULT Init(LPCWSTR pszElemName);
// CHandleNotifTarget
HRESULT HNTHandleEvent(DEV_BROADCAST_HANDLE* pdbh, DWORD dwEventType);
// CVolume
// Returns S_FALSE if can't find it
HRESULT GetHWDeviceInst(CHWDeviceInst** pphwdevinst);
HRESULT GetDeviceType(DEVICE_TYPE* pdevtype);
HRESULT GetDeviceNumber(ULONG* puldeviceNumber);
HRESULT GetVolumeConstInfo(LPWSTR pszVolumeGUID, DWORD cchVolumeGUID,
DWORD* pdwVolumeFlags, DWORD* pdwDriveType, DWORD* pdwDriveCap);
HRESULT GetVolumeMediaInfo(LPWSTR pszLabel, DWORD cchLabel,
LPWSTR pszFileSystem, DWORD cchFileSystem, DWORD* pdwFileSystemFlags,
DWORD* pdwMaxFileNameLen, DWORD* pdwRootAttributes,
DWORD* pdwSerialNumber, DWORD* pdwDriveState, DWORD* pdwMediaState,
DWORD* pdwMediaCap);
HRESULT GetIconAndLabelInfo(LPWSTR pszAutorunIconLocation,
DWORD cchAutorunIconLocation, LPWSTR pszAutorunLabel, DWORD cchAutorunLabel,
LPWSTR pszIconLocationFromService, DWORD cchIconLocationFromService,
LPWSTR pszNoMediaIconLocationFromService,
DWORD cchNoMediaIconLocationFromService,
LPWSTR pszLabelFromService, DWORD cchLabelFromService);
HRESULT HandleArrival();
HRESULT HandleRemoval();
// Caller needs to free the returned ppsz
HRESULT GetAllMountPoints(LPWSTR* ppsz);
HRESULT MediaIsAccessible(BOOL* pfAccessible);
public:
static HRESULT Create(CNamedElem** ppelem);
static HRESULT GetFillEnum(CFillEnum** ppfillenum);
public:
CVolume();
~CVolume();
private:
HRESULT _InitHelper(LPCWSTR pszElemName);
void _HandleAccessDenied();
HRESULT _CreateMountPoints();
HRESULT _UpdateMountPoints();
HRESULT _GetMountPoints(LPWSTR* ppsz, DWORD* pcch);
HRESULT _CreateMtPt(LPWSTR pszMtPt);
HRESULT _RemoveMtPt(LPWSTR pszMtPt);
HRESULT _RegisterNotif();
HRESULT _UnregisterNotif();
HRESULT _InitDriveType(HANDLE hDevice);
HRESULT _InitHWDeviceInst();
HRESULT _UpdateConstInfo(HANDLE hDevice);
HRESULT _UpdateMediaInfo(HANDLE hDevice, BOOL fImpersonate);
HRESULT _UpdateMediaInfoOnRemove();
HRESULT _UpdateSoftEjectCaps();
HRESULT _UpdateRemovableDevice();
HRESULT _UpdateHasMedia(HANDLE hDevice);
HRESULT _UpdateSpecialFilePresence();
HRESULT _UpdateTrackInfo(HANDLE hDevice);
HRESULT _FillMMC2CD(HANDLE hDevice);
HRESULT _UpdateMMC2CDInfo(HANDLE hDevice);
HRESULT _ExtractAutorunIconAndLabel();
HRESULT _GetDeviceHandleSafe(HANDLE* phDevice, BOOL fGenericReadRequired);
HRESULT _CloseDeviceHandleSafe(HANDLE hDevice);
HRESULT _HandleMediaArrival();
HRESULT _HandleMediaRemoval();
HRESULT _HandleVolumeChange();
HRESULT _AdviseVolumeChangeHelper(BOOL fAdded);
HRESULT _AdviseMountPointHelper(LPCWSTR pszMountPoint, BOOL fAdded);
HRESULT _AdviseVolumeMountingEvent(DWORD dwEvent);
HRESULT _GetVOLUMEINFO2(VOLUMEINFO2** ppvolinfo2);
HRESULT _ShouldTryAutoplay(BOOL* pfTry);
HRESULT _GetDeviceIDDisk(LPWSTR pszDeviceIDDisk,
DWORD cchDeviceIDDisk);
HRESULT _DVDRAMHack(HANDLE hDevice);
public:
DWORD _dwState;
private:
DWORD _dwMediaPresentFromEvent;
DWORD _dwMediaState;
DWORD _dwMediaCap;
WCHAR _szVolumeGUID[50];
DWORD _dwVolumeFlags;
DWORD _dwDriveType;
DWORD _dwDriveCap;
DWORD _dwDriveState;
WCHAR _szDeviceIDDisk[MAX_DEVICEID];
WCHAR _szLabel[MAX_LABEL];
DWORD _dwSerialNumber;
DWORD _dwMaxFileNameLen;
DWORD _dwFileSystemFlags;
WCHAR _szFileSystem[MAX_FILESYSNAME];
DWORD _dwRootAttributes;
DEVICE_TYPE _devtype;
ULONG _ulDeviceNumber;
ULONG _ulPartitionNumber;
LPWSTR _pszMountPoints;
DWORD _cchMountPoints;
CHWDeviceInst _hwdevinst;
BOOL _fHWDevInstInited;
DWORD* _prgMMC2Features;
BOOL _fFirstTime;
CCriticalSection _cs;
DEVINST _devinst;
HDEVNOTIFY _hdevnotify;
#ifdef DEBUG
BOOL _fGenericReadRequired;
#endif
BOOL _fProcessMediaArrived;
public: //for now, and for CStorageInfoImpl only
WCHAR _szAutorunIconLocation[MAX_ICONLOCATION];
WCHAR _szAutorunLabel[MAX_LABEL];
};
class CVolumeFillEnum : public CFillEnum
{
public:
HRESULT Next(LPWSTR pszElemName, DWORD cchElemName, DWORD* pcchRequired);
public:
HRESULT _Init();
private:
CIntfFillEnum _intffillenum;
};