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

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

?? miniport.c

?? NDIS過濾驅動在廣域網絡會話劫持防范技術中的應用研究
?? C
?? 第 1 頁 / 共 3 頁
字號:
        NdisRequest(&Status,
                    pAdapt->BindingHandle,
                    &pAdapt->Request);

        if (Status != NDIS_STATUS_PENDING)
        {
            *BytesRead = pAdapt->Request.DATA.SET_INFORMATION.BytesRead;
            *BytesNeeded = pAdapt->Request.DATA.SET_INFORMATION.BytesNeeded;
            pAdapt->OutstandingRequests = FALSE;
        }

    } while (FALSE);

    return(Status);
}


VOID
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.
    //
    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一区二区三区免费野_久草精品视频
国产精品一区二区在线观看网站| 日韩一区二区三| 欧美精品精品一区| 国产日韩欧美电影| 日韩精品一二区| 99re66热这里只有精品3直播 | 精品国产电影一区二区| 亚洲欧美另类在线| 国产乱子伦视频一区二区三区| 欧美性三三影院| 国产精品麻豆欧美日韩ww| 日本欧美在线观看| 色成人在线视频| 午夜久久久久久久久| 天天操天天综合网| 欧美日韩在线综合| 中文成人av在线| 极品少妇xxxx精品少妇偷拍| 欧美视频中文字幕| 亚洲精品写真福利| 成人精品视频一区| 欧美国产精品久久| 国产一区二区美女诱惑| 日韩欧美久久一区| 美腿丝袜亚洲三区| 欧美一区二区高清| 偷拍一区二区三区| 91麻豆精品国产91| 日韩av电影天堂| 欧美日韩www| 午夜天堂影视香蕉久久| 在线视频国内自拍亚洲视频| 日韩毛片精品高清免费| 99视频超级精品| 亚洲女人****多毛耸耸8| 99国产麻豆精品| 亚洲天堂中文字幕| 日本韩国一区二区| 亚洲一区二区三区在线播放| 欧美亚洲自拍偷拍| 亚洲h精品动漫在线观看| 欧美美女一区二区| 日韩av在线播放中文字幕| 日韩三级精品电影久久久| 美腿丝袜亚洲色图| 久久综合久色欧美综合狠狠| 国产经典欧美精品| 亚洲欧美综合另类在线卡通| 97久久超碰精品国产| 亚洲综合视频在线| 欧美一区二区久久久| 老司机精品视频一区二区三区| 精品国产免费人成在线观看| 国产精品一区免费视频| 中文字幕中文在线不卡住| 色成年激情久久综合| 日韩福利视频网| 久久久久久久久久久久久女国产乱 | 丁香婷婷深情五月亚洲| 中文字幕在线一区二区三区| 在线观看一区不卡| 免费在线视频一区| 欧美国产一区二区在线观看| 色综合久久综合网97色综合| 美女爽到高潮91| 国产精品福利在线播放| 欧美三电影在线| 国产成人啪免费观看软件| 亚洲欧美一区二区不卡| 欧美一区二区女人| 99精品桃花视频在线观看| 午夜电影网亚洲视频| 久久综合成人精品亚洲另类欧美 | 一卡二卡欧美日韩| 日韩一区二区高清| 97国产一区二区| 免费观看在线综合色| 国产精品久久久久久久久搜平片| 欧美亚洲高清一区二区三区不卡| 久久不见久久见免费视频1| 中文字幕中文在线不卡住| 欧美日韩日日摸| 91官网在线观看| 久久99这里只有精品| 亚洲精品中文在线| 国产亚洲1区2区3区| 欧美日本国产视频| 成人av在线一区二区三区| 奇米色一区二区| 亚洲乱码国产乱码精品精可以看 | 亚洲精品在线免费播放| 91成人在线免费观看| 国产成人啪午夜精品网站男同| 亚洲午夜激情网站| 国产精品久久久久婷婷二区次| 欧美一区二区三区播放老司机| 91色porny| 成人爱爱电影网址| 国内精品久久久久影院一蜜桃| 婷婷综合五月天| 亚洲视频你懂的| 日本一区二区三区在线不卡 | 亚洲成人免费观看| 亚洲国产成人午夜在线一区| 欧美一区二区高清| 欧美精品日日鲁夜夜添| 色美美综合视频| www.视频一区| av一区二区不卡| 高清不卡一区二区| 国模大尺度一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲夂夂婷婷色拍ww47| 亚洲色图.com| 亚洲欧美日韩久久| 亚洲欧洲一区二区三区| 国产精品久久久久久久浪潮网站 | 欧美日韩一区精品| 色婷婷久久久综合中文字幕| 99久久国产综合精品麻豆| 成人做爰69片免费看网站| 国产精品一区二区不卡| 岛国av在线一区| 欧美伊人久久大香线蕉综合69| 97精品国产露脸对白| 色综合 综合色| 91国偷自产一区二区使用方法| 99re这里只有精品首页| 色香色香欲天天天影视综合网| 91麻豆蜜桃一区二区三区| 91色|porny| 欧美日韩精品一区二区三区四区 | 国产成人精品亚洲777人妖 | 蜜臀av一区二区在线观看| 蜜桃精品视频在线| 国产麻豆午夜三级精品| 成人美女在线视频| 欧美综合视频在线观看| 欧美日韩亚洲国产综合| 欧美一二三区在线| 国产日韩精品一区二区三区 | 北岛玲一区二区三区四区| 色综合亚洲欧洲| 欧美蜜桃一区二区三区| 日韩欧美综合一区| 中文字幕av不卡| 亚洲精品日日夜夜| 免费在线观看视频一区| 国产麻豆午夜三级精品| 91在线无精精品入口| 欧美精品欧美精品系列| 亚洲精品一区二区三区蜜桃下载| 国产精品色婷婷久久58| 亚洲一区二区偷拍精品| 免费视频最近日韩| 99在线精品视频| 制服丝袜av成人在线看| 久久久久高清精品| 亚洲国产欧美日韩另类综合| 韩国v欧美v亚洲v日本v| 色狠狠综合天天综合综合| 精品国产髙清在线看国产毛片| 中文字幕日本乱码精品影院| 性久久久久久久久久久久| 国产成人免费视| 8v天堂国产在线一区二区| 国产精品女上位| 男人的天堂久久精品| 色婷婷综合久色| 久久午夜色播影院免费高清| 亚洲精品成人在线| 国产成人在线免费观看| 欧美精品xxxxbbbb| 亚洲欧美另类综合偷拍| 国产精品1区2区3区| 这里是久久伊人| 一区二区三区小说| 91理论电影在线观看| 欧美精品一区二| 日韩电影在线看| 色婷婷综合久色| 国产精品网站在线观看| 久久99国产精品久久| 777奇米成人网| 一区二区三区欧美| av电影在线不卡| 久久精品亚洲精品国产欧美kt∨| 首页国产欧美久久| 在线观看免费亚洲| 亚洲欧美视频一区| gogo大胆日本视频一区| 国产精品热久久久久夜色精品三区 | 欧美精品成人一区二区三区四区| 亚洲欧洲制服丝袜| 99久久国产免费看| 久久久久久日产精品| 激情小说亚洲一区| 日韩欧美亚洲国产另类| 日本美女视频一区二区| 欧美日韩免费电影|