Point of Service (POS)

Overview of the Point of Service (POS) device driver technology.

To develop Point of Service (POS) device drivers, you need these headers:

For the programming guide, see Point of Service (POS).


Title Description
IOCTL_POINT_OF_SERVICE_CHECK_HEALTH This I/O control function checks the device health.
IOCTL_POINT_OF_SERVICE_CLAIM_DEVICE The I/O control function claims the device for exclusive access.
IOCTL_POINT_OF_SERVICE_GET_DEVICE_BASICS This I/O control function gets the type of device, version, and recommended buffer size as specified by the driver.
IOCTL_POINT_OF_SERVICE_GET_PROPERTY This I/O control function returns the value of the specified property from the device driver.
IOCTL_POINT_OF_SERVICE_MSR_AUTHENTICATE_DEVICE This IO control function authenticates the magnetic stripe reader (MSR).
IOCTL_POINT_OF_SERVICE_MSR_DEAUTHENTICATE_DEVICE This I/O control function deauthenticates the magnetic stripe reader (MSR).
IOCTL_POINT_OF_SERVICE_MSR_RETRIEVE_DEVICE_AUTHENTICATION This I/O control function retrieves the device authentication type.
IOCTL_POINT_OF_SERVICE_MSR_UPDATE_KEY This I/O control function sets a new encryption key.
IOCTL_POINT_OF_SERVICE_RELEASE_DEVICE This I/O control function is called when a client is ready to relinquish its claim on a device.
IOCTL_POINT_OF_SERVICE_RESET_STATISTICS This I/O control function resets the specified statistic's value to zero.
IOCTL_POINT_OF_SERVICE_RETAIN_DEVICE This I/O control function is used to keep a claim on a device when a client is notified that its claim on the device is being contested by another client.
IOCTL_POINT_OF_SERVICE_RETRIEVE_STATISTICS This I/O control function returns unified point of service (UPOS) standard information about a device such as its category, manufacturer, and firmware revision number.
IOCTL_POINT_OF_SERVICE_SET_PROPERTY This I/O control function sets the specified property on the device.
IOCTL_POINT_OF_SERVICE_UPDATE_STATISTICS This I/O control function sets the specified statistic to the value in the input buffer.


Title Description
BarcodeStatus This enumeration indicates barcode scanner status values.
BarcodeSymbology This enumeration defines the barcode symbologies.
BarcodeSymbologyDecodeLengthType The BarcodeSymbologyDecodeLengthType enum describes values for the decode length which can be set to support a range, two discrete values, or be set to any length.
DriverMagneticStripeReaderAuthenticationLevel This enumeration defines the levels of magnetic stripe reader (MSR) authentication support.
DriverUnifiedPosErrorReason This enumeration indicates the reason for the error.
DriverUnifiedPosErrorSeverity This enumeration indicates the severity of the error.
DriverUnifiedPosHealthCheckLevel This enumeration indicates the type of health check to be performed when CheckHealthAsync is called on a POS device.
DriverUnifiedPosPowerReportingType This enumeration defines the type of power reporting that is supported by the device (for example, advanced, standard, and so on).
DriverUnifiedPosPowerState This enumeration is not implemented.
MsrAuthenticationProtocolType This enumeration defines magnetic stripe reader (MSR) authentication protocols.
MsrCardType This enumeration defines the kinds of magnetic stripe cards.
MsrDataEncryption This enumeration defines the kind of encryption algorithm supported by the magnetic stripe reader (MSR).
MsrErrorReportingType This enumeration defines the constants that indicate the error reporting type for the magnetic stripe reader (MSR).
MsrStatusUpdateType This enumeration defines the constants that indicate the magnetic stripe reader (MSR) status.
MsrTrackErrorType This enumeration defines the kinds of magnetic stripe reader track errors.
MsrTrackIds Defines the constants that represent the magnetic stripe reader (MSR) tracks.
MstStatisticsEntryType This enumeration defines the kinds of magnetic stripe reader statistics.
POS_CX_EVENT_ATTRIBUTES The POS_CX_EVENT_ATTRIBUTES describes the priority and access rights for the POS events coming from the device. The values are a combination of the values defined in POS_CX_EVENT_DEST and POS_CX_EVENT_PRIORITY.
POS_CX_EVENT_DEST The POS_CX_EVENT_DEST defines which applications receive this event.
POS_CX_EVENT_PRIORITY The POS_CX_EVENT_PRIORITY defines the importance of the event and the order it will be delivered to the client application.
PosDeviceControlType This enumeration defines values for the IOCTLs of the scanner driver and magnetic stripe reader (MSR) driver.
PosDeviceType This enumeration defines values used in the PosDeviceBasicsType structure to indicate the type of device (for instance, barcode scanner or magnetic stripe reader).
PosEventType This enumeration defines values used in the PosEventDataHeader structure to indicate the type of event that was raised.
PosPropertyId This enumeration defines the property identifiers for the properties that device drivers need to handle to be considered a barcode scanner or a magnetic strip reader (MSR).


Title Description
EVT_POS_CX_DEVICE_OWNERSHIP_CHANGE The EVT_POS_CX_DEVICE_OWNERSHIP_CHANGE callback is called during the API claim ownership transition. The driver is expected to set the device back to a default state in this routine.
EVT_POS_CX_DEVICE_REMOTE_CLAIM The EVT_POS_CX_DEVICE_REMOTE_CLAIM callback is called when the device is transitioning from unclaimed to claimed and allows the driver to do additional work.
EVT_POS_CX_DEVICE_REMOTE_RELEASE The EVT_POS_CX_DEVICE_REMOTE_RELEASE callback is called whenever the device is released and left with no owner and allows the driver to do additional work.
EVT_POS_CX_DEVICE_REMOTE_RETAIN The EVT_POS_CX_DEVICE_REMOTE_RETAIN callback is called whenever PosCx attempts to hold onto a claim on a network device and allows the driver to do additional work.
PosCxClaimDevice PosCxClaimDevice is called to claim a device for exclusive use. The caller should call PosCxReleaseDevice when the device is no longer needed.
PosCxCleanPendingRequests PosCxCleanPendingRequests is called to cancel all pending requests for a given caller, identified by the open instance.
PosCxCleanupEvents PosCxCleanupEvents is called to clean up all pending events for a given caller, identified by the open instance.
PosCxClose PosCxClose is called to delete an opened PosCx library instance. This function releases the device if the caller is the owner, and cancels pending requests. It should be called from the driver's EVT_WDF_FILE_CLOSE callback.
PosCxGetDeviceInterfaceTag PosCxGetDeviceInterfaceTag returns the device interface tag that is set in PosCxOpen.
PosCxGetPendingEvent PosCxGetPendingEvent is called either from the device read callback, or when a new event arrives.
PosCxInit PosCxInit is called to initialize the PosCx library's internal resources. The resources are tied to the device, and are released when the device goes away.
PosCxIsDeviceOwner PosCxIsDeviceOwner checks if the caller currently owns the claim on the device.
PosCxIsPosApp PosCxIsPosApp checks if the open instance is associated with a point-of-service application.
PosCxMarkPosApp PosCxMarkPosApp marks the open instance as associated or not associated with a point-of-service application.
PosCxOpen PosCxOpen is called to create an open PosCx library instance. This function initializes all resources it needs to manage a single open instance. It should be called from the driver's EVT_WDF_DEVICE_FILE_CREATE callback.
PosCxPutPendingEvent PosCxPutPendingEvent creates a new event object, copies the event data to the new event object, and tries to delegate it to the waiting caller.
PosCxPutPendingEventMemory PosCxPutPendingEventMemory tries to delegate a memory object containing the event data to a waiting caller. If the target caller does not have a read request waiting, the new event is added to the designated event queue (control or data).
PosCxReleaseDevice PosCxReleaseDevice is called to release a device that was previously claimed with PosCxClaimDevice. Once the device is released, the next pending claim requester is promoted.
PosCxRemoteRequestRelease PosCxRemoteRequestRelease is called whenever a remote device asks for the device to release. This initiates claim negotiation.
PosCxRetainDevice PosCxRetainDevice is called to extend the ownership of the device.


Title Description
BarcodeSymbologyAttributesData The BarcodeSymbologyAttributesData structure contains the attribute information for a barcode symbology.
MSR_AUTHENTICATE_DEVICE This structure provides the authentication information used to authenticate a device.
MSR_DATA_RECEIVED This structure contains the data read from a swiped magnetic stripe card.
MSR_DEAUTHENTICATE_DEVICE This structure provides the information necessary to deauthenticate the device.
MSR_ERROR_EVENT This structure contains the error data that is passed to the MagneticStripeReaderErrorOccured event.
MSR_RETRIEVE_DEVICE_AUTHENTICATION_DATA This structure contains authentication information retrieved from the device.
MSR_SUPPORTED_CARD_TYPES This structure defines the types of magnetic stripe cards supported by the reader.
MSR_UPDATE_KEY This structure contains the information necessary to set a new encryption key.
POS_CX_ATTRIBUTES The POS_CX_ATTRIBUTES structure contains pointers to event callback functions implemented by the client driver.
PosBarcodeScanDataTypeData This structure describes a buffer of barcode symbologies supported by the driver.
PosBarcodeScannerCapabilitiesType This structure defines the type of scanner capabilities that a device supports such as whether the device supports statistics reporting and image preview.
PosBarcodeScannerDataReceivedEventData This structure contains the scanned data that is passed to the BarcodeScannerDataReceived event.
PosBarcodeScannerErrorOccurredEventData This structure contains the error data that is passed to the BarcodeScannerErrorOccurred event.
PosDeviceBasicsType This structure indicates the type of device, version, and recommended buffer size as specified by the driver.
PosDeviceInformation This structure provides device information as defined in and required by the Unified Point of Service (UPOS) standard.
PosEventDataHeader This structure describes the scanned image data that is passed to the BarcodeScannerImagePreviewReceived event.
PosMagneticStripeReaderCapabilitiesType This structure defines the kinds of magnetic stripe reader (MSR) capabilities that a device supports, such as whether the device supports track data masking.
PosProfileType This structure describes the number of profile strings in a buffer.
PosStatisticsHeader This structure defines Unified Point of Service (UPOS) standard information about a device. This structure is the header for an incoming statistic.
PosStatusUpdatedEventData This structure contains data passed to the StatusUpdated event.
PosStringType This structure represents a Point of Service (POS) unicode string with a length of DataLengthInBytes.
PosValueStatisticsEntry This structure contains the value of a statistic.