прочитал "Q55 I see the user close the file. My filter receives an IRP_MJ_CLEANUP. But I never see the IRP_MJ_CLOSE? Why not?"
есть два счетчика HandleCount <= PointerCount
IRP_MJ_CLOSE — приходит для уменьшения HandleCount ?
IRP_MJ_CLEANUP — приходит когда ? когда PointerCount уменьшается или уже равен нулю ?
соответственно после прихода IRP_MJ_CLEANUP файл закрыт ?
если HandleCount <= PointerCount, то для определения момента закрытия файла надо перехватывать IRP_MJ_CLEANUP а не IRP_MJ_CLOSE ?