ObDereferenceObject() blocks in MiniportHalt()??

Hi:
I can’t manually unload my ndis miniport driver over serial port.(my system is win2k).

Here is a piece of code:

RtlInitUnicodeString(&ObjectName,L"\Device\Serial0");
IoGetDeviceObjectPointer(&ObjectName,FILE_ALL_ACCESS,
&pAdapter->pSerialFileObject,
&pAdapter->pSerialDeviceObject);

in MiniportHalt()

if(pAdapter->pSerialFileObject)
ObDereferenceObject(pAdapter->pSerialFileObject);<-----driver blocks here

I can reboot normally unless I attempt to unload/disable it mannually.

Why?

Best Regards.
Paul