[UsbCcidReader_Install.NT.Services] AddService=WudfUsbCcidReader,0x000001fa,WudfServiceInstall
// Set PnP callbacks WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpCallbacks); pnpCallbacks.EvtDevicePrepareHardware = EvtDevicePrepareHardware; pnpCallbacks.EvtDeviceReleaseHardware = EvtDeviceReleaseHardware; WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpCallbacks); microsoft usbccid smartcard reader -umdf 2- driver
[UsbCcidReader_Install.NT.Wdf] UmdfService=UsbCcidReaderService,UsbCcidReader_Install UmdfServiceOrder=UsbCcidReaderService [UsbCcidReader_Install
// Callbacks static void EvtDevicePrepareHardware(_In_ WDFDEVICE Device, _In_ WDFCMRESLIST ResourceList); static void EvtDeviceReleaseHardware(_In_ WDFDEVICE Device, _In_ WDFCMRESLIST ResourceList); static void EvtIoDeviceControl(_In_ WDFQUEUE Queue, _In_ WDFREQUEST Request, _In_ size_t OutputBufferLength, _In_ size_t InputBufferLength, _In_ ULONG IoControlCode); private: WDFDEVICE m_Device; WDFUSBDEVICE m_UsbDevice; WDFUSBINTERFACE m_UsbInterface; WDFUSBPIPE m_BulkOutPipe; WDFUSBPIPE m_BulkInPipe; WDFUSBPIPE m_InterruptPipe; WDFQUEUE m_DefaultQueue; ; #include "Device.h" #include "trace.h" NTSTATUS UsbCcidDevice::Create(WDFDRIVER Driver, WDFDEVICE_INIT* DeviceInit, WDFDEVICE* Device) WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings; WDF_PNPPOWER_EVENT_CALLBACKS pnpCallbacks; WDF_IO_QUEUE_CONFIG queueConfig; WDF_OBJECT_ATTRIBUTES deviceAttributes; WDFDEVICE device; NTSTATUS status; _In_ WDFCMRESLIST ResourceList)
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);
BYTE apdu[] = 0x00, 0xA4, 0x04, 0x00, 0x08, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00; BYTE response[260]; DWORD responseLen = sizeof(response);