void initializeSegments(void) { driver = (WCHAR *)malloc(128); ctow(driver,sysname); bool ret = InitializeWinIo(); printf("InitializeWinIo returned %d\n", ret); fflush(stdout); ret = InstallWinIoDriver(driver, false); printf("InstallWinIoDriver returned %d\n", ret); fflush(stdout); }
void* lptopen(unsigned long port) { char drv[] = "WinIo.sys"; if (InstallWinIoDriver(drv)) { if (InitializeWinIo()) { LPT* pLpt = &lpt; pLpt->data = port; pLpt->stat = port + 1; pLpt->ctrl = port + 2; return pLpt; } } return 0; }
bool _stdcall InitializeWinIo() { bool bResult; DWORD dwBytesReturned; IsNT = IsWinNT(); if (IsNT) { hDriver = CreateFile("\\\\.\\WINIO", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // If the driver is not running, install it if (hDriver == INVALID_HANDLE_VALUE) { GetDriverPath(); bResult = InstallWinIoDriver(szWinIoDriverPath, true); if (!bResult) return false; bResult = StartWinIoDriver(); if (!bResult) return false; hDriver = CreateFile("\\\\.\\WINIO", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDriver == INVALID_HANDLE_VALUE) return false; } // Enable I/O port access for this process if (!DeviceIoControl(hDriver, IOCTL_WINIO_ENABLEDIRECTIO, NULL, 0, NULL, 0, &dwBytesReturned, NULL)) return false; } else { VxDCall = (DWORD (WINAPI *)(DWORD,DWORD,DWORD))GetK32ProcAddress(1); hDriver = CreateFile("\\\\.\\WINIO.VXD", 0, 0, 0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0); if (hDriver == INVALID_HANDLE_VALUE) return false; } IsWinIoInitialized = true; return true; }