NDIS 6 Filter Driver

Hi all,
I am developing a filter driver for my current project, which will filter the packet and block the packets according to user choice. I want to add some more functionality like Media connect status. But I am unable to do this. If i will use this code, my internet connection is disabling.
Below is my code…

VOID
FilterStatus(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_STATUS_INDICATION StatusIndication
)
/*++

Routine Description:

Indicate Status Handle

Arguments:

FilterModuleContext: Pointer to our filter
GeneralStatus:
StatusBuffer:
StatusBufferSize:

Return Value:

NONE
NOTE: called at <= DISPATCH_LEVEL

FILTER driver may call NdisFIndicateStatus to generate status indication to all higher layer modules.

–*/
{
PMS_FILTER pFilter = (PMS_FILTER)FilterModuleContext;
#if DBG
BOOLEAN bFalse = FALSE;
#endif
NDIS_MEDIA_CONNECT_STATE connectState;
NDIS_LINK_STATE state;
NdisZeroMemory(&connectState, sizeof(connectState));
NdisZeroMemory(&state, sizeof(state));

state.Header.Revision = NDIS_LINK_STATE_REVISION_1;
state.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
state.Header.Size = NDIS_SIZEOF_LINK_STATE_REVISION_1;
state.MediaConnectState = connectState;
state.MediaDuplexState = MediaDuplexStateFull;
state.PauseFunctions = NdisPauseFunctionsUnsupported;

StatusIndication->Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION;
StatusIndication->Header.Revision = NDIS_STATUS_INDICATION_REVISION_1;
StatusIndication->Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1;
StatusIndication->SourceHandle = pContext->MiniportHandle;
StatusIndication->StatusCode = NDIS_STATUS_LINK_STATE;
StatusIndication->StatusBuffer = &state;
StatusIndication->StatusBufferSize = sizeof(state);
if (state.MediaConnectState == NDIS_STATUS_MEDIA_CONNECT)
{
DbgPrint(“Media Connected”);
}
else if (state.MediaConnectState == NDIS_STATUS_MEDIA_DISCONNECT)
{
DbgPrint(“Media Connected”);
}
else
DbgPrint(“Unknown”);

DEBUGP(DL_TRACE, (“===>FilterStaus, IndicateStatus = %8x.\n”, StatusIndication->StatusCode));

#if DBG
FILTER_ACQUIRE_LOCK(&pFilter->Lock, bFalse);
ASSERT(pFilter->bIndicating == FALSE);
pFilter->bIndicating = TRUE;
FILTER_RELEASE_LOCK(&pFilter->Lock, bFalse);
#endif

// Now, No status need to handle by the filter. May get one later
//
NdisFIndicateStatus(pFilter->FilterHandle, StatusIndication);

#if DBG
FILTER_ACQUIRE_LOCK(&pFilter->Lock, bFalse);
ASSERT(pFilter->bIndicating == TRUE);
pFilter->bIndicating = FALSE;

FILTER_RELEASE_LOCK(&pFilter->Lock, bFalse);

#endif

DEBUGP(DL_TRACE, (“<===FilterStaus.\n”));

}