阅读:1556回复:5
用DeviceIoControl这样通信为什么会蓝屏
传输的数据结构
typedef struct DataTransfer { HANDLE hCurrentProcess; PROC* DatapfnNew; PROC* Datappfn; int isize; }; 应用层 DataTransfer* datatransferin; DataTransfer* datatransferout; int iLengthIn=sizeof(DataTransfer); int iLengthOut=sizeof(DataTransfer); datatransferin=new DataTransfer; datatransferout=new DataTransfer; datatransferin->DatapfnNew=&pfnNew; datatransferin->Datappfn=ppfn; datatransferin->isize=sizeof((*ppfn)); datatransferin->hCurrentProcess=GetCurrentProcess(); HANDLE g_SysHandle = ::CreateFile("\\\\.\\Apihook.vxd" GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, NULL ); BOOL bRc = ::DeviceIoControl(g_SysHandle, HOOK_DATA_PROCESS, &datatransferin, iLengthIn, &datatransferout, iLengthOut, NULL, NULL ); delete datatransferin; delete datatransferout; CloseHandle(g_SysHandle); 驱动层 DataTransfer* datatransferin; DataTransfer* datatransferout; datatransferin=new DataTransfer; datatransferout=new DataTransfer; memcpy(&datatransferin,(DataTransfer*)pDIOCParams->dioc_InBuf,sizeof(DataTransfer)); datatransferout->isize=datatransferin->isize; int size=pDIOCParams->dioc_cbOutBuf; memcpy((DataTransfer*)pDIOCParams->dioc_OutBuf,&datatransferout,sizeof(DataTransfer)); delete datatransferin; delete datatransferout; |
|
|
沙发#
发布于:2004-06-08 00:52
看看
http://www.driverdevelop.com/forum/html_69860.html?1086626849 另外 BOOL bRc = :eviceIoControl(g_SysHandle, HOOK_DATA_PROCESS, &datatransferin, iLengthIn, &datatransferout, iLengthOut, NULL, NULL ); 修改为 BOOL bRc = :eviceIoControl(g_SysHandle, HOOK_DATA_PROCESS, datatransferin, iLengthIn, datatransferout, iLengthOut, NULL, NULL ); |
|
|
板凳#
发布于:2004-06-09 10:06
如果是你自己写的驱动,仔细检查驱动代码,没什么说的,你的驱动程序有问题。如果不是你开发的,下载新启动。
|
|
地板#
发布于:2004-06-09 10:10
我按照前面的例子重新改了一下,蓝屏问题解决了。
[编辑 - 6/9/04 by yetty] |
|
|
地下室#
发布于:2004-06-17 20:30
我想问一下,当应用程序调用DeviceIoControl函数成功后,驱动中应该实现什么函数来响应它?
|
|
5楼#
发布于:2004-06-18 09:30
发送特定 IRP,驱动响应~~
|
|
|