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

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

?? miniport.c

?? <Visual C++ 網(wǎng)絡(luò)程序設(shè)計實例詳解>配套源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
MPProcessSetPowerOid(
    IN OUT PNDIS_STATUS          pNdisStatus,
    IN PADAPT                    pAdapt,
    IN PVOID                     InformationBuffer,
    IN ULONG                     InformationBufferLength,
    OUT PULONG                   BytesRead,
    OUT PULONG                   BytesNeeded
    )
/*++

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.
    //
	
// BEGIN_PTUSERIO	
				
			// 移除對適配器的引用
			PtDerefAdapter(pAdapt);

// END_PTUSERIO

    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一区二区三区免费野_久草精品视频
日本一区二区综合亚洲| 在线观看91av| 亚洲国产高清不卡| 国产福利91精品一区| 国产精品麻豆欧美日韩ww| 成人小视频在线| 亚洲欧美日韩一区二区三区在线观看| av一区二区三区黑人| 国产精品网站在线播放| 91首页免费视频| 亚洲mv在线观看| 精品国产第一区二区三区观看体验 | 欧洲精品在线观看| 日韩精品一二三四| 久久久99久久精品欧美| jlzzjlzz亚洲日本少妇| 亚洲亚洲精品在线观看| 精品视频一区二区三区免费| 强制捆绑调教一区二区| 国产日产欧美一区二区视频| 91日韩在线专区| 免费观看在线色综合| 国产精品美日韩| 欧美日韩1234| 成人av免费网站| 日日夜夜精品免费视频| 久久久精品国产免费观看同学| 91捆绑美女网站| 蜜桃一区二区三区在线观看| 亚洲特黄一级片| 日韩一区二区三| 99精品国产视频| 久久成人免费日本黄色| 一级特黄大欧美久久久| 久久一二三国产| 欧美日韩高清一区二区| 国产91精品一区二区麻豆网站| 亚洲国产精品久久久久秋霞影院| 久久久综合精品| 91精品久久久久久久91蜜桃| 成人av资源在线观看| 九九热在线视频观看这里只有精品| 亚洲伦理在线精品| 久久影院视频免费| 91麻豆精品国产自产在线| 色综合久久天天综合网| 国产a视频精品免费观看| 日韩国产精品91| 一区二区三区在线看| 欧美激情综合五月色丁香| 精品久久久久久无| 欧美电影在线免费观看| 色噜噜狠狠成人网p站| 国产精品77777| 老司机精品视频导航| 亚洲成a人v欧美综合天堂| 亚洲卡通欧美制服中文| 国产精品免费视频网站| 久久伊人中文字幕| 26uuu国产一区二区三区| 日韩视频在线永久播放| 欧美性一区二区| 91成人免费在线| 91色在线porny| 91丝袜美腿高跟国产极品老师 | 亚洲成在人线免费| 亚洲黄一区二区三区| 亚洲人被黑人高潮完整版| 国产欧美一区二区精品婷婷| 精品久久五月天| 精品国产不卡一区二区三区| 日韩欧美激情四射| 日韩欧美一二区| 欧美日韩国产美女| 欧美浪妇xxxx高跟鞋交| 欧美三区免费完整视频在线观看| 欧美性视频一区二区三区| 欧美视频第二页| 欧美另类一区二区三区| 欧美一级电影网站| 日韩欧美国产午夜精品| 久久综合九色综合97婷婷| 国产日韩av一区| √…a在线天堂一区| 中文字幕二三区不卡| 亚洲h动漫在线| 午夜视频在线观看一区| 日韩成人免费电影| 国内外成人在线视频| 国产精品自产自拍| 成人av在线影院| 欧美午夜电影一区| 5566中文字幕一区二区电影| 精品国产乱码久久久久久蜜臀| 久久人人超碰精品| 亚洲欧洲韩国日本视频| 亚洲高清一区二区三区| 毛片av一区二区| 大白屁股一区二区视频| 在线亚洲欧美专区二区| 欧美一级黄色片| 国产视频一区二区三区在线观看| 国产精品初高中害羞小美女文| 玉米视频成人免费看| 爽爽淫人综合网网站| 国产精品一区二区三区四区| 99久久婷婷国产综合精品电影| 欧美日韩一区二区三区免费看| 日韩你懂的在线播放| 亚洲欧洲日韩女同| 美女久久久精品| 成人av网在线| 日韩视频在线一区二区| 亚洲欧洲av在线| 久久精品国产网站| 色综合一区二区三区| 精品处破学生在线二十三| 国产欧美日韩综合| 亚洲综合丁香婷婷六月香| 麻豆精品在线播放| 91麻豆国产香蕉久久精品| 日韩一区二区电影| 亚洲欧美福利一区二区| 激情五月婷婷综合网| 日本久久一区二区| 欧美精品一区二| 午夜精品福利一区二区蜜股av| 国产精品1区2区| 欧美日韩国产一二三| 国产精品久久久久久久岛一牛影视| 石原莉奈在线亚洲三区| 不卡视频免费播放| 日韩一级片在线观看| 亚洲精品免费电影| 国产成人精品免费网站| 日韩一区二区视频在线观看| 一区二区三区视频在线看| 国产91精品免费| 日韩欧美电影在线| 亚洲午夜免费福利视频| 91小视频在线免费看| 日本一区二区不卡视频| 久久精品国产77777蜜臀| 欧美亚州韩日在线看免费版国语版 | 国产福利91精品一区二区三区| 欧美日韩黄色影视| 一区二区三区加勒比av| 成人免费看黄yyy456| 中文字幕视频一区二区三区久| 麻豆国产精品视频| 91精品国产乱码| 天天射综合影视| 欧美亚洲禁片免费| 亚洲欧美一区二区三区久本道91 | 五月婷婷激情综合| 99精品1区2区| 国产精品国产自产拍高清av| 国产真实乱偷精品视频免| 日韩欧美久久久| 美女视频一区二区三区| 日韩欧美不卡在线观看视频| 视频一区在线视频| 欧美电影在线免费观看| 青青草精品视频| 日韩欧美一区二区不卡| 久久99热99| 久久婷婷色综合| 国产乱人伦偷精品视频免下载 | 国产电影一区在线| 久久精品视频在线看| 国产最新精品免费| 久久精品水蜜桃av综合天堂| 国产成人综合自拍| 国产欧美1区2区3区| 成人精品高清在线| 亚洲欧洲99久久| 91福利精品视频| 日韩精品每日更新| 日韩免费视频线观看| 国产精品18久久久久久久久久久久 | 91亚洲资源网| 亚洲免费在线电影| 欧美日韩成人综合| 久久精品国产99| 久久精品视频一区二区| aaa亚洲精品一二三区| 玉米视频成人免费看| 日韩视频一区二区三区| 国产在线观看一区二区| 国产精品日日摸夜夜摸av| 色哟哟一区二区三区| 午夜私人影院久久久久| 欧美成人一区二区三区在线观看| 国产高清不卡一区二区| 亚洲男同性视频| 欧美一区二区免费视频| 国产宾馆实践打屁股91| 一区二区不卡在线视频 午夜欧美不卡在| 色哟哟在线观看一区二区三区| 日韩二区在线观看|