关于网友提出的“ 内存不能为written问题”问题疑问,本网通过在网上对“ 内存不能为written问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 内存不能为written问题
描述: #include "stdafx.h"
#include
#include
#define hook_code CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED,FILE_ANY_ACCESS)
int _tmain(int argc, _TCHAR* argv[])
{
long pid=0;
char ret[4096];
DWORD ReBytes=0;
HANDLE hDevice=CreateFile(_T("\\\\.\\MyCDOSL"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hDevice==INVALID_HANDLE_VALUE)
{
if (2==GetLastError())
{
printf("驱动程序未注册\n");
}
else
printf("CreateFile() GetLastError reports %d\n",GetLastError());
getchar();
return 0;
}
memset(ret,0,4096);
printf("请输入要保护进程的ID:");
scanf("%ld",pid);
DeviceIoControl(hDevice,hook_code,&pid,4,ret,4096,&ReBytes,NULL);
printf("Return Value:%s\n",ret);
CloseHandle(hDevice);
system("pause");
return 0;
}
DeviceIoControl(hDevice,hook_code,&pid,4,ret,4096,&ReBytes,NULL);
貌似是这行有问题
驱动程序会进入分发函数但没有进入IRP_MJ_DEVICE_CONTROL的处理中去
另外问下windbg双机调试时 虚拟机要蓝了,在外面的windbg中断下来,能通过windbg的指令来阻止虚拟机蓝屏吗
刚学驱动 还望指点
解决方案1: 把 case IRP_MJ_DEVICE_CONTROL:后面的代码全注释也蓝屏吗?
建议用排除法来解决问题
解决方案2: 在分发函数入口处设置断点,进入断点后再单步,看执行到哪一行开始蓝屏的,另外,在DeviceIoControl后面调用GetLastError看是什么值
解决方案3: DriverEntry贴出来看看
解决方案4: 同意楼上 另外不大懂lz"内存不能为written"是指贴出来的这个吗? 如果R3都挂了驱动怎么进分发函数啊 .....
解决方案5: 另外问下windbg双机调试时 虚拟机要蓝了,在外面的windbg中断下来,能通过windbg的指令来阻止虚拟机蓝屏吗
蓝是由于系统崩溃导致,如果是这样应该没有办法stop,你顶多可以将它挂起,然后分析快死的body。
至于没有进入指定的分支,可以用IRP监控器检查一下
解决方案6: 支持你,我也是学了些皮毛
在代码中设置断点,虚拟机在蓝屏前,你捕获了断点,就可以来阻止虚拟机蓝屏
以上介绍了“ 内存不能为written问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3309193.html