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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? protocol.c

?? <Visual C++ 網絡程序設計實例詳解>配套源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    else
    {
        NdisReleaseSpinLock(&pAdapt->Lock);
    }
#ifndef WIN9X
    //
    // Check if we had called NdisIMInitializeDeviceInstanceEx and
    // we are awaiting a call to MiniportInitialize.
    //
    if (pAdapt->MiniportInitPending == TRUE)
    {
        //
        // Try to cancel the pending IMInit process.
        //
        LocalStatus = NdisIMCancelInitializeDeviceInstance(
                        DriverHandle,
                        &pAdapt->DeviceName);

        if (LocalStatus == NDIS_STATUS_SUCCESS)
        {
            //
            // Successfully cancelled IM Initialization; our
            // Miniport Initialize routine will not be called
            // for this device.
            //
            pAdapt->MiniportInitPending = FALSE;
            ASSERT(pAdapt->MiniportHandle == NULL);
        }
        else
        {
            //
            // Our Miniport Initialize routine will be called
            // (may be running on another thread at this time).
            // Wait for it to finish.
            //
            NdisWaitEvent(&pAdapt->MiniportInitEvent, 0);
            ASSERT(pAdapt->MiniportInitPending == FALSE);
        }

    }
#endif // !WIN9X

    //
    // Call NDIS to remove our device-instance. We do most of the work
    // inside the HaltHandler.
    //
    // The Handle will be NULL if our miniport Halt Handler has been called or
    // if the IM device was never initialized
    //
    
    if (pAdapt->MiniportHandle != NULL)
    {
        *Status = NdisIMDeInitializeDeviceInstance(pAdapt->MiniportHandle);

        if (*Status != NDIS_STATUS_SUCCESS)
        {
            *Status = NDIS_STATUS_FAILURE;
        }
    }
    else
    {
        //
        // We need to do some work here. 
        // Close the binding below us 
        // and release the memory allocated.
        //
        if(pAdapt->BindingHandle != NULL)
        {
            NdisResetEvent(&pAdapt->Event);

            NdisCloseAdapter(Status, pAdapt->BindingHandle);

            //
            // Wait for it to complete
            //
            if(*Status == NDIS_STATUS_PENDING)
            {
                 NdisWaitEvent(&pAdapt->Event, 0);
                 *Status = pAdapt->Status;
            }
            pAdapt->BindingHandle = NULL;
        }
        else
        {
            //
            // Both Our MiniportHandle and Binding Handle  should not be NULL.
            //
            *Status = NDIS_STATUS_FAILURE;
            ASSERT(0);
        }

        //
        //    Free the memory here, if was not released earlier(by calling the HaltHandler)
        //
   // BEGIN_PTUSERIO	
				
			// 移除協議對適配器的引用
			PtDerefAdapter(pAdapt);

// END_PTUSERIO
    }

    DBGPRINT(("<== PtUnbindAdapter: Adapt %p\n", pAdapt));
}

VOID
PtUnloadProtocol(
    VOID
)
{
    NDIS_STATUS Status;

    if (ProtHandle != NULL)
    {
        NdisDeregisterProtocol(&Status, ProtHandle);
        ProtHandle = NULL;
    }

    DBGPRINT(("PtUnloadProtocol: done!\n"));
}



VOID
PtCloseAdapterComplete(
    IN    NDIS_HANDLE            ProtocolBindingContext,
    IN    NDIS_STATUS            Status
    )
/*++

Routine Description:

    Completion for the CloseAdapter call.

Arguments:

    ProtocolBindingContext    Pointer to the adapter structure
    Status                    Completion status

Return Value:

    None.

--*/
{
    PADAPT      pAdapt =(PADAPT)ProtocolBindingContext;

    DBGPRINT(("CloseAdapterComplete: Adapt %p, Status %x\n", pAdapt, Status));
    pAdapt->Status = Status;
    NdisSetEvent(&pAdapt->Event);
}


VOID
PtResetComplete(
    IN  NDIS_HANDLE            ProtocolBindingContext,
    IN  NDIS_STATUS            Status
    )
/*++

Routine Description:

    Completion for the reset.

Arguments:

    ProtocolBindingContext    Pointer to the adapter structure
    Status                    Completion status

Return Value:

    None.

--*/
{

    UNREFERENCED_PARAMETER(ProtocolBindingContext);
    UNREFERENCED_PARAMETER(Status);
    //
    // We never issue a reset, so we should not be here.
    //
    ASSERT(0);
}


VOID
PtRequestComplete(
    IN  NDIS_HANDLE            ProtocolBindingContext,
    IN  PNDIS_REQUEST          NdisRequest,
    IN  NDIS_STATUS            Status
    )
/*++

Routine Description:

    Completion handler for the previously posted request. All OIDS
    are completed by and sent to the same miniport that they were requested for.
    If Oid == OID_PNP_QUERY_POWER then the data structure needs to returned with all entries =
    NdisDeviceStateUnspecified

Arguments:

    ProtocolBindingContext    Pointer to the adapter structure
    NdisRequest                The posted request
    Status                    Completion status

Return Value:

    None

--*/
{
    PADAPT        pAdapt = (PADAPT)ProtocolBindingContext;
    NDIS_OID      Oid = pAdapt->Request.DATA.SET_INFORMATION.Oid ;


// BEGIN_PTUSERIO

   if(NdisRequest != &(pAdapt->Request))
   {
	  DevRequestComplete(pAdapt, NdisRequest,Status);
      return;

   }
// END_PTUSERIO

    //
    // Since our request is not outstanding anymore
    //
    ASSERT(pAdapt->OutstandingRequests == TRUE);

    pAdapt->OutstandingRequests = FALSE;

    //
    // Complete the Set or Query, and fill in the buffer for OID_PNP_CAPABILITIES, if need be.
    //
    switch (NdisRequest->RequestType)
    {
      case NdisRequestQueryInformation:

        //
        // We never pass OID_PNP_QUERY_POWER down.
        //
        ASSERT(Oid != OID_PNP_QUERY_POWER);

        if ((Oid == OID_PNP_CAPABILITIES) && (Status == NDIS_STATUS_SUCCESS))
        {
            MPQueryPNPCapabilities(pAdapt, &Status);
        }
        *pAdapt->BytesReadOrWritten = NdisRequest->DATA.QUERY_INFORMATION.BytesWritten;
        *pAdapt->BytesNeeded = NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded;

        if ((Oid == OID_GEN_MAC_OPTIONS) && (Status == NDIS_STATUS_SUCCESS))
        {
            //
            // Remove the no-loopback bit from mac-options. In essence we are
            // telling NDIS that we can handle loopback. We don't, but the
            // interface below us does. If we do not do this, then loopback
            // processing happens both below us and above us. This is wasteful
            // at best and if Netmon is running, it will see multiple copies
            // of loopback packets when sniffing above us.
            //
            // Only the lowest miniport is a stack of layered miniports should
            // ever report this bit set to NDIS.
            //
            *(PULONG)NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer &= ~NDIS_MAC_OPTION_NO_LOOPBACK;
        }

        NdisMQueryInformationComplete(pAdapt->MiniportHandle,
                                      Status);
        break;

      case NdisRequestSetInformation:

        ASSERT( Oid != OID_PNP_SET_POWER);

        *pAdapt->BytesReadOrWritten = NdisRequest->DATA.SET_INFORMATION.BytesRead;
        *pAdapt->BytesNeeded = NdisRequest->DATA.SET_INFORMATION.BytesNeeded;
        NdisMSetInformationComplete(pAdapt->MiniportHandle,
                                    Status);
        break;

      default:
        ASSERT(0);
        break;
    }
    
}


VOID
PtStatus(
    IN  NDIS_HANDLE         ProtocolBindingContext,
    IN  NDIS_STATUS         GeneralStatus,
    IN  PVOID               StatusBuffer,
    IN  UINT                StatusBufferSize
    )
/*++

Routine Description:

    Status handler for the lower-edge(protocol).

Arguments:

    ProtocolBindingContext    Pointer to the adapter structure
    GeneralStatus             Status code
    StatusBuffer              Status buffer
    StatusBufferSize          Size of the status buffer

Return Value:

    None

--*/
{
    PADAPT      pAdapt = (PADAPT)ProtocolBindingContext;

    //
    // Pass up this indication only if the upper edge miniport is initialized
    // and powered on. Also ignore indications that might be sent by the lower
    // miniport when it isn't at D0.
    //
    if ((pAdapt->MiniportHandle != NULL)  &&
        (pAdapt->MPDeviceState == NdisDeviceStateD0) &&
        (pAdapt->PTDeviceState == NdisDeviceStateD0))    
    {
        if ((GeneralStatus == NDIS_STATUS_MEDIA_CONNECT) || 
            (GeneralStatus == NDIS_STATUS_MEDIA_DISCONNECT))
        {
            
            pAdapt->LastIndicatedStatus = GeneralStatus;
        }
        NdisMIndicateStatus(pAdapt->MiniportHandle,
                            GeneralStatus,
                            StatusBuffer,
                            StatusBufferSize);
    }
    //
    // Save the last indicated media status 
    //
    else
    {
        if ((pAdapt->MiniportHandle != NULL) && 
        ((GeneralStatus == NDIS_STATUS_MEDIA_CONNECT) || 
            (GeneralStatus == NDIS_STATUS_MEDIA_DISCONNECT)))
        {
            pAdapt->LatestUnIndicateStatus = GeneralStatus;
        }
    }
    
}


VOID
PtStatusComplete(
    IN NDIS_HANDLE            ProtocolBindingContext
    )
/*++

Routine Description:


Arguments:


Return Value:


--*/
{
    PADAPT      pAdapt = (PADAPT)ProtocolBindingContext;

    //
    // Pass up this indication only if the upper edge miniport is initialized
    // and powered on. Also ignore indications that might be sent by the lower
    // miniport when it isn't at D0.
    //
    if ((pAdapt->MiniportHandle != NULL)  &&
        (pAdapt->MPDeviceState == NdisDeviceStateD0) &&
        (pAdapt->PTDeviceState == NdisDeviceStateD0))    
    {
        NdisMIndicateStatusComplete(pAdapt->MiniportHandle);
    }
}


VOID
PtSendComplete(
    IN  NDIS_HANDLE            ProtocolBindingContext,
    IN  PNDIS_PACKET           Packet,
    IN  NDIS_STATUS            Status
    )
/*++

Routine Description:

    Called by NDIS when the miniport below had completed a send. We should
    complete the corresponding upper-edge send this represents.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷久久一区二区三区麻豆| 在线精品视频一区二区三四| 日韩精品一区二区三区视频| 99久久婷婷国产综合精品电影| 国产亚洲一区二区三区四区| 国产一区免费电影| 26uuu欧美| 国产乱码字幕精品高清av | 成人丝袜视频网| 久久午夜免费电影| 国产成人午夜电影网| 国产精品视频线看| eeuss鲁片一区二区三区| 国产精品不卡在线| 97se亚洲国产综合自在线| 亚洲欧美电影院| 欧美性猛交xxxx乱大交退制版| 亚洲一区二区三区四区在线免费观看 | 国产裸体歌舞团一区二区| 久久午夜老司机| 成人综合婷婷国产精品久久蜜臀| 国产精品网站导航| 91丨国产丨九色丨pron| 一区二区三区免费网站| 欧美日韩卡一卡二| 毛片av中文字幕一区二区| 精品国产第一区二区三区观看体验| 国产精一区二区三区| 国产欧美精品在线观看| 99在线精品视频| 夜夜嗨av一区二区三区网页| 欧美三级视频在线观看| 蜜臀av性久久久久蜜臀aⅴ| 精品国产麻豆免费人成网站| 国产69精品久久久久毛片| 亚洲品质自拍视频网站| 欧美乱熟臀69xxxxxx| 精品在线你懂的| 国产精品视频你懂的| 欧美在线免费视屏| 久久精品理论片| 国产精品不卡在线| 欧美性xxxxx极品少妇| 日韩激情在线观看| 久久久精品综合| 色八戒一区二区三区| 日韩av高清在线观看| 2024国产精品| jiyouzz国产精品久久| 午夜精品久久久久久不卡8050| 欧美大片在线观看| 成人午夜av电影| 亚洲综合在线视频| 精品日韩一区二区三区免费视频| 欧洲国内综合视频| 国产精品久久国产精麻豆99网站| 亚洲精品在线观| 精品在线播放午夜| 自拍偷拍亚洲综合| 日韩三级伦理片妻子的秘密按摩| 国产一区二区三区四区五区美女| 亚洲欧美aⅴ...| 日韩欧美国产wwwww| 成人久久18免费网站麻豆| 国产精品乱码久久久久久| 欧美亚洲一区二区在线观看| 极品少妇一区二区| 一区二区在线看| 日韩精品一区二区三区视频| 成人aa视频在线观看| 日韩福利视频导航| 国产精品美女一区二区三区| 欧美日韩黄色一区二区| 成人做爰69片免费看网站| 亚洲第一会所有码转帖| 国产午夜亚洲精品不卡| 欧美日韩亚洲另类| www.欧美色图| 乱一区二区av| 亚洲观看高清完整版在线观看| 精品国产亚洲在线| 91小视频免费观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲另类一区二区| 国产无一区二区| 欧美一区二区精品在线| 91年精品国产| 国产一区美女在线| 日韩黄色一级片| 亚洲人成网站在线| 国产日韩欧美电影| 欧日韩精品视频| 成人va在线观看| 久久精品国内一区二区三区| 亚洲成a人片综合在线| 国产精品国产三级国产a| 久久久久久免费网| 日韩午夜电影av| 欧美日韩国产精选| 色8久久人人97超碰香蕉987| 国产精品66部| 免费久久精品视频| 午夜在线成人av| 亚洲免费观看高清完整版在线观看| 国产女人aaa级久久久级| 精品国产青草久久久久福利| 欧美日韩国产区一| 欧美午夜在线观看| 91久久线看在观草草青青| www.av亚洲| 国产成人在线色| 国内精品视频一区二区三区八戒 | 日韩一区有码在线| 日日摸夜夜添夜夜添精品视频| 亚洲精品成人在线| 亚洲欧洲av在线| 国产精品全国免费观看高清| 国产视频一区二区在线| 久久亚洲影视婷婷| 精品国偷自产国产一区| 日韩欧美国产电影| 日韩美女天天操| 欧美一区二区福利在线| 欧美一区二区三区四区久久| 欧美精品一级二级三级| 欧美精品自拍偷拍动漫精品| 欧美日本在线视频| 宅男在线国产精品| 欧美一级日韩不卡播放免费| 91麻豆精品国产91久久久 | 国产精品色哟哟| 日日夜夜精品免费视频| 日本中文一区二区三区| 秋霞影院一区二区| 蜜乳av一区二区| 国内精品国产成人国产三级粉色| 激情小说亚洲一区| 久久精品国产精品亚洲红杏| 国内精品写真在线观看| 国产精品系列在线播放| 成人国产免费视频| 色噜噜狠狠色综合中国| 91国内精品野花午夜精品| 欧美系列在线观看| 91精品国产丝袜白色高跟鞋| 日韩精品在线一区二区| 久久精品亚洲乱码伦伦中文| 亚洲国产精品成人综合 | 久久综合久久99| 精品粉嫩aⅴ一区二区三区四区| 久久久另类综合| 中文字幕一区二区三| 一区二区三区高清不卡| 婷婷综合五月天| 激情综合色综合久久| 国产.欧美.日韩| 日本韩国视频一区二区| 欧美日本在线一区| 久久婷婷色综合| 国产精品成人免费精品自在线观看| 亚洲精品免费在线观看| 日日嗨av一区二区三区四区| 精品在线播放午夜| av高清久久久| 欧美绝品在线观看成人午夜影视| 日韩一级大片在线| 国产精品乱码一区二三区小蝌蚪| 一区二区三区四区国产精品| 亚洲国产乱码最新视频| 久久99国产精品久久99果冻传媒| 成人免费视频一区二区| 欧美三级资源在线| 欧美刺激午夜性久久久久久久| 欧美韩日一区二区三区| 亚洲制服丝袜在线| 精品中文字幕一区二区| 色综合久久综合网97色综合| 欧美一区二区播放| 久久久久久久久久久久电影 | 日韩欧美在线综合网| 国产欧美精品在线观看| 亚洲男人都懂的| 日韩精品视频网| av在线免费不卡| 欧美吻胸吃奶大尺度电影| 精品少妇一区二区三区日产乱码 | 国产精品久久午夜夜伦鲁鲁| 亚洲123区在线观看| 国产精品一品视频| 欧美一a一片一级一片| 日韩欧美国产电影| 亚洲男女毛片无遮挡| 久久精品国产久精国产| 一本到三区不卡视频| 欧美成人三级电影在线| 日韩美女视频一区| 九九**精品视频免费播放| 欧美在线你懂得| 国产亚洲精久久久久久| 亚洲第一搞黄网站|