windows-nt/Source/XPSP1/NT/drivers/smartcrd/bulltlp3/bulltlp3.h
2020-09-26 16:20:57 +08:00

316 lines
6 KiB
C

/*++
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