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

📄 charsample.h

📁 windows 驱动程序开发相关资料与代码 让你深刻知晓windows 开发的魅力所在!
💻 H
📖 第 1 页 / 共 2 页
字号:
// CharSample.h
//
// Generated by C DriverWizard 3.1.0 (Build 1722)
// Requires DDK Only
// File created on 10/23/2004
//
#ifndef __CHARSAMPLE_H__
#define __CHARSAMPLE_H__

// Memory allocation pool tag
#define CHARSAMPLE_POOL_TAG 'rahC'

// Make all pool allocations tagged
#undef ExAllocatePool
#define ExAllocatePool(type, size) \
    ExAllocatePoolWithTag(type, size, CHARSAMPLE_POOL_TAG);

// queue start io callback
typedef VOID (*PCHARSAMPLE_QUEUE_STARTIO)(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp 
    );

// irp queue type definition
typedef struct _CHARSAMPLE_QUEUE
{
    PCHARSAMPLE_QUEUE_STARTIO StartIoRoutine;
    PDEVICE_OBJECT  DeviceObject;
    LIST_ENTRY      IrpQueue;
    KSPIN_LOCK      QueueLock;
    PIRP            CurrentIrp;
    KEVENT          StopEvent;
    LONG            StallCount; 
    NTSTATUS        ErrorStatus;
    KDPC            CharSampleStartIoDpc;
    BOOLEAN         bUseCharSampleStartIoDpc;
} CHARSAMPLE_QUEUE, *PCHARSAMPLE_QUEUE;

// cancel-safe irp list type definition
typedef struct _CHARSAMPLE_LIST
{
    PDEVICE_OBJECT  DeviceObject;
    LIST_ENTRY      IrpList;
    KSPIN_LOCK      ListLock;
    NTSTATUS        ErrorStatus;
} CHARSAMPLE_LIST, *PCHARSAMPLE_LIST;

// stall IRP list to syncronize Pnp, Power with
// the rest of IO
typedef struct _CHARSAMPLE_IO_LOCK
{
    PDEVICE_OBJECT  DeviceObject;       // our device object
    KEVENT          StallCompleteEvent; // io stalled event
    LIST_ENTRY      StallIrpList;       // stalled irps
    KSPIN_LOCK      IoLock;             // spin lock to syncronize io with stall/unstall
    LONG            StallCount;         // number of times stall was requested
    LONG            ActiveIrpCount;     // number of oustanding, not-stalled IRPs
    NTSTATUS        ErrorStatus;
    PIRP            CurrentIrp;         // used by unstall code
} CHARSAMPLE_IO_LOCK, *PCHARSAMPLE_IO_LOCK;

// global (per driver) data block
typedef struct _CHARSAMPLE_DATA
{
    UNICODE_STRING      RegistryPath;           // saved registry path
    ULONG               InstanceCount;          // FDO instance count
    USHORT              WdmVersion;             // os version
} CHARSAMPLE_DATA, *PCHARSAMPLE_DATA;

extern CHARSAMPLE_DATA g_Data;

// PnP states
typedef enum _CHARSAMPLE_PNP_STATE 
{
    PnpStateNotStarted = 0,
    PnpStateStarted,
    PnpStateStopPending,
    PnpStateStopped,
    PnpStateRemovePending,
    PnpStateRemoved,
    PnpStateSurpriseRemoved
} CHARSAMPLE_PNP_STATE;


// The device extension for the device object
typedef struct _CHARSAMPLE_DEVICE_EXTENSION
{
    PDEVICE_OBJECT          DeviceObject;           // pointer to the DeviceObject
    PDEVICE_OBJECT          PhysicalDeviceObject;   // underlying PDO
    PDEVICE_OBJECT          LowerDeviceObject;      // top of the device stack

    LONG                    RemoveCount;            // 1-based reference count
    KEVENT                  RemoveEvent;            // event to sync device removal

    CHARSAMPLE_IO_LOCK IoLock;                 // misc io lock

    CHARSAMPLE_PNP_STATE    PnpState;               // PnP state variable
    CHARSAMPLE_PNP_STATE    PreviousPnpState;       // Previous PnP state variable

    UNICODE_STRING          InterfaceName;          // name returned from IoRegisterDeviceInterface
    LONG                    OpenHandleCount;
} CHARSAMPLE_DEVICE_EXTENSION, *PCHARSAMPLE_DEVICE_EXTENSION;

#ifdef __cplusplus
extern "C" 
{
#endif

NTSTATUS __stdcall DriverEntry(
    IN  PDRIVER_OBJECT  DriverObject,
    IN  PUNICODE_STRING RegistryPath
    );

NTSTATUS __stdcall CharSampleAddDevice(
    IN  PDRIVER_OBJECT  DriverObject,
    IN  PDEVICE_OBJECT  PhysicalDeviceObject
    );

VOID __stdcall CharSampleUnload(
    IN  PDRIVER_OBJECT  DriverObject
    );

NTSTATUS __stdcall CharSamplePnpDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall CharSamplePowerDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall CharSampleDeviceIoControlDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall CharSampleCreateDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall CharSampleCloseDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall CharSampleSystemControlDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// Queue Functions
///////////////////////////////////////////////////////////////////////////////////////////////////

VOID CharSampleInitializeQueue(
    IN  PCHARSAMPLE_QUEUE    QueueExtension,
    IN  PCHARSAMPLE_QUEUE_STARTIO     StartIoRoutine,
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  BOOLEAN             bUseCharSampleStartIoDpc
    );

NTSTATUS CharSampleQueueIrp(
    IN  PCHARSAMPLE_QUEUE    QueueExtension,
    IN  PIRP                Irp
    );

VOID CharSampleStartNext(
    IN  PCHARSAMPLE_QUEUE    QueueExtension
    );

VOID CharSampleFlushQueue(
    IN  PCHARSAMPLE_QUEUE    QueueExtension,
    IN  PFILE_OBJECT        FileObject
    );

VOID CharSampleInvalidateQueue(
    IN  PCHARSAMPLE_QUEUE    Queue,
    IN  NTSTATUS                  ErrorStatus
    );

VOID CharSamplePauseQueue(
    IN  PCHARSAMPLE_QUEUE    QueueExtension
    );
    
VOID CharSampleRestartQueue(
    IN  PCHARSAMPLE_QUEUE    QueueExtension
    );

VOID CharSampleStartIoDpc(
    IN  PKDPC       Dpc,
    IN  PVOID       Context,
    IN  PVOID       Unused1,
    IN  PVOID       Unused2
    );

VOID CharSampleQueueCancelRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// List functions
///////////////////////////////////////////////////////////////////////////////////////////////////

VOID CharSampleInitializeList(
    IN  PCHARSAMPLE_LIST   List,
    IN  PDEVICE_OBJECT          DeviceObject
    );

NTSTATUS CharSampleInsertHead(
    IN  PCHARSAMPLE_LIST   List, 
    IN  PIRP                Irp
    );

NTSTATUS CharSampleInsertTail(
    IN  PCHARSAMPLE_LIST   List, 
    IN  PIRP                Irp
    );

PIRP CharSampleRemoveHead(
    IN  PCHARSAMPLE_LIST   List
    );

PIRP CharSampleRemoveTail(
    IN  PCHARSAMPLE_LIST   List
    );

VOID CharSampleFlushList(
    IN  PCHARSAMPLE_LIST   List,
    IN  PFILE_OBJECT        FileObject
    );

VOID CharSampleInvalidateList(
    IN  PCHARSAMPLE_LIST   List,
    IN  NTSTATUS                ErrorStatus
    );

VOID CharSampleListCancelRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// CHARSAMPLE_IO_LOCK
///////////////////////////////////////////////////////////////////////////////////////////////////

VOID CharSampleInitializeIoLock(
    IN  PCHARSAMPLE_IO_LOCK    IoLock, 
    IN  PDEVICE_OBJECT              DeviceObject
    );

NTSTATUS CharSampleCheckIoLock(
    IN  PCHARSAMPLE_IO_LOCK    IoLock, 
    IN  PIRP                        Irp
    );

⌨️ 快捷键说明

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