Does anyone know this deletefile bug?

I have a file system filter driver that works with resparse point file. It
also work to delete the reparse point file. However it will not pass the
following case.

while(loop)
{
create reparse point file
delete reparse point file
}

What my driver did is to save the file object in the queue when the file
system returned my reparse point file. When I/O manager passed
IRP_MJ_CLEANCLOSE with delete pending flag, my driver will open the reparse
point file and delete it. It will random fail in the create reparse point
file because the reprse point file does not delete. If I cahneg the reparse
point file with regular file, it works perfect. When I print out the message
in IRP_MJ_CLEANCLOSE with delete pending flag, it is always called by the
I/O manager. However in the reparse point case, randomly I/O manager will
not send the IRP_MJ_CLEANCLOSE function to my driver. Following is the print
out of the message of my driver at the time it fais.

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83f10930
SCFilter!SCSetDisposition: Delete Fileobj=83f10930
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=842c5880
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=842c5880
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=842c5880
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=842c5880
SCFilter!SCSetDisposition: Delete Fileobj=842fc930

SCFilter!Reparse file close with delete flag: 1355

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83f10930

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83f10930
SCFilter!SCSetDisposition: Delete Fileobj=83f10930
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=8412a5a8
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=8412a5a8
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=8412a5a8
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=8412a5a8
SCFilter!SCSetDisposition: Delete Fileobj=842c5880

SCFilter!Reparse file close with delete flag: 1356

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83f10930

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83f10930
SCFilter!SCSetDisposition: Delete Fileobj=83f10930
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83db5a30
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=83db5a30
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83db5a30
SCFilter!Open Reparse Point Error return Error=c0000056, Deviceobj=83dd1e88,
Fil
eobj=83db5a30
SCFilter!SCSetDisposition: Delete Fileobj=8412a5a8

SCFilter!Reparse file close with delete flag: 1357

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83f10930

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83f10930
SCFilter!SCSetDisposition: Delete Fileobj=842c5880
SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=8412a5a8

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=8412a5a8

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83d761c0

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83d761c0

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83d761c0

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83d761c0

SCFilter!Open Reparse point return Deviceobj=84285cf8 Fileobj=83d761c0

SCFilter!Reparse file close: DeviceObj=83dd1e88, Fileobj=83d761c0

SCFilter!SCSetDisposition: Delete Fileobj=84256c30
SCFilter!SCSetDisposition: Delete Fileobj=83cc8f90
SCFilter!SCSetDisposition: Delete Fileobj=83cc8f90
SCFilter!SCSetDisposition: Delete Fileobj=83cc8f90
SCFilter!SCSetDisposition: Delete Fileobj=83c967e8
SCFilter!SCSetDisposition: Delete Fileobj=83c967e8
SCFilter!SCSetDisposition: Delete Fileobj=84258028
SCFilter!SCSetDisposition: Delete Fileobj=84258028
SCFilter!SCSetDisposition: Delete Fileobj=84258028
SCFilter!SCSetDisposition: Delete Fileobj=84258028
SCFilter!SCSetDisposition: Delete Fileobj=83f5bc88

In the print out you can see the normal case after each open reparse point;
it will come with the file disposition with delete flag and come with
cleanclose with delete pending flag. But after print out the cleanclose with
delete pending count #1357; the first open reparse point file does not
follow with the file disposition with delete flag and cleanclose with delete
pending flag for the file object. Does any one see this problem before?
Microsoft’s developer please check this case for me. Thanks.

fc