looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
阅读:2905回复:8

如何加锁、等锁、解锁文件 ?

楼主#
更多 发布于:2007-05-19 17:04
我的Filter在Create之后需要 读、写 文件的内容,在单线程的情况没有问题
在Create之后得到FileObject然后发Irp去Read、Write

但是我的测试程序一旦发起的线程多了,读写就会返回STATUS_FILE_LOCK_CONFLICT 。有时几十个线程可以,有时几个线程就不行,有时上百个线程才不行,没有规律

我的应用层测试程序
for(int i=0;i < nThreadNum;i++)
{
    ....
    _beginthreadex(NULL , 0 , TestThread , context , 0 , &uThreadID);
}

unsigned __stdcall TestThread(LPVOID pParam)
{
    .......
    if (!WriteFile(...))
    {
        ......
    }
    ......
}


搜索了所有我能搜索的网站,OSR上说可以用Map的方式去读,可是还要写,不知道该怎么办
提问归提问,还是只能靠自己
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-19 22:06
换句话来问:

1.如何等待正在被其他线程(IRP)锁定的文件解除锁定 ?

2.如何将一个文件进行锁定让其他线程(IRP)等待我的读写完成 ?

谢谢指导 !
提问归提问,还是只能靠自己
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-21 17:23
顶起来,就是字节锁的原因,但如何等待解锁呢  ?
提问归提问,还是只能靠自己
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-26 19:29
谢谢 michaelgz

 文件驱动和过滤驱动的开发都是 陷阱式 的,从这个坑跳到那个坑
提问归提问,还是只能靠自己
游客

返回顶部