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

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

?? miniport.c

?? NDIS Intermediate Driver
?? C
?? 第 1 頁 / 共 3 頁
字號:
Routine Description:
    This routine does all the procssing for a request with a SetPower Oid
    The miniport shoud accept  the Set Power and transition to the new state

    The Set Power should not be passed to the miniport below

    If the IM miniport is going into a low power state, then there is no guarantee if it will ever
    be asked go back to D0, before getting halted. No requests should be pended or queued.

    
Arguments:
    pNdisStatus           - Status of the operation
    pAdapt                - The Adapter structure
    InformationBuffer     - The New DeviceState
    InformationBufferLength
    BytesRead             - No of bytes read
    BytesNeeded           -  No of bytes needed


Return Value:
    Status  - NDIS_STATUS_SUCCESS if all the wait events succeed.

--*/
{

    
    NDIS_DEVICE_POWER_STATE NewDeviceState;

    DBGPRINT(("==>MPProcessSetPowerOid: Adapt %p\n", pAdapt)); 

    ASSERT (InformationBuffer != NULL);

    *pNdisStatus = NDIS_STATUS_FAILURE;

    do 
    {
        //
        // Check for invalid length
        //
        if (InformationBufferLength < sizeof(NDIS_DEVICE_POWER_STATE))
        {
            *pNdisStatus = NDIS_STATUS_INVALID_LENGTH;
            break;
        }

        NewDeviceState = (*(PNDIS_DEVICE_POWER_STATE)InformationBuffer);

        //
        // Check for invalid device state
        //
        if ((pAdapt->MPDeviceState > NdisDeviceStateD0) && (NewDeviceState != NdisDeviceStateD0))
        {
            //
            // If the miniport is in a non-D0 state, the miniport can only receive a Set Power to D0
            //
            ASSERT (!(pAdapt->MPDeviceState > NdisDeviceStateD0) && (NewDeviceState != NdisDeviceStateD0));

            *pNdisStatus = NDIS_STATUS_FAILURE;
            break;
        }    

        //
        // Is the miniport transitioning from an On (D0) state to an Low Power State (>D0)
        // If so, then set the StandingBy Flag - (Block all incoming requests)
        //
        if (pAdapt->MPDeviceState == NdisDeviceStateD0 && NewDeviceState > NdisDeviceStateD0)
        {
            pAdapt->StandingBy = TRUE;
        }

        //
        // If the miniport is transitioning from a low power state to ON (D0), then clear the StandingBy flag
        // All incoming requests will be pended until the physical miniport turns ON.
        //
        if (pAdapt->MPDeviceState > NdisDeviceStateD0 &&  NewDeviceState == NdisDeviceStateD0)
        {
            pAdapt->StandingBy = FALSE;
        }
        
        //
        // Now update the state in the pAdapt structure;
        //
        pAdapt->MPDeviceState = NewDeviceState;
        
        *pNdisStatus = NDIS_STATUS_SUCCESS;
    

    } while (FALSE);    
        
    if (*pNdisStatus == NDIS_STATUS_SUCCESS)
    {
        //
        // The miniport resume from low power state
        // 
        if (pAdapt->StandingBy == FALSE)
        {
            //
            // If we need to indicate the media connect state
            // 
            if (pAdapt->LastIndicatedStatus != pAdapt->LatestUnIndicateStatus)
            {
               NdisMIndicateStatus(pAdapt->MiniportHandle,
                                        pAdapt->LatestUnIndicateStatus,
                                        (PVOID)NULL,
                                        0);
               NdisMIndicateStatusComplete(pAdapt->MiniportHandle);
               pAdapt->LastIndicatedStatus = pAdapt->LatestUnIndicateStatus;
            }
        }
        else
        {
            //
            // Initialize LatestUnIndicatedStatus
            //
            pAdapt->LatestUnIndicateStatus = pAdapt->LastIndicatedStatus;
        }
        *BytesRead = sizeof(NDIS_DEVICE_POWER_STATE);
        *BytesNeeded = 0;
    }
    else
    {
        *BytesRead = 0;
        *BytesNeeded = sizeof (NDIS_DEVICE_POWER_STATE);
    }

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


VOID
MPReturnPacket(
    IN NDIS_HANDLE             MiniportAdapterContext,
    IN PNDIS_PACKET            Packet
    )
/*++

Routine Description:

    NDIS Miniport entry point called whenever protocols are done with
    a packet that we had indicated up and they had queued up for returning
    later.

Arguments:

    MiniportAdapterContext    - pointer to ADAPT structure
    Packet    - packet being returned.

Return Value:

    None.

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

#ifdef NDIS51
    //
    // Packet stacking: Check if this packet belongs to us.
    //
    if (NdisGetPoolFromPacket(Packet) != pAdapt->RecvPacketPoolHandle)
    {
        //
        // We reused the original packet in a receive indication.
        // Simply return it to the miniport below us.
        //
        NdisReturnPackets(&Packet, 1);
    }
    else
#endif // NDIS51
    {
        //
        // This is a packet allocated from this IM's receive packet pool.
        // Reclaim our packet, and return the original to the driver below.
        //

        PNDIS_PACKET    MyPacket;
        PRECV_RSVD      RecvRsvd;
    
        RecvRsvd = (PRECV_RSVD)(Packet->MiniportReserved);
        MyPacket = RecvRsvd->OriginalPkt;
    
        NdisFreePacket(Packet);
        NdisReturnPackets(&MyPacket, 1);
    }
}


NDIS_STATUS
MPTransferData(
    OUT PNDIS_PACKET            Packet,
    OUT PUINT                   BytesTransferred,
    IN NDIS_HANDLE              MiniportAdapterContext,
    IN NDIS_HANDLE              MiniportReceiveContext,
    IN UINT                     ByteOffset,
    IN UINT                     BytesToTransfer
    )
/*++

Routine Description:

    Miniport's transfer data handler.

Arguments:

    Packet                    Destination packet
    BytesTransferred          Place-holder for how much data was copied
    MiniportAdapterContext    Pointer to the adapter structure
    MiniportReceiveContext    Context
    ByteOffset                Offset into the packet for copying data
    BytesToTransfer           How much to copy.

Return Value:

    Status of transfer

--*/
{
    PADAPT        pAdapt = (PADAPT)MiniportAdapterContext;
    NDIS_STATUS   Status;

    //
    // Return, if the device is OFF
    //

    if (IsIMDeviceStateOn(pAdapt) == FALSE)
    {
        return NDIS_STATUS_FAILURE;
    }

    NdisTransferData(&Status,
                     pAdapt->BindingHandle,
                     MiniportReceiveContext,
                     ByteOffset,
                     BytesToTransfer,
                     Packet,
                     BytesTransferred);

    return(Status);
}

VOID
MPHalt(
    IN NDIS_HANDLE                MiniportAdapterContext
    )
/*++

Routine Description:

    Halt handler. All the hard-work for clean-up is done here.

Arguments:

    MiniportAdapterContext    Pointer to the Adapter

Return Value:

    None.

--*/
{
    PADAPT             pAdapt = (PADAPT)MiniportAdapterContext;
    NDIS_STATUS        Status;
    PADAPT            *ppCursor;

    DBGPRINT(("==>MiniportHalt: Adapt %p\n", pAdapt));

    //
    // Remove this adapter from the global list
    //
    NdisAcquireSpinLock(&GlobalLock);

    for (ppCursor = &pAdaptList; *ppCursor != NULL; ppCursor = &(*ppCursor)->Next)
    {
        if (*ppCursor == pAdapt)
        {
            *ppCursor = pAdapt->Next;
            break;
        }
    }

    NdisReleaseSpinLock(&GlobalLock);

    //
    // Delete the ioctl interface that was created when the miniport
    // was created.
    //
    (VOID)PtDeregisterDevice();

    //
    // If we have a valid bind, close the miniport below the protocol
    //
    if (pAdapt->BindingHandle != NULL)
    {
        //
        // Close the binding below. and wait for it to complete
        //
        NdisResetEvent(&pAdapt->Event);

        NdisCloseAdapter(&Status, pAdapt->BindingHandle);

        if (Status == NDIS_STATUS_PENDING)
        {
            NdisWaitEvent(&pAdapt->Event, 0);
            Status = pAdapt->Status;
        }

        ASSERT (Status == NDIS_STATUS_SUCCESS);

        pAdapt->BindingHandle = NULL;
    }

    //
    //  Free all resources on this adapter structure.
    //
    MPFreeAllPacketPools (pAdapt);
    NdisFreeSpinLock(&pAdapt->Lock);
    NdisFreeMemory(pAdapt, 0, 0);

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


#ifdef NDIS51_MINIPORT

VOID
MPCancelSendPackets(
    IN NDIS_HANDLE            MiniportAdapterContext,
    IN PVOID                  CancelId
    )
/*++

Routine Description:

    The miniport entry point to handle cancellation of all send packets
    that match the given CancelId. If we have queued any packets that match
    this, then we should dequeue them and call NdisMSendComplete for all
    such packets, with a status of NDIS_STATUS_REQUEST_ABORTED.

    We should also call NdisCancelSendPackets in turn, on each lower binding
    that this adapter corresponds to. This is to let miniports below cancel
    any matching packets.

Arguments:

    MiniportAdapterContext    - pointer to ADAPT structure
    CancelId    - ID of packets to be cancelled.

Return Value:

    None

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

    //
    // If we queue packets on our adapter structure, this would be 
    // the place to acquire a spinlock to it, unlink any packets whose
    // Id matches CancelId, release the spinlock and call NdisMSendComplete
    // with NDIS_STATUS_REQUEST_ABORTED for all unlinked packets.
    //

    //
    // Next, pass this down so that we let the miniport(s) below cancel
    // any packets that they might have queued.
    //
    NdisCancelSendPackets(pAdapt->BindingHandle, CancelId);

    return;
}

VOID
MPDevicePnPEvent(
    IN NDIS_HANDLE              MiniportAdapterContext,
    IN NDIS_DEVICE_PNP_EVENT    DevicePnPEvent,
    IN PVOID                    InformationBuffer,
    IN ULONG                    InformationBufferLength
    )
/*++

Routine Description:

    This handler is called to notify us of PnP events directed to
    our miniport device object.

Arguments:

    MiniportAdapterContext    - pointer to ADAPT structure
    DevicePnPEvent - the event
    InformationBuffer - Points to additional event-specific information
    InformationBufferLength - length of above

Return Value:

    None
--*/
{
    // TBD - add code/comments about processing this.

    UNREFERENCED_PARAMETER(MiniportAdapterContext);
    UNREFERENCED_PARAMETER(DevicePnPEvent);
    UNREFERENCED_PARAMETER(InformationBuffer);
    UNREFERENCED_PARAMETER(InformationBufferLength);
    
    return;
}

VOID
MPAdapterShutdown(
    IN NDIS_HANDLE                MiniportAdapterContext
    )
/*++

Routine Description:

    This handler is called to notify us of an impending system shutdown.

Arguments:

    MiniportAdapterContext    - pointer to ADAPT structure

Return Value:

    None
--*/
{
    UNREFERENCED_PARAMETER(MiniportAdapterContext);
    
    return;
}

#endif


VOID
MPFreeAllPacketPools(
    IN PADAPT                    pAdapt
    )
/*++

Routine Description:

    Free all packet pools on the specified adapter.
    
Arguments:

    pAdapt    - pointer to ADAPT structure

Return Value:

    None

--*/
{
    if (pAdapt->RecvPacketPoolHandle != NULL)
    {
        //
        // Free the packet pool that is used to indicate receives
        //
        NdisFreePacketPool(pAdapt->RecvPacketPoolHandle);

        pAdapt->RecvPacketPoolHandle = NULL;
    }

    if (pAdapt->SendPacketPoolHandle != NULL)
    {

        //
        //  Free the packet pool that is used to send packets below
        //

        NdisFreePacketPool(pAdapt->SendPacketPoolHandle);

        pAdapt->SendPacketPoolHandle = NULL;

    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线网| 日韩国产精品大片| 亚洲一二三四在线观看| 亚洲成人精品在线观看| 久久99国产精品久久99果冻传媒| 国产一二精品视频| 99精品桃花视频在线观看| 欧美另类变人与禽xxxxx| 精品久久五月天| 亚洲天天做日日做天天谢日日欢| 日韩精品欧美精品| 国产传媒一区在线| 在线观看不卡视频| 裸体健美xxxx欧美裸体表演| 国产精品一区免费在线观看| 一本大道久久a久久综合婷婷| 欧美体内she精高潮| 亚洲精品在线观| 亚洲一区二区偷拍精品| 国产成人自拍在线| 欧美另类videos死尸| 久久久精品tv| 五月激情综合婷婷| 北岛玲一区二区三区四区| 7777精品伊人久久久大香线蕉 | 男女视频一区二区| 成人深夜福利app| 日韩视频免费观看高清完整版 | 色偷偷成人一区二区三区91| 精品欧美一区二区久久| 亚洲狠狠丁香婷婷综合久久久| 蜜臀久久久久久久| 一本久久综合亚洲鲁鲁五月天| 精品国产伦一区二区三区观看体验| 亚洲欧美日韩中文播放 | 久久久国产精华| 性感美女极品91精品| 成人免费高清在线| 日韩免费视频一区二区| 亚洲第一在线综合网站| proumb性欧美在线观看| 日韩精品中文字幕在线一区| 亚洲午夜私人影院| eeuss国产一区二区三区| 欧美岛国在线观看| 午夜不卡av免费| 91在线小视频| 精品国产乱码久久久久久闺蜜| 一区二区三区日韩欧美| 成人av资源网站| 国产女人aaa级久久久级| 久久66热re国产| 91麻豆精品国产自产在线| 亚洲一区二区三区不卡国产欧美| 99久久久无码国产精品| 日本一区二区三区电影| 精品一区二区影视| 91.麻豆视频| 亚洲国产一区二区三区 | 亚洲成人动漫精品| 91免费看`日韩一区二区| 日本一区二区免费在线观看视频| 麻豆专区一区二区三区四区五区| 欧美日韩激情一区| 亚洲成人av免费| 精品婷婷伊人一区三区三| 一区二区在线免费观看| 国产美女在线精品| 久久久久久9999| 国产精品自拍三区| 久久久久久久久伊人| 国产精品一区不卡| 久久精品一二三| 国产成人亚洲综合a∨婷婷| 国产香蕉久久精品综合网| 国产成人亚洲精品狼色在线| 欧美国产日韩a欧美在线观看 | 亚洲欧美日韩国产综合在线| www.欧美色图| 亚洲色图另类专区| 日本道免费精品一区二区三区| 一区二区三区免费观看| 欧美丝袜第三区| 午夜久久久影院| 日韩女优毛片在线| 国产精品一二三| 亚洲欧洲美洲综合色网| 91美女片黄在线观看| 夜夜爽夜夜爽精品视频| 91精品蜜臀在线一区尤物| 麻豆久久久久久| 国产欧美一区二区精品忘忧草| 粉嫩av亚洲一区二区图片| 国产精品久久久久7777按摩| 91亚洲精华国产精华精华液| 亚洲激情图片一区| 7777女厕盗摄久久久| 国产一区二区电影| 国产精品色噜噜| 在线欧美日韩国产| 麻豆一区二区三| 国产精品久久久久久久裸模| 一本在线高清不卡dvd| 污片在线观看一区二区| 欧美成人国产一区二区| 高清shemale亚洲人妖| 一区二区三区中文在线观看| 在线成人免费观看| 国产寡妇亲子伦一区二区| 成人免费在线观看入口| 51久久夜色精品国产麻豆| 国产一区二区0| 亚洲影院理伦片| 精品毛片乱码1区2区3区| 99国产精品一区| 免费在线看成人av| 国产网红主播福利一区二区| 亚洲精品老司机| 久久免费偷拍视频| 久久亚洲欧美国产精品乐播| 亚洲午夜三级在线| 国产福利精品一区| 久久久久国产精品麻豆ai换脸| 成人免费观看视频| 中文字幕亚洲欧美在线不卡| 日本大香伊一区二区三区| 日本最新不卡在线| 久久久噜噜噜久久中文字幕色伊伊| 日本aⅴ亚洲精品中文乱码| 欧美色爱综合网| 国产精品66部| 午夜精品一区二区三区免费视频| 久久精品亚洲国产奇米99| 欧美在线不卡视频| 国产福利精品导航| 日本成人在线视频网站| 国产精品福利电影一区二区三区四区| 欧美男女性生活在线直播观看| 国产河南妇女毛片精品久久久| 午夜久久久影院| 中文字幕一区二区三区色视频| 欧美一区二区三区公司| 91污片在线观看| 激情久久五月天| 视频一区在线视频| 中文字幕一区av| 精品成人一区二区三区| 欧美日韩国产一区二区三区地区| 国产一区二区视频在线| 日韩成人伦理电影在线观看| 亚洲男女毛片无遮挡| 国产欧美一区二区三区在线看蜜臀 | 狠狠色丁香婷综合久久| 五月激情综合网| 亚洲免费资源在线播放| 国产精品私人影院| 亚洲精品一区二区三区蜜桃下载| 欧美精品久久天天躁| 色婷婷av久久久久久久| 99久久婷婷国产精品综合| 国产成a人亚洲精品| 美女性感视频久久| 午夜成人免费电影| 一区二区三区成人在线视频| 亚洲欧美一区二区三区久本道91| 日本一区二区三区高清不卡| 2017欧美狠狠色| 日韩一区二区免费在线电影 | 亚洲动漫第一页| 一区二区三区四区不卡在线| 国产精品久久久久影院色老大| 亚洲精品在线三区| 精品欧美黑人一区二区三区| 欧美大片一区二区| 欧美videossexotv100| 欧美一卡二卡三卡四卡| 欧美一区二区三区视频免费 | 麻豆精品在线播放| 青青草97国产精品免费观看| 婷婷久久综合九色综合绿巨人 | 日本欧美加勒比视频| 中文字幕中文字幕中文字幕亚洲无线| 日韩精品一区二| 欧美一区二区三区在线| 欧美日韩三级一区二区| 91激情在线视频| 9人人澡人人爽人人精品| 懂色av噜噜一区二区三区av| 国内精品伊人久久久久av一坑| 三级久久三级久久久| 亚洲成人动漫精品| 视频一区国产视频| 蜜桃一区二区三区四区| 韩国中文字幕2020精品| 国产网红主播福利一区二区| 久久蜜桃av一区精品变态类天堂 | 国产真实乱子伦精品视频| 国内精品国产成人国产三级粉色 | 最新热久久免费视频| 一区二区三区加勒比av|