lt77
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2075回复:3

关于并口(有源码)!

楼主#
更多 发布于:2001-08-17 08:11
斗胆请教各位,我用VTOOLSD做了一个监控并口的程序,目的为了拿到应用程序向并口发送数据,但我用下面的程序反复测试,结果共测试了3台电脑,而只有1台机在DOS状态下发送的并口数据能被handler函数检测到,我使用DEBUGVIEW调试的。好迷惘,请各位指教


程序代码如下:

头文件:
#include

#define DEVICE_CLASS PortDevice
#define PORT_DeviceID UNDEFINED_DEVICE_ID
#define PORT_Init_Order UNDEFINED_INIT_ORDER
#define PORT_Major 1
#define PORT_Minor 0

//#define DIOC_MY_IO CTL_CODE(FILE_DEVICE_UNKNOWN,1,METHOD_NEITHER,FILE_ANY_ACCESS)
//struct PortStruct{WORD wPort;WORD wVal;BOOL bInput;};

class MyPort: public VIOPort
{
public:

MyPort():VIOPort(0x378){};

virtual DWORD handler(VMHANDLE hVM,DWORD port,
CLIENT_STRUCT *pRegs,
DWORD iotype,
DWORD outdata);

DWORD Count;
BYTE *buffer;

};

class PortDevice : public VDevice
{
public:

virtual BOOL OnSysDynamicDeviceInit();
virtual BOOL OnSysDynamicDeviceExit();
virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams);


};



cpp文件:
#define DEVICE_MAIN
#include "port.h"
Declare_Virtual_Device(PORT)
#undef DEVICE_MAIN
MyPort *pio;
BOOL PortDevice::OnSysDynamicDeviceInit()
{

pio=new MyPort();
if(pio)
{
dout<<"hook failed pio"<
if(pio->hook())
{
dout<<"hook success"< pio->Count=0;
pio->buffer=new BYTE[65535];
}
else
{
dout<<"hook failed liyu"< // return FALSE;
}
}
else return FALSE;

return TRUE;
}


BOOL PortDevice::OnSysDynamicDeviceExit()
{
if(pio)
{
if(pio->unhook())
{
dout<<"unhook success"< delete pio->buffer;
}
delete pio;
}
return TRUE;
}




DWORD PortDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
switch(pDIOCParams->dioc_IOCtlCode)
{
case DIOC_OPEN:
dout<<"DIOC_OPEN"< break;
case DIOC_CLOSEHANDLE:
dout<<"DIOC_close"< break;
case 112:
dout<<"HELLO LIUTAO"< pio->globalEnable();
break;

case 111:
dout<<"liutao"< int size=pDIOCParams->dioc_cbOutBuf;
size=pio->CountCount:size;
memcpy(pDIOCParams->dioc_OutBuf,pio->buffer,size*sizeof(BYTE));
*pDIOCParams->dioc_bytesret=size;
break;

}


return 0;
}


DWORD MyPort::handler(VMHANDLE hVM,DWORD port,CLIENT_STRUCT *pRegs,DWORD iotype,DWORD outdata)
{
char data;
dout<<"byte output"< switch(iotype)
{

case BYTE_OUTPUT:

data=_outp(port,outdata);
if(data>31&data<123)
{
buffer[Count]=outdata;

if(++Count>=65535) Count=65535;
}
dout<<"byte output"< return data;

case STRING_IO:

dout<<"STRING_IO"< return 0;

}
return 0;
}

最新喜欢:

stoneyrstoney...
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2001-08-17 08:52
请不要发重帖!!已经三帖了按本站规定是要封帐号的.请自己删除剩下的两帖!
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
ohg
ohg
驱动牛犊
驱动牛犊
  • 注册日期2001-06-11
  • 最后登录2002-12-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-18 02:46
你试试在DIOC_OPEN的时候 new MyPort();
看看行不行

呵呵
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-15 12:53
你的中断函数中最后要清空中断
游客

返回顶部