亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adapter.c

?? ndis windows網(wǎng)絡(luò)驅(qū)動程序的范例
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if ( MediumArraySize == 0 && MediumArray[ 0 ] != AdapterInList->MediaType ) {

        return NDIS_STATUS_UNSUPPORTED_MEDIA;
    }

    *SelectedMediumIndex = MediumArraySize;

    //
    // save NDIS's handle to us
    //

    AdapterInList->IMNdisHandle = MiniportAdapterHandle;

    //
    // finish the initialization process by set our attributes
    //

    NdisMSetAttributesEx(MiniportAdapterHandle,
                         AdapterInList,
                         0,
                         NDIS_ATTRIBUTE_DESERIALIZE,
                         0);
                         
   	// mark the adapter as running
   AdapterInList->IMMPState = ADAPTER_STATE_RUNNING;

 
    return NDIS_STATUS_SUCCESS;

} // MPInitialize



PADAPTER
FindAdapterByInstanceNumber(
#if BINARY_COMPATIBLE
    CHAR InstanceNumber
#else
    WCHAR InstanceNumber
#endif
    )

/*++

Routine Description:

    Using the instance number, find the associated adapter struct. Up the
    adapter's ref count before leaving

Arguments:

    InstanceNumber - pointer to unicode char of instance number

Return Value:

    pointer to ADAPTER struct, otherwise NULL

--*/

{
    PLIST_ENTRY NextAdapter;
    PADAPTER AdapterInList;
#if BINARY_COMPATIBLE
    CHAR LastChar;
#else
    WCHAR LastChar;
#endif

    NdisAcquireSpinLock( &AdapterListLock );

    NextAdapter = AdapterList.Flink;
    while ( NextAdapter != &AdapterList ) {

        AdapterInList = CONTAINING_RECORD( NextAdapter, ADAPTER, Linkage );

#if BINARY_COMPATIBLE
        LastChar = *(((PCHAR)AdapterInList->IMDeviceName.Buffer) +
            AdapterInList->IMDeviceName.Length - 2);
#else
        LastChar = AdapterInList->IMDeviceName.Buffer[ ( AdapterInList->IMDeviceName.Length /
                                                         sizeof( WCHAR )) - 1];
#endif

        if ( InstanceNumber == LastChar ) {

            break;
        }

        NextAdapter = NextAdapter->Flink;
    }

    if ( NextAdapter != &AdapterList ) {

        NdisAcquireSpinLock( &AdapterInList->Lock );

        ++AdapterInList->RefCount;
        ImDbgOut( DBG_TRACE, DBG_REFCNTS, ("(%08X) +Adapter:k %2d\n",
                                           AdapterInList, AdapterInList->RefCount ));

        NdisReleaseSpinLock( &AdapterInList->Lock );
    } else {

        AdapterInList = NULL;
    }

    NdisReleaseSpinLock( &AdapterListLock );

    return AdapterInList;
}


PADAPTER
FindAdapterByName(
    PWCHAR AdapterName
    )

/*++

Routine Description:

    Using the name, find the associated adapter struct. Up the
    adapter's ref count before leaving

Arguments:

    AdapterName - pointer to unicode string version of adapter name

Return Value:

    pointer to ADAPTER struct, otherwise NULL

--*/

{
    PLIST_ENTRY NextAdapter;
    PADAPTER AdapterInList;
    ULONG NameLength = 0;
    PWCHAR pw = AdapterName;

    while ( *pw++ != 0  && NameLength < 64 ) {
        ++NameLength;
    }

    NameLength *= sizeof( WCHAR );

    NdisAcquireSpinLock( &AdapterListLock );

    NextAdapter = AdapterList.Flink;
    while ( NextAdapter != &AdapterList ) {

        AdapterInList = CONTAINING_RECORD( NextAdapter, ADAPTER, Linkage );

        if ( AdapterInList->IMDeviceName.Length == NameLength ) {

            if ( NdisEqualMemory(AdapterInList->IMDeviceName.Buffer,
                                 AdapterName,
                                 AdapterInList->IMDeviceName.Length)) {
                break;
            }
        }

        NextAdapter = NextAdapter->Flink;
    }

    if ( NextAdapter != &AdapterList ) {

        NdisAcquireSpinLock( &AdapterInList->Lock );

        ++AdapterInList->RefCount;
        ImDbgOut( DBG_TRACE, DBG_REFCNTS, ("(%08X) +Adapter:k %2d\n",
                                           AdapterInList, AdapterInList->RefCount ));

        NdisReleaseSpinLock( &AdapterInList->Lock );
    } else {

        AdapterInList = NULL;
    }

    NdisReleaseSpinLock( &AdapterListLock );

    return AdapterInList;
}


VOID
UnbindFromLowerMP(
	OUT	PNDIS_STATUS			Status,
	IN	NDIS_HANDLE				ProtocolBindingContext,
	IN	NDIS_HANDLE				UnbindContext
	)

/*++

Routine Description:

    Called by NDIS to indicate that an adapter is going away. Release our reference
    on the adapter and set the closing flag to true to prevent any further
    references from being obtained.

Arguments:

    See the DDK...

Return Values:

    None

--*/

{
    PADAPTER Adapter = (PADAPTER)ProtocolBindingContext;
    NDIS_STATUS LocalStatus;

    ImDbgOut(DBG_TRACE, DBG_PROTOCOL | DBG_INIT, ("(%08X) UnbindFromLowerMP\n", Adapter));

    IMStructAssert( Adapter );

    //
    // set the adapter to closing
    //

    NdisAcquireSpinLock( &Adapter->Lock );
    Adapter->IMMPState = ADAPTER_STATE_CLOSING;
    NdisReleaseSpinLock( &Adapter->Lock );

    //
    // deinit the IM miniport associated with the underlying MP
    //

    if ( Adapter->ShutdownMask & SHUTDOWN_DEINIT_DEV_INSTANCE ) {

        LocalStatus = NdisIMDeInitializeDeviceInstance( Adapter->IMNdisHandle );
        IMAssert( NT_SUCCESS( LocalStatus ));

        Adapter->ShutdownMask &= ~SHUTDOWN_DEINIT_DEV_INSTANCE;
    }

    //
    // Remember the UnbindContext so we can complete the unbinding explicitly.
    // Remove the reference on the adapter.
    //

    Adapter->BindContext = UnbindContext;

    DerefAdapter( Adapter );

    *Status = NDIS_STATUS_PENDING;

} // UnbindAdapter


VOID
DerefAdapter(
    PADAPTER Adapter
    )

/*++

Routine Description:

    Decrement the ref counter associated with this structure. When it goes to
    zero, close the adapter, and delete the memory associated with the struct

Arguments:

    Adapter - pointer to adapter context block

Return Value:

    number of references remaining associated with this structure

--*/

{
    LONG RefCount;

    IMStructAssert( Adapter );

    NdisAcquireSpinLock( &Adapter->Lock );
	
	if(Adapter->RefCount){
         RefCount = --Adapter->RefCount;
	    
    ImDbgOut( DBG_TRACE, DBG_REFCNTS, ("(%08X) -Adapter:a %2d\n", Adapter, Adapter->RefCount ));

    }
    
    if ( RefCount == 0 ) {

        CleanupAdapter( Adapter );
    } else {

        NdisReleaseSpinLock( &Adapter->Lock );
    }

    IMAssert ( RefCount >= 0 );
} // DerefAdapter


VOID
CleanupAdapter(
    PADAPTER Adapter
    )

/*++

Routine Description:

    All refs have been removed on this struct. Free its resources.

    Called with adapter lock HELD

Arguments:

    Adapter - pointer to adapter context block

Return Value:

    None

--*/

{
    NDIS_STATUS Status = NDIS_STATUS_SUCCESS;

    NdisReleaseSpinLock( &Adapter->Lock );

    //
    // set the adapter to closing. we may have gotten here during init failure
    // so we may not have previously set the state to closing
    //

    NdisAcquireSpinLock( &Adapter->Lock );
    Adapter->IMMPState = ADAPTER_STATE_CLOSING;
    NdisReleaseSpinLock( &Adapter->Lock );

      //
    // deinit the IM miniport associated with the underlying MP
    //

    if ( Adapter->ShutdownMask & SHUTDOWN_DEINIT_DEV_INSTANCE ) {

        Status = NdisIMDeInitializeDeviceInstance( Adapter->IMNdisHandle );
        IMAssert( NT_SUCCESS( Status ));
    }

    //
    // close the adapter. remainder of processing is done in the completion
    // routine
    //

    NdisCloseAdapter( &Status, Adapter->LowerMPHandle );
    IMAssert( NT_SUCCESS( Status ));

    if ( Status != NDIS_STATUS_PENDING ) {

        LowerMPCloseAdapterComplete( Adapter, Status );
    }
} // CleanupAdapter


VOID
LowerMPCloseAdapterComplete(
    IN  NDIS_HANDLE ProtocolBindingContext,
    IN  NDIS_STATUS Status
    )

/*++

Routine Description:

    Completion routine for NdisCloseAdapter. All that should be left is to free
    the pool associated with the structure

Arguments:

    See the DDK...

Return Values:

    None

--*/

{
    PADAPTER Adapter = (PADAPTER)ProtocolBindingContext;
    PSINGLE_LIST_ENTRY SListEntry;
    PNDIS_PACKET Packet;
    PNDIS_BUFFER NdisBuffer;
    PVOID SysBuffer;
    ULONG SysLength;
    PIM_BUFFER_CONTEXT BufContext;
    BOOLEAN TimerCancelled;

    ImDbgOut(DBG_TRACE, DBG_PROTOCOL, ("(%08X) LowerMPCloseAdapterComplete\n", Adapter));

    IMStructAssert( Adapter );

    IMAssert( NT_SUCCESS( Status ));

    //
    // complete the unbinding if necessary
    //

    if ( Adapter->BindContext ) {

        NdisCompleteUnbindAdapter( Adapter->BindContext, Status );
    }

    //
    // acquire the main adapter list lock and remove this entry
    //

    NdisAcquireSpinLock( &AdapterListLock );
    RemoveEntryList( &Adapter->Linkage );
    NdisReleaseSpinLock( &AdapterListLock );

    //
    // return packet pool resources
    //

    while ( SListEntry = NdisInterlockedPopEntrySList(&Adapter->PacketSList,
                                                      &Adapter->PacketSListLock)) {

        NdisFreePacket( CONTAINING_RECORD( SListEntry, NDIS_PACKET, ProtocolReserved ));
    }

    if ( Adapter->ShutdownMask & SHUTDOWN_DEALLOC_PACKET_POOL ) {

        NdisFreePacketPool( Adapter->PacketPoolHandle );
    }

    //
    // return lookahead buffer pool resources
    //

    while ( SListEntry = NdisInterlockedPopEntrySList(&Adapter->LookaheadSList,
                                                      &Adapter->LookaheadSListLock)) {

        BufContext = (PIM_BUFFER_CONTEXT)SListEntry;

        NdisAdjustBufferLength( BufContext->NdisBuffer, Adapter->LookaheadBufferSize );
        NdisFreeBuffer( BufContext->NdisBuffer );
        IMFreePool( BufContext );
    }

    if ( Adapter->ShutdownMask & SHUTDOWN_DEALLOC_LOOKAHEAD_POOL ) {

        NdisFreeBufferPool( Adapter->LookaheadPoolHandle );
    }

    //
    // same for residual buffer pool resources
    //

    while ( SListEntry = NdisInterlockedPopEntrySList(&Adapter->ResidualSList,
                                                      &Adapter->ResidualSListLock)) {

        BufContext = (PIM_BUFFER_CONTEXT)SListEntry;

        NdisAdjustBufferLength( BufContext->NdisBuffer, Adapter->TotalSize );
        NdisFreeBuffer( BufContext->NdisBuffer );
        IMFreePool( BufContext );
    }

    if ( Adapter->ShutdownMask & SHUTDOWN_DEALLOC_RESIDUAL_POOL ) {

        NdisFreeBufferPool( Adapter->ResidualPoolHandle );
    }

    //
    // free adapter lock from dispatcher DB and free mem for adapter struct
    //

    NdisFreeSpinLock( &Adapter->Lock );

    IMFreePool( Adapter );

} // LowerMPCloseAdapterComplete


VOID
CLUnloadProtocol(
    VOID
    )

/*++

Routine Description:

    Memphis checks to see if this defined for checked builds - sigh...

Arguments:

    None

Return Value:

    None

--*/

{

}


VOID
MPHalt(
	IN	NDIS_HANDLE				MiniportAdapterContext
	)

/*++

Routine Description:

    This handler is called on Memphis. It indicates that the IM MP is no more
    and we should avoid calling NdisIMDeInitializeDeviceInstance...

Arguments:

    See the DDK...

Return Values:

    None

--*/

{
    PADAPTER Adapter = (PADAPTER)MiniportAdapterContext;

    IMStructAssert( Adapter );

    ImDbgOut(DBG_TRACE, DBG_MINIPORT, ("(%08X) MPHalt\n", Adapter));

    Adapter->ShutdownMask &= ~SHUTDOWN_DEINIT_DEV_INSTANCE;
}

NDIS_STATUS
MPReset(
	OUT PBOOLEAN				AddressingReset,
	IN	NDIS_HANDLE				MiniportAdapterContext
	)

/*++

Routine Description:



Arguments:

    See the DDK...

Return Values:

    None

--*/

{
    PADAPTER Adapter = (PADAPTER)MiniportAdapterContext;

    IMStructAssert( Adapter );

    ImDbgOut(DBG_TRACE, DBG_MINIPORT, ("(%08X) MPReset\n", Adapter));

    *AddressingReset = FALSE;

#if BINARY_COMPATIBLE
#if DBG
    //
    // linker doesn't include the routine if no one is calling it. force some code to
    // be generated for it
    //

    {
        volatile INT A = 0;
        if ( A ) {
            DumpAdapter( Adapter );
        }
    }
#endif // DBG
#endif // BINARY_COMPATIBLE

    return NDIS_STATUS_SUCCESS;
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区三区| 91视视频在线观看入口直接观看www | 免费成人美女在线观看.| 日本一区二区三区视频视频| 欧美自拍偷拍午夜视频| 国产乱人伦偷精品视频免下载 | 国产精品你懂的在线| 666欧美在线视频| 成人a区在线观看| 麻豆精品在线观看| 亚洲综合一区在线| 中文字幕亚洲欧美在线不卡| 久久综合九色欧美综合狠狠 | 丰满岳乱妇一区二区三区| 午夜精品久久久| 亚洲三级免费电影| 国产女人18水真多18精品一级做| 7777精品伊人久久久大香线蕉完整版| 99热这里都是精品| 国产综合久久久久久久久久久久| 亚欧色一区w666天堂| 亚洲另类春色校园小说| 亚洲欧洲国产日本综合| 国产色产综合色产在线视频| 欧美一卡二卡在线| 欧美日韩在线观看一区二区 | 国产精品污网站| 日韩精品一区二区三区四区| 欧美肥妇free| 欧美日本在线视频| 欧美日韩在线一区二区| 欧美亚州韩日在线看免费版国语版| 国产69精品久久久久毛片 | 久久成人麻豆午夜电影| 首页国产丝袜综合| 午夜不卡av在线| 丝袜诱惑制服诱惑色一区在线观看| 夜夜嗨av一区二区三区网页| 玉足女爽爽91| 亚洲一级电影视频| 亚洲影视在线观看| 亚洲第一激情av| 亚洲成国产人片在线观看| 亚洲va欧美va天堂v国产综合| 亚洲免费资源在线播放| 亚洲最新视频在线播放| 亚洲精品一二三| 一区二区三区在线免费观看| 一区二区三区中文字幕精品精品| 亚洲欧美激情小说另类| 亚洲成精国产精品女| 日韩经典中文字幕一区| 理论电影国产精品| 国产精品系列在线播放| 成人av资源网站| 91成人在线免费观看| 在线电影国产精品| 精品日韩99亚洲| 欧美国产日韩亚洲一区| 亚洲视频1区2区| 一区二区三区欧美| 五月开心婷婷久久| 久久国产尿小便嘘嘘尿| 国产a久久麻豆| 色综合天天在线| 91精品国产免费| 久久久99精品久久| 一区二区三区在线免费| 日韩精品亚洲一区| 国产精品一区二区三区乱码| 99久久精品国产一区| 欧美私人免费视频| 欧美videos大乳护士334| 欧美国产综合一区二区| 亚洲国产日韩a在线播放性色| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精选一区二区三区| 色婷婷狠狠综合| 欧美一区二区精品久久911| 久久精品视频一区二区| 亚洲一区二区三区自拍| 精品一区二区三区在线播放视频| 99精品视频一区二区三区| 欧美三级电影精品| 久久久综合精品| 亚洲影院免费观看| 国产成人免费xxxxxxxx| 欧美色涩在线第一页| 久久精品人人做人人爽97| 亚洲综合999| 国产69精品久久久久毛片| 欧美狂野另类xxxxoooo| 中文字幕av一区二区三区| 亚洲国产精品久久久久秋霞影院 | 夫妻av一区二区| 欧美女孩性生活视频| 久久久91精品国产一区二区精品 | 成人激情免费视频| 欧美高清激情brazzers| 国产精品精品国产色婷婷| 蜜臂av日日欢夜夜爽一区| 一本一道波多野结衣一区二区| 日韩欧美亚洲一区二区| 亚洲国产精品一区二区尤物区| 国产a视频精品免费观看| 国产欧美视频一区二区| 日韩av电影天堂| 99精品热视频| 久久精品一区二区三区不卡牛牛| 亚洲超碰精品一区二区| 91香蕉视频mp4| 中文字幕精品一区 | 欧美视频完全免费看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91福利在线看| 国产精品乱人伦| 国产一区二区三区四区在线观看| 欧美日韩成人在线| 亚洲资源在线观看| 99国产精品一区| 久久精品欧美一区二区三区不卡 | 一区二区三区资源| 色综合天天在线| 国产亚洲欧美色| 国产乱对白刺激视频不卡| 26uuu久久天堂性欧美| 久久精品二区亚洲w码| 欧美一区二视频| 日韩国产高清在线| 欧美精品一卡两卡| 日日噜噜夜夜狠狠视频欧美人| 欧美日韩专区在线| 午夜私人影院久久久久| 欧美无砖砖区免费| 亚洲大片精品永久免费| 欧美日韩免费一区二区三区| 亚洲chinese男男1069| 欧美色图激情小说| 视频一区二区中文字幕| 宅男噜噜噜66一区二区66| 日韩电影一区二区三区四区| 欧美精品 国产精品| 秋霞午夜鲁丝一区二区老狼| 91精品国产免费久久综合| 日产精品久久久久久久性色| 51精品国自产在线| 美女网站一区二区| 精品乱人伦小说| 国产成人午夜片在线观看高清观看| 精品88久久久久88久久久| 国产久卡久卡久卡久卡视频精品| 欧美韩国日本综合| 99国产精品久久久久久久久久久| 亚洲免费观看高清完整 | 国产免费久久精品| av资源网一区| 午夜精品国产更新| 精品国产凹凸成av人导航| 国产成人精品一区二| 亚洲视频一二区| 欧美精品久久99| 国产精品99久| 亚洲精品久久久久久国产精华液 | 国产欧美精品一区| 色天天综合久久久久综合片| 婷婷综合另类小说色区| 精品国免费一区二区三区| 91一区在线观看| 一区二区三区美女视频| 欧美一区午夜精品| 国产91精品一区二区麻豆亚洲| 亚洲天堂中文字幕| 欧美一区二区网站| 风间由美一区二区av101| 一区二区三区不卡视频在线观看 | 久久99热国产| 中文字幕一区二区三| 91精品啪在线观看国产60岁| 国产激情偷乱视频一区二区三区| 亚洲另类在线视频| 精品国产1区二区| 91黄视频在线| 国产成人日日夜夜| 天堂一区二区在线| 亚洲国产精品高清| 欧美精品aⅴ在线视频| 不卡大黄网站免费看| 日韩高清电影一区| 1024精品合集| 欧美大片在线观看| 欧美综合一区二区| 国内成人免费视频| 午夜精品福利一区二区三区av| 久久精品人人做人人综合| 欧美精品久久天天躁| 91日韩在线专区| 国产精品 日产精品 欧美精品| 亚洲成人一二三| 自拍av一区二区三区| 久久九九99视频|