BAD_POOL_CALLER

Hi,
I am getting blue screen BAD_POOL_CALLER , Parameter -7 .

I get it that it is due to to freeing a memory which is already freed.
I the line which gives BAD_POOL_CALLER is a unicode string getting freed (
Memory getting freed).
Though the comments in the debugger show that it does get initialised first
and gives no clear reason that it is freed already and by whom.
As per my code it gets initialised many times and gets freed many times with
no error proved by the Debug Prints.
But at a random time after getting initialised the freeing statement gives a
bug check of C2 parameter -7 .

Some how I cant put Driver verifier on my driver
Verifying on other drivers like NTFS.SYS gives no clear solutions.

Is there any way wehere I can get to know if this Unicode memory is already
freed and do not free it then
. Checking the "if buffer exists " : code used my me (as shown below ) Does
not help.

// where tempA is the unicode string
if(tempA.Buffer)
{
DbgPrint(“\nCR:Free Memory :tempA.Buffer”);
ExFreePoolWithTag(tempA.Buffer,‘pmoC’);
}

But the dought also arises as how is temp tempA memory getting freed after
all and by Whom? . If its some other driver , can I some how lock it so that
it is freed by my driver only.

Let me know if more Info from my side is needed.

regards
anurag