阅读:2214回复:11
关于outpd 和inpd的问题
我用_outpd向70端口输出一个双字,然后用_inpd再把那个双字读回来传给应用程序,可是没有任何值被传回来。我感觉 outpd和inpd 根本都没有工作,请各位指教
Struct xy { unsigned long x;}; 应用程序: void main() { HANDLE hDevice; xy *pxy;// unsigned long z=0;//接受vxd传回来的值 hDevice=CreateFile (\"\\\\\\\\.\\\\TEST.VXD\",0,0,0,CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE,0); if(hDevice==INVALID_HANDLE_VALUE) { fprintf(stderr,\"can nor load VXD,error=%08ld\\n\" GetLastError()); exit(1); } pxy=new xy[1];// pxy[1].x=0;// if(!DeviceIoControl(hDevice,ADDXY,&pxy[1],0,&z,0,0,0)) { fprintf(stderr,\"fail,error=%08ld\\n\",GetLastError()); exit(1); } printf(\"%x\\n\",z);//总是传回z的初始值0????? CloseHandle(hDevice); } vxd程序: DWORD TestDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams) { xy *pxy; switch(pDIOCParams->dioc_IOCtlCode) {case DIOC_OPEN: return 0; case DIOC_CLOSEHANDLE: return DEVIOCTL_NOERROR; case ADDXY: { pxy=(xy*)pDIOCParams->dioc_InBuf;// _outpd(0x70,0x00000001);// pxy->x=_inpd(0x70);// *(unsigned long*)pDIOCParams->dioc_OutBuf=pxy->x;// return 0;} default :return -1; } } [编辑 - 5/29/02 by amei] [编辑 - 5/29/02 by amei] |
|
沙发#
发布于:2002-06-03 08:09
我试过其他的端口了,我用outpd操作之后再用inpd 想取回原来的操作数,但是得不到。当我用70端口是返回的是ffffffff用20端口是返回的是ffff0000.我往70端口输入数据后再开机bios说日期和时间有问题让我修改,我想这是不是说明我已经修改了79端口呢,但为什么我用inpd取不回我修改的值呢?请各位指教!
|
|
板凳#
发布于:2002-05-30 11:08
70端口是受操作系统保护的吧,你应该把它接管过来,这比较危险,看了你的VXD,你换一个口地址就应该可以了。 :)
|
|
地板#
发布于:2002-05-29 16:07
if(!DeviceIoControl(hDevice,ADDXY,&pxy[0],4,&z,4,&Bytes,0))
|
|
地下室#
发布于:2002-05-29 15:57
敲漏了一个字是“DriverStudio我不熟悉”
我的E-Mail是mfczmh@sina.com.cn |
|
|
5楼#
发布于:2002-05-29 15:56
敲漏了一个字是“DriverStudio我不熟悉”
|
|
|
6楼#
发布于:2002-05-29 15:41
是在98下.谢谢了.
|
|
7楼#
发布于:2002-05-29 15:33
你确保OnW32DeviceIoControl已经响应了
还有,你是在Win9X下吗? 如果可以我可帮你看看,最好是DDK开发的,因为DriverStudio我熟悉(昨天刚装了个2.01版) |
|
|
8楼#
发布于:2002-05-29 15:20
是动态加载的,win32程序运行的很正常.
哎,就是搞不懂,错在哪里,已经一下午了,郁闷!!! |
|
9楼#
发布于:2002-05-29 15:13
你上面的代码看你是使用动态加载vxd的,不只你的def文件是否正确,
你的Win32程序成功运行到那里了。 |
|
|
10楼#
发布于:2002-05-29 14:46
1、pxy[1].x=0; 错误,应该是pxy[0].x=0; 做了改动仍无效?? |
|
11楼#
发布于:2002-05-29 14:40
1、pxy[1].x=0; 错误,应该是pxy[0].x=0;
2、DeviceIoControl的第四个参数应该是sizeof(pxy[0]) |
|
|