2731|4

85

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

DeviceIoControl导致蓝屏。。。 [复制链接]

DeviceIoControl导致蓝屏。。。

#define FILE_DEVICE_FILEMON    0x00008300
#define IOCTL_FILEMON_ADDPROTECTEDPATH (ULONG) CTL_CODE( FILE_DEVICE_FILEMON, 0x810, METHOD_BUFFERED, FILE_ANY_ACCESS )
#define IOCTL_FILEMON_DELPROTECTEDPATH (ULONG) CTL_CODE( FILE_DEVICE_FILEMON, 0x811, METHOD_BUFFERED, FILE_ANY_ACCESS )
#define IOCTL_FILEMON_GETPROTECTEDPATH (ULONG) CTL_CODE( FILE_DEVICE_FILEMON, 0x812, METHOD_BUFFERED, FILE_ANY_ACCESS )


typedef struct _FilemonNameParam{
    char  *SourceFileName;
    char  *CacheFileName;
}FilemonNameParam,*PFilemonNameParam;


#define LOGBUFSIZE      ((ULONG)(64*0x400-(3*sizeof(ULONG)+1)))

BOOL SetProtectPath(HANDLE SysHandle,char* Path,bool bAdd=true)
{
    DWORD nb;
    FilemonNameParam Dir;
    Dir.SourceFileName = (char *)malloc(256);
    strcpy(Dir.SourceFileName,Path);
    Dir.CacheFileName = NULL;
    if( !DeviceIoControl(SysHandle,bAdd?IOCTL_FILEMON_ADDPROTECTEDPATH:IOCTL_FILEMON_DELPROTECTEDPATH,
        &Dir,sizeof(FilemonNameParam),NULL,
        0,&nb,NULL) )
    {
        free(Dir.SourceFileName);
        return FALSE;
    }
    else{
        free(Dir.SourceFileName);
        return TRUE;
    }
}

BOOL GetProtectPath(HANDLE SysHandle,LPVOID LPOutBuffer,LPDWORD lpLen)
{
    DWORD length = 0;
    if( !DeviceIoControl(SysHandle,IOCTL_FILEMON_GETPROTECTEDPATH,
        NULL, 0, LPOutBuffer,LOGBUFSIZE,
        &length, NULL) )
    {
        return FALSE;
    }
    else{
        *lpLen = length;
        return TRUE;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE sysHandle;
    BeginMonitor(sysHandle);
   
    DWORD len = 0;
    char buf[256]={0};
   
   
    SetProtectPath(sysHandle,"d:\\wfpbs1.txt");
    SetProtectPath(sysHandle,"d:\\wfpbs2.txt");
    SetProtectPath(sysHandle,"d:\\wfpbs3.txt");

    GetProtectPath(sysHandle,buf,&len);
    printf("%s\n",buf);
    getch();
    return 0;
}

调用三次SetProtectPath都可以在驱动的case语句里面断点到。

但是调用最后一个的时候,就直接返回FALSE了,错误码是988。(没有进断点)
过一会就蓝屏了。

我才开始接触这个东西,麻烦指教。。。

最新回复

我曾经调式到蓝屏到一个notebook的硬盘坏掉 楼主小心了  详情 回复 发表于 2008-4-9 18:00
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
蓝屏的出错代码,dump等
用调试工具分析出错原因,然后单步调试
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我似乎发现了,char buf[256]={0}; 中的256
和 if( !DeviceIoControl(SysHandle,IOCTL_FILEMON_GETPROTECTEDPATH,
        NULL, 0, LPOutBuffer,LOGBUFSIZE,
        &length, NULL) )
中的LOGBUFSIZE(((ULONG)(64*0x400-(3*sizeof(ULONG)+1))) )的缘故。。。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
哈哈哈,恭喜楼主
还是内存错误
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
我曾经调式到蓝屏到一个notebook的硬盘坏掉

楼主小心了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表