由于重装系统,以前的驱动调试环境都被破坏了,今天只好重新搭建一个。
我是用visual softice 和虚拟机来搭建的。符号路径设置为:symrv*symsrv.dll*F:\WINDOWS\Symbols\*http://msdl.microsoft.com/download/symbols
F:\WINDOWS\Symbols\是我的本地符号文件安装路劲。可是连上虚拟机后,显示ntkrnlpa.exe can't find pdb symbol file.请问这个是怎么回事?难道是我的机子没有ntkrnlpa这个符号文件吗?我是xp sp2的系统。在线等,急!!!有答案马上结贴

解决方案 »

  1.   

    用windbg调试.
    http://www.pcdog.com/edu/system-software/2006/09/h143145.html
    http://www.codeproject.com/KB/debug/cdbntsd6.aspx
      

  2.   

    一般从网上下载安装的符号可能与实际用的都不太匹配.补丁引起的.
    另外
    symrv*symsrv.dll*F:\WINDOWS\Symbols\*http://msdl.microsoft.com/download/symbols
    应该是
    symsrv*symsrv.dll*F:\WINDOWS\Symbols\*http://msdl.microsoft.com/download/symbols
    少了个字母r.
      

  3.   

    我已经搞明白了。悬赏以下问题,答对照样给分。
    char *buffer=ExAllocatePool(PagedPool,MAXFILEPATH);
    HANDLE file_handle=NULL ;//打开文件全局句柄
    ULONG length;
    NTSTATUS status;
    OBJECT_ATTRIBUTES object_attributes;
    IO_STATUS_BLOCK io_status={0};
    LARGE_INTEGER offset={0};
    UNICODE_STRING filepath = RTL_CONSTANT_STRING(L"\\??\\c:\\protect.txt");
    length = MAXFILEPATH;
    //初始化OBJECT_ATTRIBUTES
    InitializeObjectAttributes((POBJECT_ATTRIBUTES)&object_attributes,&filepath,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
    //打开文件
    status=ZwCreateFile(&file_handle,FILE_READ_DATA,&object_attributes,&io_status,NULL,FILE_ATTRIBUTE_NORMAL,
    FILE_SHARE_READ,FILE_OPEN_IF,FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
    NULL,0);
    if (!NT_SUCCESS(status))
    {
    DbgPrint("create file error %x\n",(ULONG)status);
    return status;
    }
    status = ZwReadFile(file_handle,NULL,NULL,NULL,&io_status,buffer,length,&offset,NULL);//把文件中的东西读入缓冲
    if (!NT_SUCCESS(status))
    {
    if (status==STATUS_END_OF_FILE)//注意,如果到达文件尾的话,那么返回值是一个负数.
    {
    DbgPrint("read all files\n");
    ZwClose(file_handle);
    status=STATUS_SUCCESS;
    }
    else
    {
    DbgPrint("read file error\n");
    ZwClose(file_handle);
    return status;
    }
    }为什么不能把文件的内容读完?我给的buffer缓冲比文件内容大啊。
      

  4.   

    &io_status里面返回的都是什么东西呢??
      

  5.   

    ZwReadFile either returns STATUS_SUCCESS or the appropriate error status. The number of bytes actually read from the file is returned in the Information member of the IoStatusBlock.
      

  6.   

    我知道io_status返回的是实际的长度,但是我是同步读文件的,而且提供的缓冲比文件的长度长,所以缓冲里应该返回文件的全部内容而不是一部分。status也应该返回STATUS_END_OF_FILE。可事实上不是,只读取了一部分。我怀疑我某个参数用错了,但现在检查不出来
      

  7.   

    加个  FILE_NO_INTERMEDIATE_BUFFERING 
    把 FILE_OPEN_IF改为 FILE_OPEN  看看。