316 lines
6 KiB
C
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
|