阅读:1227回复:6
VxD中使用memcpy时的困惑
struct DataTransfer
{ HANDLE hCurrentProcess; PROC DatapfnNew; PROC Datappfn; int isize; }; 应用层将结构为DataTransfer的数据传入VxD以后,作如下拷贝动作 DataTransfer datatransferin; DataTransfer datatransferout; memcpy(&datatransferin,(DataTransfer*)pDIOCParams->dioc_InBuf,sizeof(DataTransfer)); memcpy(datatransferin.Datappfn,datatransferin.DatapfnNew,datatransferout.isize); 其中datatransferout.isize=sizeof(datatranferin.DatapfnNew),第二个memcpy出错,出错信息是98下大概是"`该程序不正确处理,请与制造商联系"字样。想不通,请问应该如何修改 [编辑 - 6/9/04 by yetty] |
|
|
沙发#
发布于:2004-06-09 12:34
是不是要lock一下?
|
|
|
板凳#
发布于:2004-06-09 16:22
如果这样你需要lock,并且取保在访问完成前你不能在ring3中释放该指针。
DatapfnNew和Datappfn地址无效了 |
|
|
地板#
发布于:2004-06-09 16:37
又犯了一个小错误,改为这样就可以了
memcpy(&datatransferin.Datappfn,&datatransferin.DatapfnNew,datatransferout.isize); |
|
|
地下室#
发布于:2004-06-09 16:49
memcpy(&datatransferin.Datappfn,&datatransferin.DatapfnNew,datatransferout.isize);
哈哈,不是指针的指针了吗? |
|
|
5楼#
发布于:2004-06-09 16:52
是不是错了,哥们一笑我就更没信心了。
正好还不会调试,也不知对不对,反正应用层打开设备再没有出现那个郁闷的非法操作对话框了。 |
|
|
6楼#
发布于:2004-06-09 16:56
或许这样可以侥幸通过,但可能有问题。
看看http://www.driverdevelop.com/forum/html_69860.html?1086771332这里的答案 |
|
|