注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

RTL: RtlNtStatusToDosError(0x829f1000): No Valid Win32 Error Mapping  

2011-01-14 21:41:45|  分类: 驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
RTL: RtlNtStatusToDosError(0x829f1000): No Valid Win32 Error Mapping
RTL: Edit ntos\rtl\generr.c to correct the problem
RTL: ERROR_MR_MID_NOT_FOUND is being returned

偶尔出现,代码如下:

    // Get our IRP stack location
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    // Get the buffer lengths
    inputLength = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;
...........//switch语句,省略
        Driver_Lock();

        Irp->IoStatus.Information=-1;        //兼容windows 2003 sp1

        inputBuffer = Irp->AssociatedIrp.SystemBuffer;
        if (inputBuffer!=NULL &&
            MmIsAddressValid(inputBuffer))
        {
            if (MmIsAddressValid(g_path.Buffer))
            {
                ExFreePool(g_path.Buffer);
            }

            __try
            {
                g_path.Buffer=(PWCH)ExAllocatePool(NonPagedPool, max(PAGE_SIZE, inputLength));
                if (g_path.Buffer==NULL)
                {
                    status = STATUS_NO_MEMORY;
                }
                else
                {
                    g_path.MaximumLength=max(PAGE_SIZE, inputLength);
                    g_path.Length=min(g_path.MaximumLength, inputLength);
                    RtlCopyMemory(g_path.Buffer, inputBuffer, g_path.Length);
                    Irp->IoStatus.Information=0;
                }
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                status = DBG_EXCEPTION_NOT_HANDLED;
            }
        }

        IoCompleteRequest (Irp, IO_NO_INCREMENT);

        Driver_Unlock();

        LoaderMeDriverDebugPrint(DBG_IO, DBG_INFO, __FUNCTION__": IOCTL_SET_DLL_PATH, inputBuffer=0x%x, dll_path=%wZ", inputBuffer, &g_path);

当再次调用DeviceIoControl和驱动交互时,系统直接蓝屏崩溃!
此时的错误信息如下:
Access violation - code c0000005 (!!! second chance !!!)
f6586e89 8b11            mov     edx,dword ptr [ecx]

寄存器的数值如下:
eax=000001b0 ebx=81e6d230 ecx=000001b0 edx=00000001 esi=f6589182 edi=f62a0bd6
eip=f6586e89 esp=f62a0924 ebp=f62a0c00 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
f6586e89 8b11            mov     edx,dword ptr [ecx]  ds:0023:000001b0=????????

无法debug跟踪调试!

    nRet = DeviceIoControl(hdriver_device, IOCTL_SET_DLL_PATH,
        m_dll_path.GetBuffer(0), m_dll_path.GetLength()*sizeof(TCHAR),
        NULL, NULL,
        (LPDWORD)&bytes, NULL);
的bytes从 int bytes改为DWORD bytes,居然就好了!不明白!int和DWORD不都是四个字节么?怎么会这样。


By:zhanyonhu
  评论这张
 
阅读(1617)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016