📄 devclass.h
字号:
//****************************************************************************
// File DEVCLASS.H
//
// Device object for functional driver
//
// Copyright (c) APSoft, 1998-2002.
// All rights reserved.
//
//****************************************************************************
#ifndef _DEVCLASS_H_
#define _DEVCLASS_H_
#include <pnpdev.h> // PnP device base class
#include <pcmiface.h> // PCMCIA interfaces
//-------------------------- Version information -----------------------------
#define VER_MAJOR 1
#define VER_MINOR 0
#define VER_API 0
//------------------------------ Async. call ---------------------------------
typedef struct tagASYNC_CTX
{
PIO_WORKITEM pItem; // Wort item
PIRP pIrp; // IRP to complete
} ASYNC_CTX, * PASYNC_CTX;
#define ASYNC_DELAY 30000000L // 3 sec in 100 ns
///////////////////////////////////////////////////////////////////////////////
// --- Class CFuncDevice --- //
///////////////////////////////////////////////////////////////////////////////
class CFuncDevice : public CPnpDevice // Functional driver's device
{
//----------------------- Construction/Destruction ---------------------------
public:
CFuncDevice (PDEVICE_OBJECT pDevObject,
PDEVICE_OBJECT pPdo,
PWSTR pLnkName);
virtual ~CFuncDevice (void);
//****************************************************************************
// *** Implementation ***
//****************************************************************************
NTSTATUS OnGetMask (PIRP pIrp);
NTSTATUS OnRelClient (PIRP pIrp);
NTSTATUS OnRegClient (PIRP pIrp);
NTSTATUS OnGetCIS (PIRP pIrp);
NTSTATUS OnGetMemory (PIRP pIrp);
NTSTATUS OnGetVersion (PIRP pIrp);
NTSTATUS OnGetIdSize (PIRP pIrp);
NTSTATUS OnGetId (PIRP pIrp);
NTSTATUS OnGetIdAsync (PIRP pIrp);
//****************************************************************************
// *** Internal implementation ***
//****************************************************************************
protected:
void OnWorkItem (PASYNC_CTX pCtx);
static void _OnWorkItem (PDEVICE_OBJECT pDevObject,
PVOID pCtx);
BOOLEAN QueryInterface (void);
BOOLEAN ReadWriteRequest (BOOLEAN fRead,
PVOID pData,
ULONG uOffset,
ULONG uLength);
//----------------------------- IRP handlers ---------------------------------
virtual BOOLEAN OnIrpRead (PIRP, NTSTATUS &);
virtual BOOLEAN OnIrpWrite (PIRP, NTSTATUS &);
virtual BOOLEAN OnIrpDevCtrl (PIRP, NTSTATUS &);
//-------------------------- Minor PnP functions -----------------------------
virtual NTSTATUS OnFilterResReq (PIRP pIrp);
//--------------------------- Power Management -------------------------------
virtual void PowerOn (void);
virtual void PowerOff (void);
//-------------------------- Start/Stop handling -----------------------------
virtual void PreStopDevice (void);
virtual void PreRemoveDevice (PIRP pIrp);
virtual NTSTATUS PreStartDevice (PIRP pIrp);
virtual void PostStartDevice (PIRP pIrp,
NTSTATUS ntStatus);
virtual NTSTATUS StartDevice (PCM_PARTIAL_RESOURCE_LIST pList);
virtual void StopDevice (void);
//****************************************************************************
// *** Member variables ***
//****************************************************************************
protected:
ULONG m_uStart; // Memory window start address
ULONG m_uLength; // Memory window length
DWORD m_dwMask;
ULONG m_uMemBaseAddr;
PHYSICAL_ADDRESS m_phyMemAddr;
CPcmciaBusIface m_BusIface; // Standard bus interface
CPcmciaIface m_PcmciaIface; // Standard PCMCIA interface
};
//------------------------- Inline implementation ----------------------------
inline void CFuncDevice::_OnWorkItem(PDEVICE_OBJECT pDevObject, PVOID pCtx)
{
CFuncDevice * p = (CFuncDevice *)pDevObject->DeviceExtension;
ASSERTS_PNPDRV(p != NULL);
if (p != NULL)
p->OnWorkItem((PASYNC_CTX)pCtx);
}
#endif // #ifndef _DEVCLASS_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -