Microsoft Usbccid Smartcard Reader -umdf 2- Driver Here
NTSTATUS UsbCcidDevice::Transmit(PBYTE Command, DWORD CommandLen, PBYTE Response, PDWORD ResponseLen) CCID_TRANSMIT transmitCmd = 0; transmitCmd.bMessageType = PC_to_RDR_XfrBlock; transmitCmd.dwLength = CommandLen; transmitCmd.bSlot = 0; transmitCmd.bSeq = 0; transmitCmd.bBWI = 0; transmitCmd.wLevelParameter = 0;
[Strings] ManufacturerName="Your Company" DeviceDesc="USB CCID Smartcard Reader (UMDF 2)" ServiceDesc="USB CCID Smartcard Reader Service" Device.h #pragma once #include <wdf.h> #include <usb.h> #include <scardlib.h> class UsbCcidDevice public: static NTSTATUS Create( In WDFDRIVER Driver, In WDFDEVICE_INIT* DeviceInit, Out WDFDEVICE* Device); microsoft usbccid smartcard reader -umdf 2- driver
[Manufacturer] %ManufacturerName% = Standard, NTamd64, NTarm64 NTSTATUS UsbCcidDevice::Transmit(PBYTE Command
// Set PnP callbacks WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpCallbacks); pnpCallbacks.EvtDevicePrepareHardware = EvtDevicePrepareHardware; pnpCallbacks.EvtDeviceReleaseHardware = EvtDeviceReleaseHardware; WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpCallbacks); PDWORD ResponseLen) CCID_TRANSMIT transmitCmd = 0
WdfRequestComplete(Request, status); Build Command (Developer Command Prompt) msbuild UsbCcidReader.sln /p:Configuration=Release /p:Platform=x64 Test Signing signtool sign /v /fd SHA256 /a /csp "Microsoft Software Key Storage Provider" ^ /sha1 YOUR_CERT_THUMBPRINT /t http://timestamp.digicert.com ^ UsbCcidReader.dll 6. Deployment & Testing Install Driver pnputil /add-driver UsbCcidReader.inf /install Debug with WinDbg windbg -k net:port=50000,key=1.2.3.4 Set breakpoints:
bp UsbCcidDevice::EvtIoDeviceControl bp UsbCcidDevice::Transmit // Test application SCARDCONTEXT hContext; SCARDHANDLE hCard; DWORD dwProtocol; SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext); SCardConnect(hContext, "Reader Name", SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwProtocol);
NTSTATUS UsbCcidDevice::PowerOn(PBYTE Atr, PDWORD AtrLength) CCID_POWER_ON powerOnCmd = 0; powerOnCmd.bMessageType = PC_to_RDR_IccPowerOn; powerOnCmd.dwLength = 0; powerOnCmd.bSlot = 0; powerOnCmd.bSeq = 0; powerOnCmd.bPowerSelect = CCID_POWER_ON;