⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vpdo.h

📁 WDM的驱动程序实例,可供自学开发WDM者参考,其是在VC和COMPUWARE下的.
💻 H
字号:
// vpdo.h
//
// Generated by DriverWizard version DriverStudio 2.7.0 (Build 554)
// Requires Compuware's DriverWorks classes
//

#ifndef __VPDO_H__
#define __VPDO_H__

// forward declaration
class VBusDevice;
class VBus;

#define VENDORNAME								L"Numega_"
#define MODEL_READER							L"Reader_"
#define MODEL_WRITER							L"Writer_"

#define VBUS_HARDWARE_READER_IDS				L"VBUS\\NumegaReader\0"
#define VBUS_HARDWARE_WRITER_IDS				L"VBUS\\NumegaWriter\0"

////////////////////////////////////////////////////////////////////////////
//
// VPdo class provides extends KPhysicalDevice class and serves as a base
// class to VReader and VWriter classes
//
class VPdo : public KPhysicalDevice
{
	// Constructors
public:
	virtual SAFE_DESTRUCTORS;
	VPdo(VBusDevice* pParent, VBus* pBus, ULONG Unit);
	~VPdo();

// Overrides for KPnpDevice class
	virtual NTSTATUS OnQueryId(KIrp I);
	virtual NTSTATUS OnQueryBusInformation(KIrp I);
	virtual NTSTATUS OnDeviceUsageNotification(KIrp I);
	virtual NTSTATUS OnQueryResources(KIrp I);
	virtual NTSTATUS OnQueryResourceRequirements(KIrp I);
	virtual NTSTATUS OnQueryCapabilities(KIrp I);

	virtual NTSTATUS OnQueryRemoveDevice(KIrp I);

	void Removed() { m_bExist = false; }

	// Member Functions
protected:
	NTSTATUS QueryDeviceText(const WCHAR* Model, KIrp I);

protected:
	static VOID _stdcall AddRef(PVOID Context) { ++((VPdo*)Context)->m_RefCount; }
	static VOID _stdcall Release(PVOID Context)	{ --((VPdo*)Context)->m_RefCount; }

	// Member Data
protected:
	VBusDevice*			m_Parent;

	PWCHAR				m_HardwareIDs;
	KInterlockedCounter	m_RefCount;			// used to track interface count

public:
	ULONG				m_Unit;				// device id
};

////////////////////////////////////////////////////////////////////////////
//
// VReader class provides READ interface
//
class VReader : public VPdo
{
	// Constructors
public:
	virtual SAFE_DESTRUCTORS;
	VReader(VBusDevice* pParent, VBus* pBus, ULONG Unit);
	~VReader() {}

	virtual NTSTATUS OnQueryDeviceText(KIrp I) { return QueryDeviceText(MODEL_READER, I); }
	virtual NTSTATUS OnQueryInterface(KIrp I);

protected:
	static BOOLEAN _stdcall Read(ULONG Offset, PVOID Buffer, ULONG Size, PULONG pRead);
};


////////////////////////////////////////////////////////////////////////////
//
// VWriter class provides WRITE interface
//
class VWriter : public VPdo
{
	// Constructors
public:
	virtual SAFE_DESTRUCTORS;
	VWriter(VBusDevice* pParent, VBus* pBus, ULONG Unit);
	~VWriter() {}

	virtual NTSTATUS OnQueryDeviceText(KIrp I) { return QueryDeviceText(MODEL_WRITER, I); }
	virtual NTSTATUS OnQueryInterface(KIrp I);

protected:
	static BOOLEAN _stdcall Write(ULONG Offset, PVOID Buffer, ULONG Size, PULONG pRead);
};

#endif // __VPDO_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -