📄 pcsc_drv.h
字号:
// =====[pcsc_drv.h]=========================================================================
// Description: Header file (pcsc_drv.h)
// Compiled: MS-VC++
// Version: .NET
// Revisions:
// REV DATE BY DESCRIPTION
// ------ -------------- ---------- --------------------------------------
// 1.01 2001/01/01 BDS Initial version.
//
// This header file (pcsc_drv.h) is Copyright(c) 2001 Dmitry Basko.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that:
// 1. source code distributions retain the above copyright notice and this
// paragraph in its entirety;
// 2. distributions including binary code include the above copyright notice
// and this paragraph in its entirety in the documentation or other materials
// provided with the distribution;
// 3. all advertising materials mentioning features or use of this software
// display the following acknowledgement;
// "This product includes software developed by Dmitry Basko."
// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// =========================================================================================
#pragma once
#ifndef DRIVER_H
#define DRIVER_H
// This programm is compiled ONLY for WIN32 and M_IX86 processor
#if defined(_WIN32) && defined(_M_IX86)
#undef USE_SYSTEM_THREAD
#define USE_WORK_THREAD
#define TRY_PASS_MICROSOFT_TEST
#define VERSION_READER_2
#define USE_EVENT_LOG
#pragma warning(push, 1)
extern "C"
{
#include <NTDDK.h>
}
#include <DEVIOCTL.H>
#include <WINSMCRD.h>
#include <SMCLIB.h>
#include "Msg.h"
#pragma warning(pop)
#define CARD_PRESENT TRUE
#define CARD_NOPRESENT FALSE
#define SMARTCARD_POOL_TAG '_CS'
#define NOTIFICATIONEVENT_NAME L"\\BaseNamedObjects\\SC_INSERT_REMOVE"
#define STATUS_WRONG_IRQL ((NTSTATUS)0xC0040100L)
#define MEMORY_BUF_SIZE 128
#define FILE_NAME L"\\??\\c:\\card.bin"
#define IOCTL_CREATE_EVENT SCARD_CTL_CODE( 3000 )
#define READER_EXTENSION(member) (pSmartcardExtension->ReaderExtension->member)
#define DEVICE_READER_EXTENSION(member) (pDeviceExtension->SmartcardExtension.ReaderExtension->member)
#define HEAD "PCSC_DRV: "
#define POWER_DOWN 0
#define POWER_UP 1
#define REGISTERDEVICEINTERFACE
#ifdef USE_EVENT_LOG
// Error-logging verbosity levels
#define LOG_LEVEL_NONE 0
#define LOG_LEVEL_NORMAL 1
#define LOG_LEVEL_DEBUG 2
#define DEFAULT_LOG_LEVEL LOG_LEVEL_DEBUG
// Unique values identifying location of an error within the driver
#define ERRORLOG_INIT 1
#define ERRORLOG_DRIVERENTRY 2
#define ERRORLOG_DRIVERENTRY_FAULT 3
#define ERRORLOG_OPENING_HANDLE 4
#define ERRORLOG_CLOSING_HANDLE 5
#define ERRORLOG_READING_DATA 6
#define ERRORLOG_WRITING_DATA 7
// Largest number of insertion strings allowed in one message
#define MAX_INSERTION_STRINGS 20
#endif
typedef struct _DEVICE_EXTENSION
{
SMARTCARD_EXTENSION SmartcardExtension;
UNICODE_STRING DeviceName;
#ifdef USE_SYSTEM_THREAD
PIO_WORKITEM _PIO_WORKITEM;
PUCHAR pMemory_Buf;
ULONG uSizeOfData;
#endif
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
typedef struct _READER_EXTENSION
{
#ifdef USE_WORK_THREAD
PETHREAD pThreadObj; // Pointer to worker thread object
BOOLEAN bThreadShouldStop;// Flag set to TRUE when worker thread should quit
PKEVENT pevWORK_THREAD_AWAKE;
UNICODE_STRING uEventName;
HANDLE hEvent;
PDEVICE_EXTENSION pDeviceExtension; //Callback pointer
//The state of card
bool uStateOfCard;
ULONG uReaderPowerState;
#endif
} READER_EXTENSION, *PREADER_EXTENSION;
NTSTATUS VdCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdCleanUp(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdCreateDevice(IN PDRIVER_OBJECT DriverObject);
NTSTATUS VdPowerReader(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdPowerDownReader(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdSetProtocol(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdPowerUpReader(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdTransmit(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdTransmitT1(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdTransmitT0(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdCardTracking(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdCancel(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp);
NTSTATUS VdTransmitRaw(PSMARTCARD_EXTENSION SmartcardExtension);
NTSTATUS VdVendorIOCTL(PSMARTCARD_EXTENSION SmartcardExtension);
void VdDriverUnload(IN PDRIVER_OBJECT DriverObject);
void VdCompleteCardTracking(IN PSMARTCARD_EXTENSION SmartcardExtension,bool bStateCard);
extern void InitializeEventLog(IN PDRIVER_OBJECT pDriverObject);
extern bool ReportEvent(IN ULONG MessageLevel,IN NTSTATUS ErrorCode,IN ULONG UniqueErrorValue,
IN PVOID pIoObject,IN PIRP pIrp,IN ULONG DumpData[],IN ULONG DumpDataCount,
IN PWSTR Strings[],IN ULONG StringCount);
#ifdef USE_SYSTEM_THREAD
void Work_SystemThread(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
#endif
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
extern NTSTATUS WorkWithFile(PUCHAR pData, ULONG& uSize, bool bRead = true);
extern NTSTATUS SendCmdReader(UCHAR Request_Buffer[], ULONG Request_BufferLength,
UCHAR Reply_Buffer[], ULONG& Reply_BufferLength,
IN PDEVICE_OBJECT DeviceObject);
#ifdef USE_WORK_THREAD
extern void WorkerThreadMain(IN PVOID pContext);
extern void KillThread(IN PDEVICE_EXTENSION pDE);
#endif
#else
#error Modification required for this type of OS
#endif
//----------------------------------------------------------------------------------------------
#endif // DRIVER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -