Sample Code

Windows Driver Samples/ HBtnKey Input Driver/ C++/ HBtnKey/ hidbtn.h/

/*++
    Copyright (c) 2000,2001 Microsoft Corporation

    Module Name:
        HidBtn.h

    Abstract:
        Contains definitions of all constants and data types for the
        serial pen hid driver.

    Environment:
        Kernel mode

--*/

#ifndef _HIDBTN_H
#define _HIDBTN_H

//
// Constants
//
#define HBTN_POOL_TAG                   'ntbH'

// dwfHBtn flag values
#define HBTNF_DEVICE_STARTED            0x00000001

//
// Macros
//
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) \
    ((PDEVICE_EXTENSION)(((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
#define GET_NEXT_DEVICE_OBJECT(DO)          \
    (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->NextDeviceObject)
#define GET_PDO(DO)                         \
    (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->PhysicalDeviceObject)
//#define ARRAYSIZE(a)    (sizeof(a)/sizeof(a[0]))

//
// Type Definitions
//
typedef struct _DEVICE_EXTENSION
{
    ULONG          dwfHBtn;             //flags
    PDEVICE_OBJECT self;                //my device object
    PDEVICE_OBJECT LowerDevObj;         //lower device object
    IO_REMOVE_LOCK RemoveLock;          //to protect IRP_MN_REMOVE_DEVICE
    LIST_ENTRY     PendingIrpList;
    OEM_EXTENSION  OemExtension;
    KSPIN_LOCK     QueueLock;           //lock for cancel safe queue
    KSPIN_LOCK     DataLock;            //lock for protecting device extension access.
    IO_CSQ         IrpQueue;           //cancel safe queue
    
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;


#define GET_DEV_EXT(csq) \
	CONTAINING_RECORD(csq, DEVICE_EXTENSION, IrpQueue)

//
// Function prototypes
//

// hidbtn.c
DRIVER_INITIALIZE DriverEntry;

_Dispatch_type_(IRP_MJ_CREATE)
_Dispatch_type_(IRP_MJ_CLOSE)
DRIVER_DISPATCH HbtnCreateClose;

DRIVER_ADD_DEVICE HbtnAddDevice;

DRIVER_UNLOAD HbtnUnload;

// pnp.c
_Dispatch_type_(IRP_MJ_PNP)
DRIVER_DISPATCH HbtnPnp;


_Dispatch_type_(IRP_MJ_POWER)
DRIVER_DISPATCH HbtnPower;


NTSTATUS INTERNAL
SendSyncIrp(
    _In_ PDEVICE_OBJECT DevObj,
    _In_ PIRP           Irp,
    _In_ BOOLEAN        fCopyToNext
    );

IO_COMPLETION_ROUTINE IrpCompletion;

// ioctl.c
_Dispatch_type_(IRP_MJ_INTERNAL_DEVICE_CONTROL)
DRIVER_DISPATCH HbtnInternalIoctl;

_Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
DRIVER_DISPATCH HbtnSystemControl;


NTSTATUS INTERNAL
GetDeviceDescriptor(
    _In_ PDEVICE_EXTENSION DevExt,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
GetReportDescriptor(
    _In_ PDEVICE_EXTENSION DevExt,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
ReadReport(
    _In_ PDEVICE_EXTENSION DevExt,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
GetString(
    _In_ PDEVICE_EXTENSION DevExt,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
GetAttributes(
    _In_ PDEVICE_EXTENSION DevExt,
    _In_ PIRP              Irp
    );

// oembtn.c
NTSTATUS INTERNAL
OemAddDevice(
    _In_ PDEVICE_EXTENSION devext
    );

NTSTATUS INTERNAL
OemStartDevice(
    _In_ PDEVICE_EXTENSION devext,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
OemRemoveDevice(
    _In_ PDEVICE_EXTENSION devext,
    _In_ PIRP              Irp
    );

NTSTATUS INTERNAL
OemWriteReport(
    _In_ PDEVICE_EXTENSION devext,
    _In_ PIRP Irp
    );

_At_((PDEVICE_EXTENSION)csq, _In_)
VOID
HbtnInsertIrp (
    _In_ PIO_CSQ   csq,
    _In_ PIRP      Irp
    );

VOID
HbtnRemoveIrp(
    _In_  PIO_CSQ csq,
    _In_  PIRP    Irp
    );

_At_((PDEVICE_EXTENSION)csq, _In_)
PIRP
HbtnPeekNextIrp(
    _In_  PIO_CSQ csq,
    _In_  PIRP    Irp,
    _In_  PVOID  PeekContext
    );

_At_((PDEVICE_EXTENSION)csq, _In_)
_Acquires_lock_(GET_DEV_EXT(csq)->QueueLock)
_IRQL_raises_(DISPATCH_LEVEL)
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
HbtnAcquireLock(
    _In_                              PIO_CSQ csq,
    _Out_ _At_(*Irql, _IRQL_saves_)   PKIRQL  Irql
    );

_At_((PDEVICE_EXTENSION)csq, _In_)
_Releases_lock_(GET_DEV_EXT(csq)->QueueLock)
_IRQL_requires_(DISPATCH_LEVEL)
VOID
HbtnReleaseLock(
    _In_                              PIO_CSQ csq,
    _In_ _IRQL_restores_              KIRQL   Irql
    );

_At_((PDEVICE_EXTENSION)pCsq, _In_)
VOID
HbtnCompleteCancelledIrp(
    _In_  PIO_CSQ             pCsq,
    _In_  PIRP                Irp
    );


#endif  //ifndef _HIDBTN_H

Our Services

  • What our customers say about us?

© 2011-2024 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS