阅读:1925回复:0
请教一个问题
请问各位高手:
我编写端口输出程序的时候,是否需要在我的应用程序中(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] |
|
最新喜欢:amei |