FltReadFile can support StreamFO?

In my postCreate:

PFILE_OBJECT streamFO;
streamFO=IoCreateStreamFileObjectLite(FltObjects->FileObject,NULL);
if (streamFO!=NULL)
{
LARGE_INTEGER offset;
ULONG bytesRead, length;
BYTE * pBuf=(BYTE*)ExAllocatePoolWithTag(NonPagedPool,4096,POOLTAG_TEMPTIME);
memset(pBuf,0,4096);
offset.QuadPart = bytesRead=0;
length=4096;

status=FltReadFile(FltObjects->Instance,
streamFO,
&offset,
length,
pBuf,
FLTFL_IO_OPERATION_NON_CACHED |
FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET,
&bytesRead,NULL,NULL);

}

It will BSOD in FltReadFile.
If I use FltObjects->FileObject in FltReadFile,it will OK.

Why?
And Can I use FltReadFile with a streamFO?

sorry,It’s my fault.
the stream fileobject by IoCreateStreamFileObjectLite is a empty fileobject,I must clone it by the original fileobject.
But I don’t konw how to clone a fileobject.

anybody can show it?thanks~~~

Can the following work?
In my PostCreate:
{
streamFO=IoCreateStreamFileObjectLite(FltObjects->FileObject,NULL);
initialize the streamFO(according to the article : Emerging Issues in IoCancelFileOpen );
call FltReissueSynchronousIo;
do some cached IO by the streamFO;
ObDeference(streamFO);
if (I will)
{
FltCancelFileOpen(FltObjects->FileObject);
handle the IoStatus;
return status;
}
else
{
return status;
}
}