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

📄 port32.cpp

📁 WinIo 2.0 使用非常简单, 提供一个初始化函数 InitializeWinIo() 和 关闭结束函数 ShutdownWinIo() 在调用初始化函数成功之后, 就可以进行任意端口操作了,
💻 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 <conio.h>
#include "port32.h"
#include "..\drv\nt\winio_nt.h"
#include "..\drv\9x\winio_9x.h"
#include "winio.h"


bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize)
{
  tagPort32Struct Port32Struct;
  DWORD dwBytesReturned;
  
  if (!IsWinIoInitialized)
    return false;

  if (IsNT)
  {
    switch (bSize)
    {
      case 1:

        *pdwPortVal = _inp(wPortAddr);

      break;

      case 2:

        *pdwPortVal = _inpw(wPortAddr);

      break;

      case 4:

        *pdwPortVal = _inpd(wPortAddr);

      break;
    }
  }
  else
  {
   Port32Struct.bSize = bSize;
   Port32Struct.wPortAddr = wPortAddr;
   
   return DeviceIoControl(hDriver, WINIO_READPORT, &Port32Struct, sizeof(Port32Struct),
                          pdwPortVal, sizeof(DWORD), &dwBytesReturned, NULL);
  }

  return true;
}


bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize)
{
  tagPort32Struct Port32Struct;
  DWORD dwBytesReturned;

  if (!IsWinIoInitialized)
    return false;

  if (IsNT)
  {
    switch (bSize)
    {
      case 1:

        _outp(wPortAddr, dwPortVal);

      break;

      case 2:

        _outpw(wPortAddr, (WORD)dwPortVal);

      break;

      case 4:

        _outpd(wPortAddr, dwPortVal);

      break;
    }
  }
  else
  {
   Port32Struct.bSize = bSize;
   Port32Struct.dwPortVal = dwPortVal;
   Port32Struct.wPortAddr = wPortAddr;
   
   return DeviceIoControl(hDriver, WINIO_WRITEPORT, &Port32Struct, sizeof(Port32Struct),
                          NULL, 0, &dwBytesReturned, NULL);
  }
  
  return true;
}

⌨️ 快捷键说明

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