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

📄 bulltlp3.h

📁 SmardCard Windows驱动
💻 H
字号:
/*++

Copyright (C) Microsoft Corporation, 1997 - 1999

Module Name:

    scrcp8t.h

Abstract:

    smartcard TLP3 serial miniport defines and structures

Author:

    Klaus U. Schutz

Revision History:

--*/


#ifndef _BULLTLP3_
#define _BULLTLP3_

#define DRIVER_NAME "BULLTLP3"
#define SMARTCARD_POOL_TAG '3BCS'

#include <ntddk.h>
#include <ntddser.h>

#include "smclib.h"
#include "tlp3log.h"

#define MAXIMUM_SERIAL_READERS  4
#define SMARTCARD_READ          SCARD_CTL_CODE(1000)
#define SMARTCARD_WRITE         SCARD_CTL_CODE(1001)

#define READ_INTERVAL_TIMEOUT_DEFAULT       1000
#define READ_TOTAL_TIMEOUT_CONSTANT_DEFAULT 3000

#define READ_INTERVAL_TIMEOUT_ATR           0
#define READ_TOTAL_TIMEOUT_CONSTANT_ATR     50

#define READER_CMD_POWER_DOWN   'O'
#define READER_CMD_COLD_RESET   'C'
#define READER_CMD_WARM_RESET   'W'

#define SIM_IO_TIMEOUT          0x00000001
#define SIM_ATR_TRASH           0x00000002
#define SIM_WRONG_STATE         0x00000004
#define SIM_INVALID_STATE       0x00000008
#define SIM_LONG_RESET_TIMEOUT  0x00000010
#define SIM_LONG_IO_TIMEOUT     0x00000020

#define DEBUG_SIMULATION    DEBUG_ERROR


typedef enum _READER_POWER_STATE {
    PowerReaderUnspecified = 0,
    PowerReaderWorking,
    PowerReaderOff
} READER_POWER_STATE, *PREADER_POWER_STATE;

typedef struct _SERIAL_READER_CONFIG {

    // flow control
    SERIAL_HANDFLOW HandFlow;           

    // special characters
    SERIAL_CHARS SerialChars;

    // read/write timeouts
    SERIAL_TIMEOUTS Timeouts;           

    // Baudrate for reader
    SERIAL_BAUD_RATE BaudRate;          

    // Stop bits, parity configuration
    SERIAL_LINE_CONTROL LineControl;    

    // Event serial reader uses to signal insert/removal
    ULONG SerialWaitMask;

} SERIAL_READER_CONFIG, *PSERIAL_READER_CONFIG;

typedef struct _DEVICE_EXTENSION {

    // Our smart card extension
    SMARTCARD_EXTENSION SmartcardExtension;

    // The current number of io-requests
    LONG IoCount;

    // Used to signal that the reader is able to process reqeusts
    KEVENT ReaderStarted;

    // Used to signal the the reader has been closed
    LONG ReaderOpen;

    // The pnp device name of our smart card reader
    UNICODE_STRING PnPDeviceName;

    KSPIN_LOCK SpinLock;

    // A worker thread that closes the serial driver
    PIO_WORKITEM CloseSerial;

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

//
// Define the reader specific portion of the smart card extension
//
typedef struct _READER_EXTENSION {

    // DeviceObject pointer to serial port
    PDEVICE_OBJECT AttachedDeviceObject;

    // Used to signal that the connection to the serial driver has been closed
    KEVENT SerialCloseDone;

    // This is used for CardTracking
    PIRP    SerialStatusIrp;

    // IoRequest to be send to serial driver
    ULONG   SerialIoControlCode;

    // Flag that indicates we're getting the ModemStatus (used in a DPC)
    BOOLEAN GetModemStatus;

    // Variable used to receive the modem status
    ULONG   ModemStatus;

    // Flag that indicates that the caller requests a power-down or a reset
    BOOLEAN PowerRequest;

    SERIAL_READER_CONFIG SerialConfigData;

    // Saved card state for hibernation/sleeping modes.
    BOOLEAN CardPresent;

    // Current reader power state.
    READER_POWER_STATE ReaderPowerState;

#ifdef SIMULATION
    ULONG SimulationLevel;
#endif

} READER_EXTENSION, *PREADER_EXTENSION;

#define READER_EXTENSION(member) \
    (SmartcardExtension->ReaderExtension->member)
#define READER_EXTENSION_L(member) \
    (smartcardExtension->ReaderExtension->member)
#define ATTACHED_DEVICE_OBJECT \
    deviceExtension->SmartcardExtension.ReaderExtension->AttachedDeviceObject

//
// Prototypes
//
NTSTATUS
DriverEntry(
    IN  PDRIVER_OBJECT  DriverObject,
    IN  PUNICODE_STRING RegistryPath
    );

NTSTATUS
TLP3PnP(
    IN PDEVICE_OBJECT DeviceObject, 
    IN PIRP Irp
    );

NTSTATUS
TLP3AddDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PDEVICE_OBJECT PhysicalDeviceObject
    );

NTSTATUS
TLP3CreateClose(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
TLP3CreateDevice(
    IN  PDRIVER_OBJECT DriverObject,
    OUT PDEVICE_OBJECT *DeviceObject
    );

NTSTATUS
TLP3SystemControl(
    PDEVICE_OBJECT DeviceObject,
    PIRP        Irp
    );

NTSTATUS
TLP3DeviceControl(
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp
    );

NTSTATUS 
TLP3CreateAndStartDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

VOID
TLP3RemoveDevice( 
    PDEVICE_OBJECT DeviceObject
    );

VOID
TLP3DriverUnload(
    IN PDRIVER_OBJECT DriverObject
    );

NTSTATUS
TLP3ConfigureSerialPort(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3SerialIo(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS 
TLP3StartSerialEventTracking(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3SerialEvent(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3Cleanup(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
TLP3ReaderPower(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3SetProtocol(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3SetParameters(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3Transmit(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3CardTracking(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3VendorIoctl(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3Cancel(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS 
TLP3CallSerialDriver(
    IN PDEVICE_OBJECT DeviceObject, 
    IN PIRP Irp
    );

NTSTATUS
TLP3TransmitT0(
    PSMARTCARD_EXTENSION SmartcardExtension
    );

NTSTATUS
TLP3Power (
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    );

VOID
TLP3CompleteCardTracking(
    IN PSMARTCARD_EXTENSION SmartcardExtension
    );

VOID 
TLP3CloseSerialPort(
    IN PDEVICE_OBJECT DeviceObject,
    IN PVOID Context
    );

VOID
TLP3StopDevice(
    IN PDEVICE_OBJECT DeviceObject
    );

#endif

⌨️ 快捷键说明

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