Windows – Install and Set Up the PCSC Driver (optional)
This section describes how to install, configure, and manage the Oracle Java Card PCSC driver to enable communication with the Oracle Java Card Development Kit Simulator on Windows.
The package includes several files, each with a specific role in the driver setup.
Package Contents and File Descriptions
| File | Purpose |
|---|---|
jcdkPCSC.cat (Catalog File)
|
Provides digital signatures that verify the authenticity and integrity of the driver package. Ensures security and compliance during installation. |
jcdkPCSC.sys (System File)
|
The core device driver that enables communication between Windows and the Oracle Java Card Development Kit Simulator. |
jcdkPCSCBus.inf (Information File)
|
Contains installation instructions and configuration details for the PCSC bus driver. Used by Windows to properly recognize and install the driver. |
jcdkPCSCReader.inf (Information File)
|
Contains installation instructions for the simulated smart card reader device. |
jcdkPCSCCtrl.exe (Driver Controller
Application)
|
A command-line tool to install, uninstall, and configure the PCSC driver, replacing and extending Windows Device Manager actions for this device. |
Driver Controller Application Commands
| Command | Description |
|---|---|
install |
Installs the PCSC driver (adds a Bus device to Windows, visible as “Oracle Java Card PCSC Bus” under System devices in Device Manager). |
uninstall |
Uninstalls the PCSC driver and removes all simulated card readers. |
add <identifier> |
Adds a simulated smart card reader for the Oracle
Java Card Development Kit Simulator.
Note:
|
remove <identifier> |
Removes the simulated reader specified by
<identifier>.
|
Install PCSC Driver
Pre-requisites
- Windows 10/11 (x64) and administrator privileges.
- Uninstall any previous version of the driver (see Uninstall section).
Note:
Administrator privileges are required to install system drivers. All commands must be run from an elevated Command Prompt.- Open a Command Prompt as Administrator.
Navigate to the
drivers/PCSCfolder where the Oracle Java Card Development Kit Simulator package was installed.cd drivers\PCSC - Install the PCSC driver.
Use the Driver Controller application to install the core PCSC driver. This registers a new PCSC Bus device, visible as Oracle Java Card PCSC Bus in the System devices category in Windows Device Manager.
jcdkPCSCCtrl.exe installNew bus installed - Add a simulated smart card reader.
Add a simulated card reader for the Oracle Java Card Development Kit Simulator.
Note:
<identifier>must be a numeric value (e.g. `0`). Only one reader can be added in the current version.jcdkPCSCCtrl.exe add 0Reader addedThe reader will appear in Device Manager as Oracle Java Card PCSC Reader under Smart Card Readers.
Configure PCSC Driver for Remote or Custom Connections (optional)
By default, the driver connects to the Simulator running locally on
localhost:9025. For more details how to start the Simulator,
see Java Card Development Kit Simulator Command Line.
To connect to a Simulator on a different network address or port, update the default PCSC Driver configuration as follows:
- Open Windows Registry Editor.
- Choose the reader used to communicate with the Simulator. The reader instance is
created under this
path:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\jcdkPCSCBus\jcdkPCSCReader - Open the dynamically created reader instance and select the
Device Parameters
container:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\jcdkPCSCBus\jcdkPCSCReader\...\Device Parameters - Edit the default values under Device
Parameters:
SimuIP REG_SZ 127.0.0.1 SimuPort REG_DWORD 0x00002341 (9025) - Restart the reader device: In Device Manager, select the Oracle Java Card PCSC Reader, choose Disable, then Enable the device.
Uninstall PCSC Driver
Note:
Administrator privileges are required to install system drivers. Run all commands from an elevated Command Prompt in the PCSC Driver folder of your JCDK bundle.- Using the Driver Controller Application (
jcdkPCSCCtrl.exe) – preferred solution - Using Windows Device Manager Control Panel
If you plan to install a newer version of the driver, we recommend performing the cleanup operations described at the end of this section.
Uninstall using the Oracle Driver Controller Application (Preferred)
- Open a Command Prompt as Administrator and navigate to the driver
directory.
Navigate to the
drivers/PCSCfolder where the Oracle Java Card Development Kit Simulator package was installed.cd drivers\PCSC - Remove the simulated reader.
Use the Driver Controller application to remove the installed reader. The
<identifier>must match the reader you previously added with theadd <identifier>command.jcdkPCSCCtrl.exe remove 0Reader removed - Uninstall the PCSC driver.
Use the Driver Controller application to uninstall the core PCSC driver.
jcdkPCSCCtrl.exe uninstallAll buses uninstalled
Uninstall using Windows Device Manager
- Option 1 (Step-by-step removal):
- In Device Manager, find and right-click Oracle Java Card PCSC Reader under Smart Card Readers, then select Uninstall device.
- Next, find and right-click Oracle Java Card PCSC Bus under System devices, and select Uninstall device.
- Option 2 (Remove parent device):
- In Device Manager, find and
right-click Oracle Java Card PCSC Bus under
System devices, then select
Uninstall device.
This will also automatically uninstall the associated PCSC Reader(s).
- In Device Manager, find and
right-click Oracle Java Card PCSC Bus under
System devices, then select
Uninstall device.
Cleanup using Windows PnPUtil Application
When you uninstall a device, Windows may only remove the device instance, not the driver files from the Driver Store. If the device is re-added, Windows can silently reinstall the same driver. To fully remove a problematic or outdated driver and prevent automatic reinstallation, execute the following steps in a PowerShell console opened as Administrator:
- Remove SmartCardReader
drivers.
pnputil /enum-drivers /class SmartCardReaderReview the output for a section similar to:Published Name: oemXXX.inf Original Name: jcdkpcscreader.inf Provider Name: Oracle Class Name: SmartCardReader Class GUID: {50dd5230-ba8a-11d1-bf5d-0000f805f530} Driver Version: ... Signer Name: Microsoft Windows Hardware Compatibility PublisherThen run:pnputil /delete-driver oemXXX.inf /uninstall - Remove System Bus
drivers.
pnputil /enum-drivers /class System | Select-String "Oracle" -Context 3,7Review the output for:Published Name oemXXX.inf Original Name: jcdkpcscbus.inf Provider Name: Oracle Corporation Class Name: System Class GUID: {4d36e97d-e325-11ce-bfc1-08002be10318} Driver Version: ... Signer Name: Microsoft Windows Hardware Compatibility PublisherThen run:pnputil /delete-driver oemXXX.inf /uninstall
Known Limitations and Issues
- Single Reader Limitation
Only one smart card reader can be added in the current version.
- Simulated Reader State Not Updated When Simulator Stops
Problem:
When the Simulator is stopped, the PC/SC stack fails to update the simulated reader state to
SCARD_ABSENT. As a result, applications relying on card removal detection may not respond as expected.Impact:
- For applications using
winscard.h:SCardStatus(}may still reportSCARD_PRESENTeven though the Simulator is no longer running.
SCardGetStatusChange()can remain blocked despite the Simulator having been stopped.SCardConnect()may continue to succeed for a short period after the Simulator is stopped, due to delayed state updates. After this brief window, subsequent connect attempts will fail as expected.- For applications using
javax.smartcardio:CardTerminal.waitForCardAbsent()may remain blocked despite the Simulator having been stopped.
Workaround:
To force a reader state refresh after stopping the Simulator, attempt to connect and then disconnect from the reader.
This operation will trigger detection that the Simulator is no longer running, updating the state:- Using
winscard.h: CallSCardConnect()followed bySCardDisconnect(). - Using
javax.smartcardio: UseCardTerminal.connect(*)to attempt a connection, thenCard.disconnect()
This will update the PC/SC stack and should unblock any logic waiting for a card absent state (
SCARD_ABSENT).Recommendation:
Where possible, implement timeouts or cancellation in your application logic to avoid indefinite blocking in case the Simulator has stopped unexpectedly.
- For applications using
Troubleshooting
- Issue:
Error 0x00000514when running the Driver Controller Application (jcdkPCSCCtrl.exe)- Details:
Error 0x00000514 Not all privileges or groups referenced are assigned to the caller. - Solution:
- This issue occurs when attempting to execute the Driver Controller Application without administrator privileges.
- Open the Command Prompt as Administrator.
- Re-run your command, for example:
jcdkPCSCCtrl.exe install
- Details:
- Issue:
Error 0x000005AAwhen re-installing a Smart Card Reader.- Details:
Last error: 000005AA Error adding reader: Insufficient system resources exist to complete the requested service - Solution:
Uninstall the PCSC driver and re-install it as described above.
- Details: