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

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

?? nic_req.c

?? plx9054的WDM驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY      
    KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
    PURPOSE.

Module Name:
    mp_req.c

Abstract:
    This module handle NDIS OID ioctls. This module is not required
    if the upper edge is not NDIS.


Environment:

    Kernel mode


Revision History:
    DChen       11-01-99    created
    EliyasY     Feb 13, 2003 converted to WDM
    
--*/

#include "precomp.h"

#if defined(EVENT_TRACING)
#include "nic_req.tmh"
#endif

//
// Following status values are copied from NDIS.H
//
#define NDIS_STATUS_MEDIA_CONNECT       0x4001000BL
#define NDIS_STATUS_MEDIA_DISCONNECT    0x4001000CL

NTSTATUS
PciDrvPowerBeginQueuingIrps(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  ULONG               IrpIoCharges,
    IN  BOOLEAN             Query
    );

NTSTATUS
NICHandleQueryOidRequest(
    IN  PFDO_DATA                   FdoData,
    IN  PIRP                        Irp,
    OUT PULONG                      BytesWritten
    )
/*++

Routine Description:

    Query an arbitrary OID value from the miniport.

Arguments:

    FdoData - pointer to open context representing our binding to the miniport
    DataBuffer - place to store the returned value
    BufferLength - length of the above
    BytesWritten - place to return length returned

Return Value:


--*/
{
    NTSTATUS                status = STATUS_SUCCESS;
    PNDISPROT_QUERY_OID     pQuery;
    NDIS_OID                Oid;
    ULONG                   ulInfo = 0;
    ULONG64                 ul64Info = 0;    
    PVOID                   pInfo = (PVOID) &ulInfo;
    ULONG                   ulInfoLen = sizeof(ulInfo);
    PVOID                   InformationBuffer = NULL;
    ULONG                   InformationBufferLength = 0;
    MEDIA_STATE             CurrMediaState;
    ULONG                   ulBytesAvailable = ulInfoLen;
    PVOID                   DataBuffer;    
    ULONG                   BufferLength;
    PIO_STACK_LOCATION      pIrpSp;
    KIRQL                   oldIrql;
    NDIS_PNP_CAPABILITIES   Power_Management_Capabilities;
    
    pIrpSp = IoGetCurrentIrpStackLocation(Irp);
    DataBuffer = Irp->AssociatedIrp.SystemBuffer;
    BufferLength = pIrpSp->Parameters.DeviceIoControl.OutputBufferLength;   
    
    DebugPrint(TRACE, DBG_IOCTLS, "--> HandleQueryOIDRequest\n");
    Oid = 0;

    do
    {
        if (BufferLength < sizeof(NDISPROT_QUERY_OID))
        {
            status = STATUS_BUFFER_OVERFLOW;
            break;
        }

        pQuery = (PNDISPROT_QUERY_OID)DataBuffer;
        Oid = pQuery->Oid;
        InformationBuffer = &pQuery->Data[0];
        InformationBufferLength = BufferLength - 
                            FIELD_OFFSET(NDISPROT_QUERY_OID, Data);
        
        switch(Oid)
        {

        case OID_GEN_LINK_SPEED:
        case OID_GEN_MEDIA_CONNECT_STATUS:
            
            if (InformationBufferLength < ulInfoLen)
            {
                break;
            }
            
            KeAcquireSpinLock(&FdoData->Lock, &oldIrql);
            if (MP_TEST_FLAG(FdoData, fMP_ADAPTER_LINK_DETECTION))
            {
                //
                // The device is busy doing link detection. Let us queue
                // the IRP. When the link detection is over, the watchdog
                // timer DPC will complete this IRP.
                //
                ASSERT(!FdoData->QueryRequest);
                status = PciDrvQueueIoctlIrp(FdoData, Irp);
                KeReleaseSpinLock(&FdoData->Lock, oldIrql);
                break;
            }
            else
            {            
                KeReleaseSpinLock(&FdoData->Lock, oldIrql); 
                if (Oid == OID_GEN_LINK_SPEED)
                {
                    ulInfo = FdoData->usLinkSpeed * 10000;
                } else {
             
                    CurrMediaState = NICIndicateMediaState(FdoData);            
                    ulInfo = CurrMediaState;            
                }
            }
            break;

        case OID_802_3_PERMANENT_ADDRESS:
            pInfo = FdoData->PermanentAddress;
            ulBytesAvailable = ulInfoLen = ETH_LENGTH_OF_ADDRESS;
            break;

        case OID_802_3_CURRENT_ADDRESS:
            pInfo = FdoData->CurrentAddress;
            ulBytesAvailable = ulInfoLen = ETH_LENGTH_OF_ADDRESS;
            break;

        case OID_802_3_MAXIMUM_LIST_SIZE:
            ulInfo = NIC_MAX_MCAST_LIST;
            break;
            
        case OID_GEN_XMIT_OK:
        case OID_GEN_RCV_OK:
        case OID_GEN_XMIT_ERROR:
        case OID_GEN_RCV_ERROR:
        case OID_GEN_RCV_NO_BUFFER:
        case OID_GEN_RCV_CRC_ERROR:
        case OID_GEN_TRANSMIT_QUEUE_LENGTH:
        case OID_802_3_RCV_ERROR_ALIGNMENT:
        case OID_802_3_XMIT_ONE_COLLISION:
        case OID_802_3_XMIT_MORE_COLLISIONS:
        case OID_802_3_XMIT_DEFERRED:
        case OID_802_3_XMIT_MAX_COLLISIONS:
        case OID_802_3_RCV_OVERRUN:
        case OID_802_3_XMIT_UNDERRUN:
        case OID_802_3_XMIT_HEARTBEAT_FAILURE:
        case OID_802_3_XMIT_TIMES_CRS_LOST:
        case OID_802_3_XMIT_LATE_COLLISIONS:
            
            status = NICGetStatsCounters(FdoData, Oid, &ul64Info);
            ulBytesAvailable = ulInfoLen = sizeof(ul64Info);
            
            if (status == STATUS_SUCCESS)
            {
                if (InformationBufferLength < sizeof(ULONG))
                {
                    status = STATUS_BUFFER_TOO_SMALL;
                    *BytesWritten = ulBytesAvailable;
                    break;
                }

                ulInfoLen = MIN(InformationBufferLength, ulBytesAvailable);
                pInfo = &ul64Info;
            }
                    
            break;         

        case OID_PNP_CAPABILITIES:

            NICFillPoMgmtCaps (FdoData, 
                                &Power_Management_Capabilities, 
                                &status,
                                &ulInfoLen);
            if (status == STATUS_SUCCESS)
            {
                pInfo = (PVOID) &Power_Management_Capabilities;
            }
            else
            {
                pInfo = NULL;
            }

            break;

        case OID_PNP_QUERY_POWER:
            // status is pre-set in this routine to Success

            status = STATUS_SUCCESS; 

            break;
            
        default:
            status = STATUS_NOT_SUPPORTED;
            break;
        }
    }while (FALSE);

    if (status == STATUS_SUCCESS)
    {
        if (ulInfoLen <= InformationBufferLength)
        {
            //
            // Copy result into InformationBuffer
            //
            *BytesWritten = ulInfoLen;
            if (ulInfoLen)
            {
                RtlMoveMemory(InformationBuffer, pInfo, ulInfoLen);
            }
        }
        else
        {
            //
            // too short
            //
            *BytesWritten = ulInfoLen;
            status = STATUS_BUFFER_TOO_SMALL;
        }
    }
    
    DebugPrint(LOUD, DBG_IOCTLS, "<--HandleQueryOIDRequest: OID %x, Status %x\n",
                Oid, status);

    return (status);
    
}

NTSTATUS
NICHandleSetOidRequest(
    IN  PFDO_DATA                   FdoData,
    IN  PIRP                       Irp
    )
/*++

Routine Description:

    This routine handles ioctl request for Set OIDs. Most of
    the IOCTL requests are only if the upper edge is NDIS.

Arguments:


Return Value:


--*/
{
    NTSTATUS                status = STATUS_SUCCESS;
    PNDISPROT_SET_OID       pSet;
    NDIS_OID                Oid;
    ULONG                   PacketFilter;
    PVOID                   InformationBuffer = NULL;
    ULONG                   InformationBufferLength = 0;
    KIRQL                   oldIrql;
    PVOID                   DataBuffer;    
    ULONG                   BufferLength, unUsed;
    PIO_STACK_LOCATION      pIrpSp;
    DEVICE_POWER_STATE      newDeviceState, oldDeviceState;
    
    pIrpSp = IoGetCurrentIrpStackLocation(Irp);
    DataBuffer = Irp->AssociatedIrp.SystemBuffer;
    BufferLength = pIrpSp->Parameters.DeviceIoControl.InputBufferLength;   
 
    DebugPrint(LOUD, DBG_IOCTLS, "--> HandleSetOIDRequest\n");
    
    Oid = 0;

    do
    {
        if (BufferLength < sizeof(NDISPROT_SET_OID))
        {
            status = STATUS_BUFFER_OVERFLOW;
            break;
        }

        pSet = (PNDISPROT_SET_OID)DataBuffer;
        Oid = pSet->Oid;
        InformationBuffer = &pSet->Data[0];
        InformationBufferLength = BufferLength - FIELD_OFFSET(NDISPROT_SET_OID, Data);
        switch(Oid)
        {

        case OID_802_3_MULTICAST_LIST:
            //
            // Verify the length
            //
            if (InformationBufferLength % ETH_LENGTH_OF_ADDRESS != 0)
            {
                return(STATUS_INVALID_BUFFER_SIZE);
            }

            //
            // Save the number of MC list size
            //
            FdoData->MCAddressCount = InformationBufferLength / ETH_LENGTH_OF_ADDRESS;
            ASSERT(FdoData->MCAddressCount <= NIC_MAX_MCAST_LIST);

            //
            // Save the MC list
            //
            RtlMoveMemory(
                FdoData->MCList, 
                InformationBuffer, 
                InformationBufferLength);

            KeAcquireSpinLock(&FdoData->Lock, &oldIrql);
            KeAcquireSpinLockAtDpcLevel(&FdoData->RcvLock);
            
            status = NICSetMulticastList(FdoData);

            KeReleaseSpinLockFromDpcLevel(&FdoData->RcvLock);
            KeReleaseSpinLock(&FdoData->Lock, oldIrql);
            break;

        case OID_GEN_CURRENT_PACKET_FILTER:
            //
            // Verify the Length
            //
            if (InformationBufferLength != sizeof(ULONG))
            {
                return(STATUS_INVALID_BUFFER_SIZE);
            }
            
            RtlMoveMemory(&PacketFilter, InformationBuffer, sizeof(ULONG));

            //
            // any bits not supported?
            //
            if (PacketFilter & ~NIC_SUPPORTED_FILTERS)
            {
                return(STATUS_NOT_SUPPORTED);
            }

            //
            // any filtering changes?
            //
            if (PacketFilter == FdoData->PacketFilter)
            {
                break;
            }

            KeAcquireSpinLock(&FdoData->Lock, &oldIrql);
            KeAcquireSpinLockAtDpcLevel(&FdoData->RcvLock);
            
            if (MP_TEST_FLAG(FdoData, fMP_ADAPTER_LINK_DETECTION))
            {
            
                //
                // The device is busy doing link detection. Let us queue
                // the IRP. When the link detection is over, the watchdog
                // timer DPC will complete this IRP.
                //
                ASSERT(!FdoData->SetRequest);
                status = PciDrvQueueIoctlIrp(FdoData, Irp);

                KeReleaseSpinLockFromDpcLevel(&FdoData->RcvLock);
                KeReleaseSpinLock(&FdoData->Lock, oldIrql);
                break;
            }

            status = NICSetPacketFilter(
                         FdoData,
                         PacketFilter);

            KeReleaseSpinLockFromDpcLevel(&FdoData->RcvLock);
            KeReleaseSpinLock(&FdoData->Lock, oldIrql);
            
            if (status == STATUS_SUCCESS)
            {
                FdoData->PacketFilter = PacketFilter;
            }

            break;

        case OID_PNP_SET_POWER:

            if (InformationBufferLength != sizeof(NDIS_DEVICE_POWER_STATE ))
            {
                return(STATUS_BUFFER_TOO_SMALL);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情资源网| 国产亚洲欧洲997久久综合| 欧美日韩综合在线| 日韩一本二本av| 制服丝袜亚洲色图| 国产精品福利一区二区| 日韩极品在线观看| 成人性生交大片| 911精品国产一区二区在线| 久久综合网色—综合色88| 亚洲女同一区二区| 捆绑变态av一区二区三区| 波多野结衣视频一区| 日韩一区二区电影在线| 最新热久久免费视频| 亚洲成a人v欧美综合天堂下载| 久久99精品国产.久久久久久| heyzo一本久久综合| 欧美一级欧美三级在线观看| 中文字幕一区不卡| 国产在线精品免费| 欧美日韩久久一区| 国产精品传媒在线| 激情综合色丁香一区二区| 欧美吻胸吃奶大尺度电影| 国产日韩三级在线| 久久精品久久综合| 欧美午夜精品一区二区蜜桃| 欧美一区二区日韩一区二区| 久久久久久久久97黄色工厂| 美女高潮久久久| 欧美日本一区二区三区四区| 国产精品欧美一区喷水| 韩国视频一区二区| 欧美一区二区三区视频| 亚洲综合网站在线观看| 一本久道久久综合中文字幕| 国产日韩高清在线| 国产老妇另类xxxxx| 日韩欧美成人一区| 蜜臀精品一区二区三区在线观看| 国产在线不卡一区| 日韩欧美激情一区| 免费成人av在线| 欧美一区二区久久| 美女mm1313爽爽久久久蜜臀| 69堂成人精品免费视频| 午夜在线电影亚洲一区| 欧美片在线播放| 午夜精品久久久久久久蜜桃app| 色狠狠av一区二区三区| 国产精品美女一区二区| 国产综合久久久久久久久久久久| 精品国产乱码久久久久久影片| 奇米777欧美一区二区| 日韩片之四级片| 久久精品国产99国产| 欧美大片一区二区三区| 麻豆成人av在线| 亚洲人成电影网站色mp4| 91麻豆免费在线观看| 亚洲精品日日夜夜| 欧日韩精品视频| 蜜桃精品视频在线观看| 日韩欧美一级在线播放| 国产成人免费视频| 自拍偷拍亚洲欧美日韩| 欧美日韩视频在线一区二区| 亚洲地区一二三色| 精品久久久久久久人人人人传媒 | 日韩精品一级中文字幕精品视频免费观看| 精品国产亚洲一区二区三区在线观看 | 国产精品成人免费精品自在线观看| 成人涩涩免费视频| 亚洲免费av网站| 欧美理论在线播放| 久久99国产精品免费| 国产精品视频第一区| 欧美做爰猛烈大尺度电影无法无天| 奇米色一区二区三区四区| 久久综合色综合88| 色婷婷精品久久二区二区蜜臀av| 丝袜诱惑亚洲看片| 欧美国产精品v| 92精品国产成人观看免费| 亚洲一区二区欧美日韩| 欧美xingq一区二区| 色综合 综合色| 伦理电影国产精品| 一区二区视频免费在线观看| 日韩欧美高清dvd碟片| 91美女在线看| 麻豆成人久久精品二区三区红| 久久综合九色综合欧美亚洲| jlzzjlzz国产精品久久| 精品一区二区在线观看| 一区二区三区小说| 国产性做久久久久久| 欧美日韩视频专区在线播放| 国产成人高清视频| 日本怡春院一区二区| 亚洲女与黑人做爰| 精品国产乱码久久久久久久久| 欧美亚洲高清一区| 成人av动漫网站| 国产在线看一区| 日韩电影一二三区| 亚洲黄色免费电影| 中文字幕一区二区三区四区不卡| 久久综合色天天久久综合图片| 精品视频一区 二区 三区| 国产一区免费电影| 毛片不卡一区二区| 首页综合国产亚洲丝袜| 亚洲乱码国产乱码精品精小说| 久久午夜色播影院免费高清| 欧美日韩大陆一区二区| 色天天综合色天天久久| www.亚洲国产| 99久久婷婷国产综合精品| 国产高清亚洲一区| 蜜桃av一区二区在线观看| 亚洲一区二区不卡免费| 亚洲人成网站在线| 亚洲欧美福利一区二区| 国产精品久久久久永久免费观看| 26uuu亚洲综合色| 久久人人97超碰com| 精品国产乱码久久| 久久日一线二线三线suv| 欧美精品一区二区三区在线| 欧美一级搡bbbb搡bbbb| 欧美性色黄大片手机版| 色吧成人激情小说| 欧美日韩www| 日韩久久久精品| 精品精品欲导航| 久久精品视频网| 中文字幕不卡三区| 亚洲欧美另类小说| 亚洲一二三区视频在线观看| 国产精品理论片| 一区二区三区精品| 国产喷白浆一区二区三区| 欧美经典三级视频一区二区三区| 欧美国产禁国产网站cc| 国产精品久久久久影院| 中文字幕亚洲欧美在线不卡| 亚洲三级在线看| 粉嫩嫩av羞羞动漫久久久| 美女一区二区三区| av高清不卡在线| 精品视频123区在线观看| 日韩欧美国产麻豆| 亚洲免费观看高清| 日韩成人午夜电影| 国产成人在线电影| 在线精品国精品国产尤物884a| 26uuu国产日韩综合| 亚洲欧洲国产专区| 视频一区二区欧美| 粉嫩一区二区三区在线看| 色激情天天射综合网| 日韩亚洲欧美一区| 自拍偷拍国产精品| 国产一区二区在线观看免费 | 国产精品嫩草99a| 亚洲综合区在线| 国产一区二区精品久久91| 91麻豆精品视频| 日韩午夜av一区| 亚洲嫩草精品久久| 精品影视av免费| 成人激情视频网站| 久久久综合网站| 亚洲成人免费在线| 国产成人精品免费网站| 欧美日韩成人综合| 一级女性全黄久久生活片免费| 韩国女主播成人在线观看| 欧美做爰猛烈大尺度电影无法无天| 精品国内二区三区| 久久精品国产99久久6| 色婷婷综合久久久| 久久久不卡影院| 日本不卡中文字幕| 欧美日韩一卡二卡三卡 | 国产精品美女一区二区三区| 亚洲精品欧美综合四区| 国产精品自在在线| 7777精品伊人久久久大香线蕉的| 最新中文字幕一区二区三区| 视频在线观看国产精品| 欧美无乱码久久久免费午夜一区| 国产精品色哟哟网站| 精品一二线国产| 91国产视频在线观看| 国产精品电影一区二区| 国产99精品视频| 久久亚洲综合色一区二区三区|