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

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

?? ne2000.c

?? 使用網(wǎng)絡(luò)驅(qū)動(dòng)器接口標(biāo)準(zhǔn)開發(fā)的ne2000網(wǎng)卡的NT驅(qū)動(dòng).
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
/*++

Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved.

Module Name:

    ne2000.c

Abstract:

    This is the main file for the Novel 2000 Ethernet controller.
    This driver conforms to the NDIS 3.0 miniport interface.

Author:

    Sean Selitrennikoff (Dec 1993)

Environment:

Revision History:

--*/

#include "precomp.h"


//
// On debug builds tell the compiler to keep the symbols for
// internal functions, otw throw them out.
//
#if DBG
#define STATIC
#else
#define STATIC static
#endif

//
// Debugging definitions
//
#if DBG

//
// Default debug mode
//
ULONG Ne2000DebugFlag = NE2000_DEBUG_LOG;

//
// Debug tracing defintions
//
#define NE2000_LOG_SIZE 256
UCHAR Ne2000LogBuffer[NE2000_LOG_SIZE]={0};
UINT Ne2000LogLoc = 0;

extern
VOID
Ne2000Log(UCHAR c) {

    Ne2000LogBuffer[Ne2000LogLoc++] = c;

	Ne2000LogBuffer[(Ne2000LogLoc + 4) % NE2000_LOG_SIZE] = '\0';

	if (Ne2000LogLoc >= NE2000_LOG_SIZE)
		Ne2000LogLoc = 0;
}

#endif



//
// This constant is used for places where NdisAllocateMemory
// needs to be called and the HighestAcceptableAddress does
// not matter.
//
NDIS_PHYSICAL_ADDRESS HighestAcceptableMax =
    NDIS_PHYSICAL_ADDRESS_CONST(-1,-1);

//
// The global Miniport driver block.
//

DRIVER_BLOCK Ne2000MiniportBlock={0};

//
// List of supported OID for this driver.
//
STATIC UINT Ne2000SupportedOids[] = {
    OID_GEN_SUPPORTED_LIST,
    OID_GEN_HARDWARE_STATUS,
    OID_GEN_MEDIA_SUPPORTED,
    OID_GEN_MEDIA_IN_USE,
    OID_GEN_MAXIMUM_LOOKAHEAD,
    OID_GEN_MAXIMUM_FRAME_SIZE,
    OID_GEN_MAXIMUM_TOTAL_SIZE,
    OID_GEN_MAC_OPTIONS,
    OID_GEN_PROTOCOL_OPTIONS,
    OID_GEN_LINK_SPEED,
    OID_GEN_TRANSMIT_BUFFER_SPACE,
    OID_GEN_RECEIVE_BUFFER_SPACE,
    OID_GEN_TRANSMIT_BLOCK_SIZE,
    OID_GEN_RECEIVE_BLOCK_SIZE,
    OID_GEN_VENDOR_DESCRIPTION,
    OID_GEN_VENDOR_ID,
    OID_GEN_DRIVER_VERSION,
    OID_GEN_CURRENT_PACKET_FILTER,
    OID_GEN_CURRENT_LOOKAHEAD,
    OID_GEN_XMIT_OK,
    OID_GEN_RCV_OK,
    OID_GEN_XMIT_ERROR,
    OID_GEN_RCV_ERROR,
    OID_GEN_RCV_NO_BUFFER,
    OID_802_3_PERMANENT_ADDRESS,
    OID_802_3_CURRENT_ADDRESS,
    OID_802_3_MULTICAST_LIST,
    OID_802_3_MAXIMUM_LIST_SIZE,
    OID_802_3_RCV_ERROR_ALIGNMENT,
    OID_802_3_XMIT_ONE_COLLISION,
    OID_802_3_XMIT_MORE_COLLISIONS
    };

//
// Determines whether failing the initial card test will prevent
// the adapter from being registered.
//
#ifdef CARD_TEST

BOOLEAN InitialCardTest = TRUE;

#else  // CARD_TEST

BOOLEAN InitialCardTest = FALSE;

#endif // CARD_TEST

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

#pragma NDIS_INIT_FUNCTION(DriverEntry)


NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )

/*++

Routine Description:

    This is the primary initialization routine for the NE2000 driver.
    It is simply responsible for the intializing the wrapper and registering
    the Miniport driver.  It then calls a system and architecture specific
    routine that will initialize and register each adapter.

Arguments:

    DriverObject - Pointer to driver object created by the system.

    RegistryPath - Path to the parameters for this driver in the registry.

Return Value:

    The status of the operation.

--*/

{


    //
    // Receives the status of the NdisMRegisterMiniport operation.
    //
    NDIS_STATUS Status;

    //
    // Characteristics table for this driver.
    //
    NDIS_MINIPORT_CHARACTERISTICS NE2000Char;

    //
    // Pointer to the global information for this driver
    //
    PDRIVER_BLOCK NewDriver = &Ne2000MiniportBlock;

    //
    // Handle for referring to the wrapper about this driver.
    //
    NDIS_HANDLE NdisWrapperHandle;

    //
    // Initialize the wrapper.
    //
    NdisMInitializeWrapper(
                &NdisWrapperHandle,
                DriverObject,
                RegistryPath,
                NULL
                );

    //
    // Save the global information about this driver.
    //
    NewDriver->NdisWrapperHandle = NdisWrapperHandle;
    NewDriver->AdapterQueue = (PNE2000_ADAPTER)NULL;

    //
    // Initialize the Miniport characteristics for the call to
    // NdisMRegisterMiniport.
    //
    NE2000Char.MajorNdisVersion = NE2000_NDIS_MAJOR_VERSION;
    NE2000Char.MinorNdisVersion = NE2000_NDIS_MINOR_VERSION;
    NE2000Char.CheckForHangHandler = NULL;
    NE2000Char.DisableInterruptHandler = Ne2000DisableInterrupt;
    NE2000Char.EnableInterruptHandler = Ne2000EnableInterrupt;
    NE2000Char.HaltHandler = Ne2000Halt;
    NE2000Char.HandleInterruptHandler = Ne2000HandleInterrupt;
    NE2000Char.InitializeHandler = Ne2000Initialize;
    NE2000Char.ISRHandler = Ne2000Isr;
    NE2000Char.QueryInformationHandler = Ne2000QueryInformation;
    NE2000Char.ReconfigureHandler = NULL;
    NE2000Char.ResetHandler = Ne2000Reset;
    NE2000Char.SendHandler = Ne2000Send;
    NE2000Char.SetInformationHandler = Ne2000SetInformation;
    NE2000Char.TransferDataHandler = Ne2000TransferData;

    Status = NdisMRegisterMiniport(
                 NdisWrapperHandle,
                 &NE2000Char,
                 sizeof(NE2000Char)
                 );

    if (Status == NDIS_STATUS_SUCCESS) {

        return STATUS_SUCCESS;

    }

    return STATUS_UNSUCCESSFUL;

}


#pragma NDIS_PAGEABLE_FUNCTION(Ne2000Initialize)
extern
NDIS_STATUS
Ne2000Initialize(
    OUT PNDIS_STATUS OpenErrorStatus,
    OUT PUINT SelectedMediumIndex,
    IN PNDIS_MEDIUM MediumArray,
    IN UINT MediumArraySize,
    IN NDIS_HANDLE MiniportAdapterHandle,
    IN NDIS_HANDLE ConfigurationHandle
    )

/*++

Routine Description:

    Ne2000Initialize starts an adapter and registers resources with the
    wrapper.

Arguments:

    OpenErrorStatus - Extra status bytes for opening token ring adapters.

    SelectedMediumIndex - Index of the media type chosen by the driver.

    MediumArray - Array of media types for the driver to chose from.

    MediumArraySize - Number of entries in the array.

    MiniportAdapterHandle - Handle for passing to the wrapper when
       referring to this adapter.

    ConfigurationHandle - A handle to pass to NdisOpenConfiguration.

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_PENDING

--*/

{
    //
    // Pointer to our newly allocated adapter.
    //
    PNE2000_ADAPTER Adapter;

    //
    // The handle for reading from the registry.
    //
    NDIS_HANDLE ConfigHandle;

    //
    // The value read from the registry.
    //
    PNDIS_CONFIGURATION_PARAMETER ReturnedValue;

    //
    // String names of all the parameters that will be read.
    //
    NDIS_STRING IOAddressStr = NDIS_STRING_CONST("IoBaseAddress");
    NDIS_STRING InterruptStr = NDIS_STRING_CONST("InterruptNumber");
    NDIS_STRING MaxMulticastListStr = NDIS_STRING_CONST("MaximumMulticastList");
    NDIS_STRING NetworkAddressStr = NDIS_STRING_CONST("NetworkAddress");
    NDIS_STRING BusTypeStr = NDIS_STRING_CONST("BusType");
    NDIS_STRING CardTypeStr = NDIS_STRING_CONST("CardType");

    //
    // TRUE if there is a configuration error.
    //
    BOOLEAN ConfigError = FALSE;

    //
    // A special value to log concerning the error.
    //
    ULONG ConfigErrorValue = 0;

    //
    // The slot number the adapter is located in, used for
    // Microchannel adapters.
    //
    UINT SlotNumber = 0;

    //
    // TRUE if it is unnecessary to read the Io Base Address
    // and Interrupt from the registry.  Used for Microchannel
    // adapters, which get this information from the slot
    // information.
    //
    BOOLEAN SkipIobaseAndInterrupt = FALSE;

    //
    // The network address the adapter should use instead of the
    // the default burned in address.
    //
    PVOID NetAddress;

    //
    // The number of bytes in the address.  It should be
    // NE2000_LENGTH_OF_ADDRESS
    //
    ULONG Length;

    //
    // These are used when calling Ne2000RegisterAdapter.
    //

    //
    // The physical address of the base I/O port.
    //
    PVOID IoBaseAddr;

    //
    // The interrupt number to use.
    //
    CCHAR InterruptNumber;

    //
    // The number of multicast address to be supported.
    //
    UINT MaxMulticastList;

    //
    // Temporary looping variable.
    //
    ULONG i;

    //
    // Status of Ndis calls.
    //
    NDIS_STATUS Status;

    NDIS_MCA_POS_DATA McaData;

    //
    // Search for the medium type (802.3) in the given array.
    //
    for (i = 0; i < MediumArraySize; i++){

        if (MediumArray[i] == NdisMedium802_3){

            break;

        }

    }

    if (i == MediumArraySize){

        return( NDIS_STATUS_UNSUPPORTED_MEDIA );

    }

    *SelectedMediumIndex = i;


    //
    // Set default values.
    //
    IoBaseAddr = DEFAULT_IOBASEADDR;
    InterruptNumber = DEFAULT_INTERRUPTNUMBER;
    MaxMulticastList = DEFAULT_MULTICASTLISTMAX;

    //
    // Allocate memory for the adapter block now.
    //
    Status = NdisAllocateMemory( (PVOID *)&Adapter,
                   sizeof(NE2000_ADAPTER),
                   0,
                   HighestAcceptableMax
                   );

    if (Status != NDIS_STATUS_SUCCESS) {

        return Status;

    }

    //
    // Clear out the adapter block, which sets all default values to FALSE,
    // or NULL.
    //
    NdisZeroMemory (Adapter, sizeof(NE2000_ADAPTER));

    //
    // Open the configuration space.
    //
    NdisOpenConfiguration(
            &Status,
            &ConfigHandle,
            ConfigurationHandle
            );

    if (Status != NDIS_STATUS_SUCCESS) {

        NdisFreeMemory(Adapter, sizeof(NE2000_ADAPTER), 0);

        return Status;

    }

    //
    //  Read in the card type.
    //
    Adapter->CardType = NE2000_ISA;
    
    NdisReadConfiguration(
            &Status,
            &ReturnedValue,
            ConfigHandle,
            &CardTypeStr,
            NdisParameterHexInteger
            );
    if (Status == NDIS_STATUS_SUCCESS)
        Adapter->CardType = (UINT)ReturnedValue->ParameterData.IntegerData;

    //
    // Read net address
    //
    NdisReadNetworkAddress(
                    &Status,
                    &NetAddress,
                    &Length,
                    ConfigHandle
                    );

    if ((Length == NE2000_LENGTH_OF_ADDRESS) && (Status == NDIS_STATUS_SUCCESS)) {

        //
        // Save the address that should be used.
        //
        NdisMoveMemory(
                Adapter->StationAddress,
                NetAddress,
                NE2000_LENGTH_OF_ADDRESS
                );

    }

    //
    // Disallow multiple adapters in the same MP machine because of hardware
    // problems this results in random packet corruption.
    //
    if ((NdisSystemProcessorCount() > 1) && (Ne2000MiniportBlock.AdapterQueue != NULL)) {

        ConfigError = TRUE;
        ConfigErrorValue = (ULONG)NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION;
        goto RegisterAdapter;

        return NDIS_STATUS_FAILURE;

    }


    //
    // Read Bus Type (for NE2/AE2 support)
    //
	Adapter->BusType = NdisInterfaceIsa;
	
    NdisReadConfiguration(
            &Status,
            &ReturnedValue,
            ConfigHandle,
            &BusTypeStr,
            NdisParameterHexInteger

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
正在播放一区二区| 国产成人亚洲综合a∨婷婷图片| 97se亚洲国产综合自在线观| 国产欧美精品区一区二区三区| 丰满岳乱妇一区二区三区| 国产精品网站在线观看| 不卡的av在线播放| 亚洲精品美腿丝袜| 欧美顶级少妇做爰| 另类调教123区| 国产精品嫩草99a| 91精品福利在线| 免费在线观看不卡| 国产色综合一区| 精品视频1区2区| 精品一区二区三区视频在线观看 | 免费高清视频精品| 日韩欧美区一区二| 成人午夜视频免费看| 亚洲日本电影在线| 91.xcao| 国产久卡久卡久卡久卡视频精品| 国产精品电影院| 欧美日韩免费观看一区三区| 日本vs亚洲vs韩国一区三区二区 | 麻豆一区二区99久久久久| 国产日产亚洲精品系列| 在线观看成人免费视频| 国产麻豆精品95视频| 亚洲美女区一区| 久久这里只有精品6| 欧美在线影院一区二区| 精品综合免费视频观看| 一区二区三区四区在线| 4438成人网| 91在线国内视频| 青青草精品视频| 亚洲欧美偷拍另类a∨色屁股| 日韩欧美专区在线| 91国内精品野花午夜精品| 国产一区二区三区日韩| 亚洲国产精品麻豆| 中文字幕欧美一区| 精品日韩一区二区三区免费视频| 91首页免费视频| 国产露脸91国语对白| 奇米四色…亚洲| 国产91丝袜在线播放九色| 亚洲综合久久久| 国产精品免费人成网站| 日韩精品一区二区三区视频| 欧美在线观看你懂的| 国产成人福利片| 久久www免费人成看片高清| 亚洲与欧洲av电影| 日韩理论在线观看| 亚洲国产精品ⅴa在线观看| 精品1区2区在线观看| 欧美一区日本一区韩国一区| 色婷婷久久久综合中文字幕| 成人av资源在线| 成人av在线电影| 国产精品一区二区你懂的| 久久99精品网久久| 久久精品国产免费| 秋霞av亚洲一区二区三| 午夜不卡av在线| 亚洲一区二区精品3399| 一区二区三区精品在线| 亚洲色欲色欲www| 亚洲人吸女人奶水| 亚洲欧美国产毛片在线| 亚洲欧美视频在线观看视频| 亚洲色图都市小说| 亚洲综合在线电影| 亚洲国产精品一区二区www在线| 亚洲精品国产精华液| 亚洲欧美电影院| 亚洲精品视频自拍| 亚洲一区二区三区美女| 亚洲国产精品人人做人人爽| 首页国产欧美日韩丝袜| 日本成人在线视频网站| 久久精品国产一区二区三 | 蜜臀av性久久久久蜜臀aⅴ| 亚洲午夜久久久久久久久电影院 | 日韩高清在线不卡| 捆绑调教一区二区三区| 国产揄拍国内精品对白| 成人教育av在线| 色哦色哦哦色天天综合| 欧美日韩一区二区在线观看 | 欧美大白屁股肥臀xxxxxx| 日韩精品中文字幕在线一区| 久久日韩粉嫩一区二区三区| 国产精品福利一区| 亚洲精品免费在线播放| 日韩精品亚洲一区| 国产一区在线看| 91视频观看视频| 欧美三级在线看| 日韩欧美一区二区在线视频| 久久久高清一区二区三区| 国产精品沙发午睡系列990531| 亚洲免费伊人电影| 免费在线观看视频一区| 成人一区二区在线观看| 在线免费观看日本一区| 精品久久一区二区三区| 1000部国产精品成人观看| 视频一区视频二区中文| 国产精品自拍网站| 91麻豆福利精品推荐| 欧美一区二区精美| 中文字幕成人av| 日韩成人午夜电影| 成人亚洲精品久久久久软件| 欧美日韩国产小视频| 国产欧美日韩卡一| 石原莉奈在线亚洲二区| 风间由美一区二区av101| 亚洲女与黑人做爰| 国产又粗又猛又爽又黄91精品| 色综合中文字幕| 久久综合九色综合97婷婷女人| 亚洲免费av观看| 国产精品一区专区| 欧美日韩电影在线| 亚洲欧洲成人精品av97| 麻豆91精品视频| 欧美日韩国产首页在线观看| 国产欧美视频一区二区| 日产欧产美韩系列久久99| 日本高清视频一区二区| 国产欧美日韩亚州综合| 久久99精品国产麻豆婷婷洗澡| 欧美午夜片在线观看| 成人欧美一区二区三区视频网页| 久久国产精品99久久人人澡| 欧美系列在线观看| 亚洲欧洲在线观看av| 精品无码三级在线观看视频| 7777精品伊人久久久大香线蕉完整版| 国产精品久久福利| 国产精品影音先锋| 欧美mv日韩mv亚洲| 视频一区二区欧美| 欧美日韩一区二区在线视频| 亚洲图片欧美激情| 成人激情小说网站| 久久久精品影视| 国产一区二区精品久久99| 91精品国产综合久久小美女| 亚洲精品高清视频在线观看| 国产91高潮流白浆在线麻豆| 欧美成人vps| 精品一区二区三区影院在线午夜| 4438成人网| 美女国产一区二区三区| 欧美精品日韩一本| 香蕉成人伊视频在线观看| 91免费观看视频在线| 亚洲欧洲日韩在线| 色婷婷综合久久久久中文 | 免播放器亚洲一区| 在线电影院国产精品| 日韩国产一区二| 在线播放91灌醉迷j高跟美女| 亚洲国产精品欧美一二99| 在线精品观看国产| 午夜av区久久| 日韩欧美一卡二卡| 国产在线看一区| 国产午夜亚洲精品午夜鲁丝片| 黑人精品欧美一区二区蜜桃| 国产亚洲精品aa午夜观看| 福利一区二区在线| 亚洲色图清纯唯美| 欧美在线不卡一区| 婷婷中文字幕综合| 精品人伦一区二区色婷婷| 激情深爱一区二区| 国产精品色婷婷久久58| 99久久精品费精品国产一区二区| 亚洲三级免费观看| 欧美浪妇xxxx高跟鞋交| 久久99久久久久| 国产精品久久久久久久久免费相片| 波多野结衣中文字幕一区| 亚洲免费av高清| 欧美一区日韩一区| 国产精品996| 尤物av一区二区| 制服丝袜亚洲精品中文字幕| 另类小说综合欧美亚洲| 久久久久久久综合色一本| 99re成人在线| 青青草国产成人99久久| 久久久噜噜噜久噜久久综合| 色诱视频网站一区|