现在我用Driver Monitor打开驱动程序之后,Softice对断点有反应。
可是用我的Win32程序就不行:(
我明明用的是动态方式
谁能帮我!

解决方案 »

  1.   

    先加载它,用Open
    调用可以使用WinIoControl
      

  2.   

    先加载它,用Open
    调用可以使用WinIoControl
    最后要关闭,否则你的Driver的源程序修改,不会影响你系统中的Driver
      

  3.   

    Kronus: 你好,我想学VxD编程,能不能告诉我该如何入手,有什么好的书或者资料?哪里有Driver Studio呢?谢谢,你回答了以后,随便找一篇我的贴子,我给你加分啊,谢谢
      

  4.   

    上帝,我终于找到了解决的方法,兄弟们望下看:)
    我参考了VtoolsD所带的例程,cpp\r0fileio具体方法为第一次加载失败后,如:
    const PCHAR VxDName = "\\\\.\\HELLO";
    DWORD ErrorNumber;
    HANDLE hldr;
    const PCHAR VxDFile = "HELLO.VXD"; DWORD IoctlCode;
    DWORD nRet;
    hDevice = CreateFile(VxDName, 0,0,0, CREATE_NEW, 0, 0); if (hDevice == INVALID_HANDLE_VALUE)
    {
    ErrorNumber = GetLastError();
    hldr = CreateFile(
    "\\\\.\\VXDLDR", 
    GENERIC_READ, 
    FILE_SHARE_READ, 
    0, 
    OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL,
    NULL); if (hldr == INVALID_HANDLE_VALUE)
    {
    fprintf(stderr, "unable to open VXDLDR: %x\n",     GetLastError());
    return;
    }
    IoctlCode = VXDLDR_APIFUNC_LOADDEVICE; if (!DeviceIoControl(hldr, IoctlCode, VxDFile, strlen(VxDFile)+1, NULL, 0, &nRet, NULL) )
    fprintf(stderr, "ERROR: load failed.\n");
    else
    hDevice = CreateFile(VxDName, 0,0,0, CREATE_NEW, 0, 0); printf("FileOpen Error!!!");
    CloseHandle(hDevice);
    }
    else
    {
    printf("Operation Ok"); CloseHandle(hDevice);
    }
      

  5.   

    bensilver:
    我也正在搞驱动程序,大家可以一起研究:)
    安装具体环境为:
    (1)装上VC5.0,并装上Studio97 SP3(也在微软站点有下),因为DDK98说:
    Microsoft Visual C++ version 4.2 or 5.0 (including service packs) for x86-based systems. Microsoft VC++ version 5.0 (including service packs) is required to compile the video capture samples. Note that Visual C++ 6.0 is not supported for any of the samples. (2)装上98DDK,在www.microsoft.com/ddk有下(3)如要用上汇编,到asm.yeah.net下载MASM32。(4)到www2.cs.uestc.edu.cn下载DriverStudio2.0,安装上就可以了。DriverStudio是基于VC和DDK的基础上开发的.至于资料,我觉得还是看DriverStudio的帮助比较好,市面上的驱动程序的书我几乎都买全了,当大都是WDM的,只有一本《Windows设备驱动程序技术内幕》是讲VxD的,但写书的人实在是太差,用不上:(
      

  6.   

    我对VxD有兴趣,要讨论一定带上我呀,我用的是:VC5 + VToolsD + Softice,我是用VToolsD里的QuickVxD生成框架,再用VC5的IDE写,编译,如果有BUG再用Softice调试.你们用的都是什么呢?VxD的书少的可怜,VC5入门的书到是一大堆,Kronus你说的《Windows设备驱动程序技术内幕》还是不错的,我有.还有WDM和VxD差到姥姥家去了,你看WDM的书一点用也没有呀.VToolsD很好呀,可以用C/C++写VxD,真搞不懂为什么有人还要问怎么安装DDK,难到你们都认为用ASM比用C/C++方便呀?(自虐狂?),我认识的做VxD的网友都是用VToolsD的.还有,这里好象没有什么VxD高手?如果有就请现身吧~~~~~!http://greenstuff.363.net
      

  7.   

    请问vtoolsd在哪里有呢?有回答的朋友我来加分
      

  8.   

    各位仁兄,我在VxD给App发送消息时又碰到问题:(
    具体如下:
    在VxD中,
    DWORD IpxDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
    {
    HANDLE hAppWin;
    DWORD uMsg = 0;
    PVOID dwRefData;

    switch (pDIOCParams->dioc_IOCtlCode)
    {
    case DIOC_OPEN:
    break;
    case DIOC_CLOSEHANDLE:
    break;
    case 100:
    hAppWin = *(HANDLE*)(pDIOCParams->dioc_InBuf);
    uMsg = 0xFF00; //暂时定的消息号
    if(SHELL_PostMessage(hAppWin, uMsg, 0, 0, 0, dwRefData))
    {
    *(DWORD*)(pDIOCParams->dioc_OutBuf) = 1234;
    }
    else
    {
    *(DWORD*)(pDIOCParams->dioc_OutBuf) = 5678;
    return 1;
    }

    break;
    default:
    break;
    }
    return DEVIOCTL_NOERROR;
    }
    ////////////////////////////////////////////////////////////////////////
    在App中:
    HANDLE inBuffer;
    inBuffer= AfxGetMainWnd()->ShowWindow(AfxGetMainWnd()->GetStyle());
    inBuffer = AfxGetInstanceHandle();
    DWORD outBuffer = 0;
    ioCode = 100;status = DeviceIoControl(
    hDevice,
    ioCode,
    &inBuffer,
    sizeof(HANDLE),
    &outBuffer,
    sizeof(DWORD),
    &nRet,
    NULL
    );我在App中用PostMessage(0xFF00, 0, 0)消息正常相应,可是要VxD发送,虽然返回值是1234(SHELL_PostMessage成功返回),消息就是没有被相应:(各位大虾,给我诊断一下,好吗?
      

  9.   

    bensilver:
    DriverStudio2.0(www2.cs.uestc.edu.cn)中带VtoolsD
      

  10.   

    消息传递终于搞定了,在传递Handle时,inBuffer = m_hWnd,就OK了!!!!
    下一步我将搞中断截取……
      

  11.   

    请教各位兄台,怎么构住一个中断,如0x2F
    我用Hook_V86_Int_Chain,怎么试也没有成功,
    能否伸出援助之手
      

  12.   

    我的OICQ:2078570
    希望大家多多交流
      

  13.   

    久仰大名!鄙人最近在学用VtoolsD,遇到了很多问题!下面提供一二以飨各位大虾:一、VtoolsD包的Monitor下的 Edit\Properties 选项该如何用?即使我打开了一个VxD,仍提示“No driver is currently open”!
    二、用QuickVxD设计的VxD在Monitor下打开后无法启动,总提示出现11号“Unexpected error”,这是什么意思?
    三、例程中出现了很多 Thunk,英译为“转换器”,但究竟该怎么理解?
    四、不知还有没有更好的调试工具?最后是在下的一个希望:愿各位对Win VxD有所了解的大虾谈谈自己的一些经验,小弟将感激不尽! ICQ:55777846
    MAIL:[email protected]