#include <volume.h>
Inherits BazisLib::DDK::StorageDevice.
Inherited by BazisLib::DDK::BasicCDVolume, and BazisLib::DDK::UniversalVolume.

Public Member Functions | |
| BasicStorageVolume (LPCWSTR pwszDevicePrefix=L"BazisVolume", bool bDeleteThisAfterRemoveRequest=false, ULONG DeviceType=FILE_DEVICE_DISK, ULONG DeviceCharacteristics=FILE_DEVICE_SECURE_OPEN, bool bExclusive=FALSE, ULONG AdditionalDeviceFlags=DO_POWER_PAGABLE) | |
| ~BasicStorageVolume () | |
| bool | Valid () |
| NTSTATUS | AddDevice (Driver *pDriver, PDEVICE_OBJECT PhysicalDeviceObject) |
Protected Member Functions | |
| bool | EnableWindowsCacheBugWorkaround (size_t IntermediateBufferSize=1024 *1024) |
| Allocates a shadow buffer for read operations preventing to prevent Windows read cache bug. | |
| bool | UpdateVolumeSize () |
| Updates stored volume size. | |
| virtual NTSTATUS | DispatchRoutine (IN IncomingIrp *Irp, IO_STACK_LOCATION *IrpSp) override |
| virtual NTSTATUS | OnRead (PMDL pMdl, ULONG Length, ULONG Key, ULONGLONG ByteOffset, PULONG pBytesDone) override |
| virtual NTSTATUS | OnWrite (PMDL pMdl, ULONG Length, ULONG Key, ULONGLONG ByteOffset, PULONG pBytesDone) override |
| virtual NTSTATUS | OnCreate (PIO_SECURITY_CONTEXT SecurityContext, ULONG Options, USHORT FileAttributes, USHORT ShareAccess, PFILE_OBJECT pFileObj) override |
| virtual NTSTATUS | OnClose () override |
| virtual NTSTATUS | OnCheckVerify (ULONG OriginalControlCode, ULONG *pChangeCount) override |
| virtual NTSTATUS | OnGetPartitionInfo (PPARTITION_INFORMATION pInfo, ULONG BufferLength, PULONG pBytesDone) override |
| virtual NTSTATUS | OnGetPartitionInfoEx (PPARTITION_INFORMATION_EX pInfo, ULONG BufferLength, PULONG pBytesDone) override |
| virtual NTSTATUS | OnVolumeOnline () override |
| virtual NTSTATUS | OnVolumeOffline () override |
| virtual NTSTATUS | OnGetDeviceNumber (PSTORAGE_DEVICE_NUMBER pNumber) override |
| virtual NTSTATUS | OnGetDriveGeometry (PDISK_GEOMETRY pGeo) override |
| virtual NTSTATUS | OnGetLengthInfo (PGET_LENGTH_INFORMATION pLength) override |
| virtual NTSTATUS | OnDiskIsWritable () override |
| virtual NTSTATUS | OnMediaRemoval (bool bLock) override |
| virtual NTSTATUS | OnGetHotplugInfo (PSTORAGE_HOTPLUG_INFO pHotplugInfo) override |
| virtual NTSTATUS | OnDiskVerify (PVERIFY_INFORMATION pVerifyInfo) override |
| virtual NTSTATUS | OnSetPartitionInfo (PPARTITION_INFORMATION pInfo, ULONG InputLength) override |
| virtual NTSTATUS | OnSetPartitionInfoEx (PPARTITION_INFORMATION_EX pInfo, ULONG InputLength) override |
| virtual unsigned | GetSectorSize () |
| virtual ULONGLONG | GetTotalSize ()=0 |
| virtual char | GetPartitionType () |
| virtual NTSTATUS | Read (ULONGLONG ByteOffset, PVOID pBuffer, ULONG Length, PULONG pBytesDone)=0 |
| virtual NTSTATUS | Write (ULONGLONG ByteOffset, PVOID pBuffer, ULONG Length, PULONG pBytesDone)=0 |
| ULONGLONG | GetSectorCount () |
Private Attributes | |
| unsigned | m_SectorSize |
| ULONGLONG | m_SectorCount |
| ULONGLONG | m_SizeInBytes |
| DEVICE_TYPE | m_ReportedDeviceType |
| void * | m_pWinCacheBugWorkaroundBuffer |
| size_t | m_WinCacheBugWorkaroundBufferSize |
If you requre any additional functionality, please create another universal library class providing that functionality and having the corresponding abstract methods, and contact me via SourceForge.net
| BazisLib::DDK::BasicStorageVolume::BasicStorageVolume | ( | LPCWSTR | pwszDevicePrefix = L"BazisVolume", |
|
| bool | bDeleteThisAfterRemoveRequest = false, |
|||
| ULONG | DeviceType = FILE_DEVICE_DISK, |
|||
| ULONG | DeviceCharacteristics = FILE_DEVICE_SECURE_OPEN, |
|||
| bool | bExclusive = FALSE, |
|||
| ULONG | AdditionalDeviceFlags = DO_POWER_PAGABLE | |||
| ) |
| BazisLib::DDK::BasicStorageVolume::~BasicStorageVolume | ( | ) |
| NTSTATUS BazisLib::DDK::BasicStorageVolume::AddDevice | ( | Driver * | pDriver, | |
| PDEVICE_OBJECT | PhysicalDeviceObject | |||
| ) |
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::DispatchRoutine | ( | IN IncomingIrp * | Irp, | |
| IO_STACK_LOCATION * | IrpSp | |||
| ) | [override, protected, virtual] |
This method is called every time a device receives an IRP. It Device class it handles the following codes by calling the corresponding virtual methods:
Reimplemented from BazisLib::DDK::IODevice.
| bool BazisLib::DDK::BasicStorageVolume::EnableWindowsCacheBugWorkaround | ( | size_t | IntermediateBufferSize = 1024 *1024 |
) | [protected] |
Allocates a shadow buffer for read operations preventing to prevent Windows read cache bug.
This method should be called from the constructor of a child class to enable workaround for Windows read cache bug. The details on this bug can be found Windows Cache bug here.
| virtual char BazisLib::DDK::BasicStorageVolume::GetPartitionType | ( | ) | [inline, protected, virtual] |
Reimplemented in BazisLib::DDK::UniversalVolume.
| ULONGLONG BazisLib::DDK::BasicStorageVolume::GetSectorCount | ( | ) | [inline, protected] |
| virtual unsigned BazisLib::DDK::BasicStorageVolume::GetSectorSize | ( | ) | [inline, protected, virtual] |
Reimplemented in BazisLib::DDK::BasicCDVolume, and BazisLib::DDK::UniversalVolume.
| virtual ULONGLONG BazisLib::DDK::BasicStorageVolume::GetTotalSize | ( | ) | [protected, pure virtual] |
Implemented in BazisLib::DDK::UniversalVolume.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnCheckVerify | ( | ULONG | OriginalControlCode, | |
| ULONG * | pChangeCount | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnClose | ( | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::IODevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnCreate | ( | PIO_SECURITY_CONTEXT | SecurityContext, | |
| ULONG | Options, | |||
| USHORT | FileAttributes, | |||
| USHORT | ShareAccess, | |||
| PFILE_OBJECT | pFileObj | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::IODevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnDiskIsWritable | ( | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnDiskVerify | ( | PVERIFY_INFORMATION | pVerifyInfo | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetDeviceNumber | ( | PSTORAGE_DEVICE_NUMBER | pNumber | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetDriveGeometry | ( | PDISK_GEOMETRY | pGeo | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetHotplugInfo | ( | PSTORAGE_HOTPLUG_INFO | pHotplugInfo | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetLengthInfo | ( | PGET_LENGTH_INFORMATION | pLength | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetPartitionInfo | ( | PPARTITION_INFORMATION | pInfo, | |
| ULONG | BufferLength, | |||
| PULONG | pBytesDone | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnGetPartitionInfoEx | ( | PPARTITION_INFORMATION_EX | pInfo, | |
| ULONG | BufferLength, | |||
| PULONG | pBytesDone | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnMediaRemoval | ( | bool | bLock | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnRead | ( | PMDL | pMdl, | |
| ULONG | Length, | |||
| ULONG | Key, | |||
| ULONGLONG | ByteOffset, | |||
| PULONG | pBytesDone | |||
| ) | [override, protected, virtual] |
This method is called when the driver receives an IRP_MJ_READ packet. And the DO_DIRECT_IO flag is set in the DEVICE_OBJECT::Flags field.
Reimplemented from BazisLib::DDK::IODevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnSetPartitionInfo | ( | PPARTITION_INFORMATION | pInfo, | |
| ULONG | InputLength | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnSetPartitionInfoEx | ( | PPARTITION_INFORMATION_EX | pInfo, | |
| ULONG | InputLength | |||
| ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnVolumeOffline | ( | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnVolumeOnline | ( | ) | [override, protected, virtual] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::OnWrite | ( | PMDL | pMdl, | |
| ULONG | Length, | |||
| ULONG | Key, | |||
| ULONGLONG | ByteOffset, | |||
| PULONG | pBytesDone | |||
| ) | [override, protected, virtual] |
This method is called when the driver receives an IRP_MJ_WRITE packet. And the DO_DIRECT_IO flag is set in the DEVICE_OBJECT::Flags field.
Reimplemented from BazisLib::DDK::IODevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::Read | ( | ULONGLONG | ByteOffset, | |
| PVOID | pBuffer, | |||
| ULONG | Length, | |||
| PULONG | pBytesDone | |||
| ) | [protected, pure virtual] |
Implemented in BazisLib::DDK::UniversalVolume.
| bool BazisLib::DDK::BasicStorageVolume::UpdateVolumeSize | ( | ) | [protected] |
Updates stored volume size.
| bool BazisLib::DDK::BasicStorageVolume::Valid | ( | ) | [inline] |
Reimplemented from BazisLib::DDK::StorageDevice.
| virtual NTSTATUS BazisLib::DDK::BasicStorageVolume::Write | ( | ULONGLONG | ByteOffset, | |
| PVOID | pBuffer, | |||
| ULONG | Length, | |||
| PULONG | pBytesDone | |||
| ) | [protected, pure virtual] |
Implemented in BazisLib::DDK::UniversalVolume.
DEVICE_TYPE BazisLib::DDK::BasicStorageVolume::m_ReportedDeviceType [private] |
Reimplemented in BazisLib::DDK::BasicCDVolume.
Reimplemented in BazisLib::DDK::BasicCDVolume.
unsigned BazisLib::DDK::BasicStorageVolume::m_SectorSize [private] |
Reimplemented in BazisLib::DDK::BasicCDVolume.
Reimplemented in BazisLib::DDK::BasicCDVolume.
size_t BazisLib::DDK::BasicStorageVolume::m_WinCacheBugWorkaroundBufferSize [private] |