Parallel Port Dog Driver ✪ < Reliable >
It sounds like you're looking for a — often used in legacy software licensing or industrial control.
// Simple dongle handshake: write value, read back, compare int check_dongle() { __outbyte(DONGLE_PORT, 0xAA); // write pattern Sleep(10); unsigned char ret = __inbyte(DONGLE_PORT); return (ret == 0xAA); } parallel port dog driver
// In EvtIoDeviceControl NTSTATUS EvtIoDeviceControl( __in WDFQUEUE Queue, __in WDFREQUEST Request, __in size_t OutputBufferLength, __in size_t InputBufferLength, __in ULONG IoControlCode ) { NTSTATUS status = STATUS_UNSUCCESSFUL; WDFDEVICE device = WdfIoQueueGetDevice(Queue); PDEVICE_EXTENSION devExt = GetDeviceExtension(device); switch (IoControlCode) { case IOCTL_DONGLE_CHECK: { UCHAR testVal = 0x5A; // Write to parallel port data register WRITE_PORT_UCHAR((PUCHAR)devExt->PortBase + 0x00, testVal); // Small delay (not KeStall for production) KeStallExecutionProcessor(50); UCHAR readVal = READ_PORT_UCHAR((PUCHAR)devExt->PortBase + 0x00); if (readVal == testVal) { status = STATUS_SUCCESS; } break; } default: status = STATUS_INVALID_DEVICE_REQUEST; } WdfRequestComplete(Request, status); return status; } #include <stdio.h> #include <unistd.h> #include <sys/io.h> #define BASE 0x378 int main() { if (ioperm(BASE, 3, 1)) { perror("ioperm"); return 1; } outb(0x55, BASE); usleep(1000); int val = inb(BASE); if (val == 0x55) printf("Dongle OK\n"); else printf("Dongle failed: %02X\n", val); ioperm(BASE, 3, 0); return 0; } It sounds like you're looking for a —