ccsip
游客
游客
阅读:1925回复:0

请教一个问题

楼主#
更多 发布于:2001-05-02 19:28
请问各位高手:

我编写端口输出程序的时候,是否需要在我的应用程序中(RING3)给VIOPort类的函数:handler(...)传递值outdata呢?

比如:我想向端口0x378传送一个数据0x0b,我首先调用了一个VXD,该VXD的主体就是一个handler函数(详细见下)。按我现在所知的情况,当我在应用程序中调用_outp(..)时,系统会自动触发handler函数中相应的Output操作。问题是,handler函数中的_outp(...)的参数outdata的值是由系统自动传过来的吗?还是我需要在我的应用程序中调用其他函数呢?


望高手指教一二!

谢谢!

1、VXD的部分代码:(VToolsD编的)

//////////*.H
class MyPort: public VIOPort       //我的Port类
{
  public:
      MyPort(WORD port);
      ~MyPort();
     virtual DWORD handler(....);
};

class PortDevice: public VDevice  //Device 类
{
 public:
       PortDevice();
       virtual DWORD OnW32DeviceIOControl(PIOCTLPARAMS p);
       MyPort *p378;
};

//////////*.cpp
DWORD MyPort::handler(VMHANDLE hVM,DWORD port, CLIENT_STRUCT*pRegs,DWORD iotype,DOWRD outdata)
{
  switch(iotype)
  {
    case BYTE_OUTPUT:
                   _outp(outdata);break;  //// outdata来自何处?

    .....//其他I/O操作
   }
 return 0;
}
                    
PortDevice::PortDevice() { p378=0; }

DWORD PortDevice::OnW32DeviceIOControl(PIOCTLPARAMS p)
{
 switch(p->dioc_IOCtlCode)
   {
     case DIOC_OPEN:
                    p378=new MyPort(0x378); break;

     case DIOC_CLOSEHANDLE:
                   if(p378){delete p378; p378=NULL;}
                   break;
    }
return 0;
}

2、我在应用程序中是这样操作的:
     ......  
HANDLE hvxd;
hvxd=CreateFile("\\\\.\\port.vxd",..........);
........
_outp(0x378,0x0b);      //问题是只这样做行不行?
.......
CloseHandle(hvxd);


[ccsip 编辑于 2001-05-03 11:24]
[ccsip 编辑于 2001-05-03 11:25]
[ccsip 编辑于 2001-05-03 11:27]

最新喜欢:

ameiamei
游客

返回顶部