⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winio.cpp

📁 可以绕过硬件端口保护
💻 CPP
字号:
// ---------------------------------------------------- //
//                      WinIo v2.0                      //
//  Direct Hardware Access Under Windows 9x/NT/2000/XP  //
//           Copyright 1998-2002 Yariv Kaplan           //
//               http://www.internals.com               //
// ---------------------------------------------------- //

#include <windows.h>
#include <winioctl.h>
#include "k32call.h"
#include "phys32.h"
#include "..\drv\nt\winio_nt.h"
#include "winio.h"

HANDLE hDriver = INVALID_HANDLE_VALUE;
bool IsNT;
bool IsWinIoInitialized = false;
char szWinIoDriverPath[MAX_PATH];


bool IsWinNT()
{
  OSVERSIONINFO OSVersionInfo;

  OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

  GetVersionEx(&OSVersionInfo);

  return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
}


bool GetDriverPath()
{
  PSTR pszSlash;

  if (!GetModuleFileName(GetModuleHandle(NULL), szWinIoDriverPath, sizeof(szWinIoDriverPath)))
    return false;

  pszSlash = strrchr(szWinIoDriverPath, '\\');

  if (pszSlash)
    pszSlash[1] = 0;
  else
    return false;

  strcat(szWinIoDriverPath, "winio.sys");

  return true;
}


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;
}


void _stdcall ShutdownWinIo()
{
  DWORD dwBytesReturned;

  if (IsNT)
  {
    if (hDriver != INVALID_HANDLE_VALUE)
    {
      // Disable I/O port access

      DeviceIoControl(hDriver, IOCTL_WINIO_DISABLEDIRECTIO, NULL,
                      0, NULL, 0, &dwBytesReturned, NULL);

      CloseHandle(hDriver);

    }

    RemoveWinIoDriver();
  }
  else
    CloseHandle(hDriver);

  IsWinIoInitialized = false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -