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

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

?? adapter.c

?? ndis windows網絡驅動程序的范例
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    adapter.c

Abstract:

    routines for binding/unbinding to/from underlying miniport drivers

Author:

    Jim Mateer 4-1-97

Environment:

    Kernel Mode

Revision History:

--*/

#include "ImSamp.h"
#pragma hdrstop

PADAPTER CurrentAdapter;


VOID
BindToLowerMP(
	OUT	PNDIS_STATUS			Status,
	IN	NDIS_HANDLE				BindContext,
	IN	PNDIS_STRING			MPDeviceName,
	IN	PVOID					SystemSpecific1,
	IN	PVOID					SystemSpecific2
	);

STATIC NDIS_STATUS
GetAdapterRegistryData(
    PNDIS_STRING IMParamsKey,
    PADAPTER Adapter
    );


STATIC VOID
ProcessLowerMPOpenAdapter(
    IN  PADAPTER Adapter,
    IN  NDIS_STATUS Status
    );

VOID
LowerMPOpenAdapterComplete(
    IN  NDIS_HANDLE ProtocolBindingContext,
    IN  NDIS_STATUS Status,
    IN  NDIS_STATUS OpenErrorStatus
    );

STATIC NDIS_STATUS
AllocatePacketPool(
    PADAPTER Adapter                   
    );

STATIC NDIS_STATUS
AllocateReceiveBufferPools(
    PADAPTER Adapter
    );

//NDIS_STATUS
//AddPipeToPSA(
//    PADAPTER Adapter
//    );


PADAPTER
FindAdapterByInstanceNumber(
#if BINARY_COMPATIBLE
    CHAR InstanceNumber
#else
    WCHAR InstanceNumber
#endif
    );

PADAPTER
FindAdapterByName(
    PWCHAR AdapterName
    );

NDIS_STATUS
MPInitialize(
	OUT PNDIS_STATUS			OpenErrorStatus,
	OUT PUINT					SelectedMediumIndex,
	IN	PNDIS_MEDIUM			MediumArray,
	IN	UINT					MediumArraySize,
	IN	NDIS_HANDLE				MiniportAdapterHandle,
	IN	NDIS_HANDLE				WrapperConfigurationContext
	);

VOID
UnbindFromLowerMP(
	OUT	PNDIS_STATUS			Status,
	IN	NDIS_HANDLE				ProtocolBindingContext,
	IN	NDIS_HANDLE				UnbindContext
	);

VOID
DerefAdapter(
    PADAPTER Adapter
    );

VOID
CleanupAdapter(
    PADAPTER Adapter
    );

VOID
LowerMPCloseAdapterComplete(
    IN  NDIS_HANDLE ProtocolBindingContext,
    IN  NDIS_STATUS Status
    );

VOID
CLUnloadProtocol(
    VOID
    );

VOID
MPHalt(
	IN	NDIS_HANDLE				MiniportAdapterContext
	);

NDIS_STATUS
MPReset(
	OUT PBOOLEAN				AddressingReset,
	IN	NDIS_HANDLE				MiniportAdapterContext
	);

#if DBG
VOID
DumpAdapter(
    PADAPTER Adapter
    );
#endif


#pragma NDIS_PAGEABLE_FUNCTION(BindToLowerMP)
#pragma NDIS_PAGEABLE_FUNCTION(GetAdapterRegistryData)

VOID
BindToLowerMP(
	OUT	PNDIS_STATUS			Status,
	IN	NDIS_HANDLE				BindContext,
	IN	PNDIS_STRING			MPDeviceName,
	IN	PVOID					SystemSpecific1,
	IN	PVOID					SystemSpecific2
	)

/*++

Routine Description:

    Bind to the underlying MP. Allocate space for an adapter structure,
    initializing its fields. Try to open the adapter indicated in MPDeviceName.

Arguments:

    See the DDK...

Return Values:

    None

--*/

{
    PADAPTER Adapter;
	NDIS_STATUS OpenAdapterStatus;
	NDIS_STATUS OpenErrorStatus;
    NDIS_STATUS LocalStatus;
    NDIS_MEDIUM MediumArray[] = {
        NdisMediumFddi,
        NdisMedium802_5,
        NdisMedium802_3
        };
	UINT MediumArraySize = sizeof( MediumArray ) / sizeof( NDIS_MEDIUM );
    UINT MediaIndex;
    ULONG AdapterStructSize;

    PAGED_CODE();

#if BINARY_COMPATIBLE
    ImDbgOut( DBG_INFO, DBG_PROTOCOL | DBG_INIT, ("BindToLowerMP: %s\n", MPDeviceName->Buffer ));
#else
    ImDbgOut( DBG_INFO, DBG_PROTOCOL | DBG_INIT, ("BindToLowerMP: %ws\n", MPDeviceName->Buffer ));
#endif

    //
    // allocate enough space for the structure and two unicode buffers to hold
    // the IM and underlying MP device names. We add an extra Unicode char to
    // to the IM device name to hold the instance char that is be appended later
    // on and another unicode char to separate the two strings for reading
    //

    AdapterStructSize = sizeof( ADAPTER ) + IMMPName.Length + MPDeviceName->Length +
        2 * sizeof( UNICODE_NULL );

    IMAllocatePool( Adapter, AdapterStructSize, Adapter );

    if ( Adapter == NULL ) {
        PWCHAR StringData[2];

        StringData[0] = IMDriverName.Buffer;
        StringData[1] = L"Adapter";
        NdisWriteErrorLogEntry(IMDriverObject,
                               (ULONG)EVENT_TRANSPORT_RESOURCE_POOL,
                               0,
                               2,
                               &StringData,
                               0,
                               NULL);

        *Status = NDIS_STATUS_RESOURCES;
        return;
    }

    //
    // set our state to initializing
    //

    Adapter->IMMPState = ADAPTER_STATE_INITIALIZING;

    //
    // make the device name point to the buffer allocated at the back of the
    // structure.
    //

    Adapter->IMDeviceName.MaximumLength = IMMPName.Length + sizeof( UNICODE_NULL );
    Adapter->IMDeviceName.Length = Adapter->IMDeviceName.MaximumLength;
    Adapter->IMDeviceName.Buffer = (PWSTR)( Adapter + 1 );

    Adapter->MPDeviceName.MaximumLength = MPDeviceName->Length;
    Adapter->MPDeviceName.Length = Adapter->MPDeviceName.MaximumLength;
    Adapter->MPDeviceName.Buffer = (PWSTR)((PCHAR)Adapter->IMDeviceName.Buffer +
                                           Adapter->IMDeviceName.MaximumLength +
                                           sizeof( UNICODE_NULL ));

    NdisMoveMemory( Adapter->MPDeviceName.Buffer, MPDeviceName->Buffer, MPDeviceName->Length );

    LocalStatus = GetAdapterRegistryData( (PNDIS_STRING)SystemSpecific1, Adapter );

    if ( !NT_SUCCESS( LocalStatus )) {

#if BINARY_COMPATIBLE
        ImDbgOut(DBG_FAILURE, DBG_PROTOCOL | DBG_INIT,
                 ("(%08X) BindToLowerMP: Couldn't get registry data %08X (%s)\n",
                  Adapter, LocalStatus, MPDeviceName->Buffer ));
#else
        ImDbgOut(DBG_FAILURE, DBG_PROTOCOL | DBG_INIT,
                 ("(%08X) BindToLowerMP: Couldn't get registry data %08X (%ws)\n",
                  Adapter, LocalStatus, MPDeviceName->Buffer ));
#endif

        *Status = NDIS_STATUS_FAILURE;

        IMFreePool( Adapter );
        return;

    }

    //
    // init the event now since we use it in the completion handler
    //
    // remember our binding context so we can complete BindAdapter later on
    //

    NdisInitializeEvent( &Adapter->BlockingEvent );
    Adapter->BindContext = BindContext;


	// Open the adapter below us.
    NdisOpenAdapter(&OpenAdapterStatus,
                    &OpenErrorStatus,
                    &Adapter->LowerMPHandle,
					&MediaIndex,
                    MediumArray,
					MediumArraySize,
                    ClientProtocolHandle,
                    Adapter,
                    MPDeviceName,
                    0,
                    NULL);

    //
    // Memphis doesn't like you to do NdisRequests from within the OpenAdapterComplete
    // handler so wait for OpenAdapterComplete to finish and then do the follow up
    // processing.
    //

    if ( OpenAdapterStatus == NDIS_STATUS_PENDING ) {

        NdisWaitEvent( &Adapter->BlockingEvent, 0 );
        NdisResetEvent( &Adapter->BlockingEvent );
    } else {

        Adapter->FinalStatus = OpenAdapterStatus;
    }

    if ( NT_SUCCESS( Adapter->FinalStatus )) {

        Adapter->MediaType = MediumArray[ MediaIndex ];
    }

    ProcessLowerMPOpenAdapter( Adapter, Adapter->FinalStatus );

    *Status = Adapter->FinalStatus;

} // BindToLowerMP


STATIC NDIS_STATUS
GetAdapterRegistryData(
    PNDIS_STRING IMParamsKey,
    PADAPTER Adapter
    )

/*++

Routine Description:

    Obtain the IMSamp specific info associated with the underlying MP

Arguments:

    IMParamsKey - location in the registry

    Adapter - pointer to adapter context struct

Return Value:

    NDIS_STATUS_SUCCESS if everything worked ok

--*/

{
    NDIS_STATUS Status;
    NDIS_HANDLE ConfigHandle;
    NDIS_STRING IMInstanceNumberKey = NDIS_STRING_CONST( "InstanceNumber" );
    PNDIS_CONFIGURATION_PARAMETER ConfigParam;
    ULONG i;
    PWCHAR StringData[2];
    PVOID DumpData;

    PAGED_CODE();

    NdisOpenProtocolConfiguration( &Status, &ConfigHandle, IMParamsKey );

    if ( !NT_SUCCESS( Status )) {

#if BINARY_COMPATIBLE
        ImDbgOut(DBG_FAILURE, DBG_PROTOCOL | DBG_INIT,
                 ( "(%08X) GetAdapterRegistryData: can't open key %s (%08X)\n",
                   Adapter, IMParamsKey->Buffer, Status ));
#else
        ImDbgOut(DBG_FAILURE, DBG_PROTOCOL | DBG_INIT,
                 ( "(%08X) GetAdapterRegistryData: can't open key %ws (%08X)\n",
                   Adapter, IMParamsKey->Buffer, Status ));
#endif

        return Status;
    }

    //
    // get the IM device instance number and build the device instance string
    //

    NdisReadConfiguration(&Status,
                          &ConfigParam,
                          ConfigHandle,
                          &IMInstanceNumberKey,
                          NdisParameterInteger);


    if ( !NT_SUCCESS( Status )) {

        ImDbgOut(DBG_FAILURE, DBG_PROTOCOL | DBG_INIT,
                 ("(%08X) GetAdapterRegistryData: Missing InstanceNumber key\n", Adapter));

        Status = NDIS_STATUS_FAILURE;
        goto CloseConfig;
    }

    Adapter->DevInstance = (USHORT)ConfigParam->ParameterData.IntegerData;

    NdisMoveMemory( Adapter->IMDeviceName.Buffer, IMMPName.Buffer, IMMPName.Length );

    Adapter->IMDeviceName.Buffer[ IMMPName.Length / sizeof( WCHAR ) ] = L'0' + Adapter->DevInstance;


CloseConfig:
    NdisCloseConfiguration( ConfigHandle );

    return Status;

} // GetAdapterRegistryData


STATIC VOID
ProcessLowerMPOpenAdapter(
    IN  PADAPTER Adapter,
    IN  NDIS_STATUS Status
    )

/*++

Routine Description:

    Complete the binding on the lower miniport. Initialize the adapter structure, query
    the MP for certain funtionality and initialize the associated IM miniport device

Arguments:

    see the DDK

Return Values:

    None

--*/

{
    NTSTATUS EventStatus;
    PWSTR SecondaryName;
    NDIS_HARDWARE_STATUS HWStatus;
    NDIS_MEDIA_STATE MediaState = 0xFFFFFFFF;
    NDIS_STRING IMDevName;
    ULONG MacOptions;
    ULONG ErrorLogData[2];
    PWCHAR StringData[2];
    PVOID DumpData;

    ImDbgOut(DBG_TRACE, DBG_PROTOCOL, ("(%08X) ProcessLowerMPOpenAdapter\n", Adapter));

    //
    // see if it worked; clean up and get out
    //

    if ( !NT_SUCCESS( Status )) {

        ImDbgOut(DBG_FAILURE,
                 DBG_PROTOCOL,
                 ("(%08X) ProcessLowerMPOpenAdapter: binding failed %08X\n", Adapter, Status));

        if ( Status == NDIS_STATUS_ADAPTER_NOT_FOUND ) {

            EventStatus = EVENT_TRANSPORT_ADAPTER_NOT_FOUND;

        } else {

            EventStatus = EVENT_TRANSPORT_BINDING_FAILED;
        }

        StringData[0] = Adapter->IMDeviceName.Buffer;
        StringData[1] = Adapter->MPDeviceName.Buffer;
        DumpData = &Status;

        NdisWriteErrorLogEntry(IMDriverObject,
                               EventStatus,
                               0,
                               2,
                               &StringData,
                               sizeof( Status ),
                               DumpData);

        IMFreePool( Adapter );
        return;
    }

    //
    // initialize the variables associated with this structure. From this point on,
    // DerefAdapter must be called if any errors are encountered.
    //

    NdisAllocateSpinLock( &Adapter->Lock );
    Adapter->RefCount = 1;
    ImDbgOut( DBG_TRACE, DBG_REFCNTS, ("(%08X) =1 Adapter\n", Adapter ));
    InitializeListHead( &Adapter->ClientList );
    Adapter->ShutdownMask = 0;


    //
    // add adapter on list of known adapters
    //

    NdisInterlockedInsertTailList( &AdapterList, &Adapter->Linkage, &AdapterListLock );

    //
    // determine if adapter is ready for use. All adapters probably support hardware
    // status. If they don't, then we'll assume it must be ready for use. If the
    // HW status indicates ok, then check for media connect state which is new for 4.0.
    // If the media is not connected, then we wait until we get an indication that it
    // is connected and then we query the adapter for its link speed. This is important
    // for multi-speed adapters, like 10/100 ethernet.
    //
     //

    Status = MakeLocalNdisRequest(Adapter,
                                  OID_GEN_HARDWARE_STATUS,
                                  &HWStatus,
                                  sizeof( HWStatus ),
                                  NULL);

    if ( Status == NDIS_STATUS_INVALID_OID || HWStatus == NdisHardwareStatusReady ) {

        Status = MakeLocalNdisRequest(Adapter,
                                      OID_GEN_MEDIA_CONNECT_STATUS,
                                      &MediaState,
                                      sizeof( MediaState ),
                                      NULL);

        if ( Status == NDIS_STATUS_INVALID_OID || MediaState == NdisMediaStateConnected ) {

            Status = MakeLocalNdisRequest(Adapter,
                                          OID_GEN_LINK_SPEED,
                                          &Adapter->LinkSpeed,
                                          sizeof( Adapter->LinkSpeed ),
                                          NULL);

            if ( !NT_SUCCESS( Status )) {

                ImDbgOut(DBG_INFO, DBG_PROTOCOL,
                         ("(%08X) ProcessLowerMPOpenAdapter: Can't get link speed - Status %08X\n",
                          Adapter, Status));
        
                ErrorLogData[ 0 ] = IM_ERROR_MISSING_OID;
                ErrorLogData[ 1 ] = OID_GEN_LINK_SPEED;

                NdisWriteErrorLogEntry(Adapter->LowerMPHandle,
                                       NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER,
                                       2,
                                       ErrorLogData);

                goto ErrorExit;
            }

         } else {

            ImDbgOut(DBG_INFO, DBG_PROTOCOL,
                     ("(%08X) ProcessLowerMPOpenAdapter: Media not connected\n", Adapter ));
        }
    } else {

        ImDbgOut(DBG_INFO, DBG_PROTOCOL,
                 ("(%08X) ProcessLowerMPOpenAdapter: HW Status not ready (%d)\n", HWStatus));
    }

    //
    // determine whether we can copy the lookahead data directly
    //

    Status = MakeLocalNdisRequest(Adapter,
                                  OID_GEN_MAC_OPTIONS,
                                  &MacOptions,
                                  sizeof( MacOptions ),
                                  NULL);

    if ( NT_SUCCESS( Status )) {

        Adapter->CopyLookaheadData = (BOOLEAN)(MacOptions & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA);
    }

    //
    // allocate a packet pool with no buffers. We allocate all the packets and
    // stuff them on a lookaside list so we don't take the hit later on
    //

    Status = AllocatePacketPool( Adapter );

    if ( !NT_SUCCESS( Status )) {

        goto ErrorExit;
    }

    //
    // now allocate two buffer pools: one to hold header plus lookahead data and the
    // other for residual lookahead data that is copied via NdisTransferData.
    //

    Status = AllocateReceiveBufferPools( Adapter );

    if ( !NT_SUCCESS( Status )) {

        goto ErrorExit;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情欧美一区二区| 制服丝袜亚洲网站| 欧美精品一二三区| 国产女主播一区| 日韩不卡免费视频| 91福利精品视频| 国产精品天美传媒| 精品在线播放免费| 欧美浪妇xxxx高跟鞋交| 日韩美女啊v在线免费观看| 久久99精品久久久久久国产越南| 色香蕉成人二区免费| 久久综合久久综合亚洲| 青椒成人免费视频| 欧美日韩在线观看一区二区| 国产精品传媒入口麻豆| 国产一区二区主播在线| 91.com视频| 午夜欧美电影在线观看| 91麻豆国产在线观看| 国产精品无码永久免费888| 高清不卡一二三区| 日韩欧美一区电影| 免费在线观看不卡| 这里只有精品99re| 亚洲成a人v欧美综合天堂| 91丨九色丨黑人外教| 国产精品久久久久桃色tv| 国产精品综合二区| 久久久久99精品一区| 久草中文综合在线| 精品国产欧美一区二区| 狠狠色综合日日| 欧美大片日本大片免费观看| 美国av一区二区| 日韩欧美在线一区二区三区| 免费不卡在线视频| 精品日本一线二线三线不卡| 国内精品视频一区二区三区八戒| 欧美一级黄色片| 麻豆91精品视频| www国产成人| 国产激情一区二区三区四区 | 不卡的看片网站| 亚洲精品欧美综合四区| 在线精品视频免费观看| 婷婷中文字幕一区三区| 宅男在线国产精品| 国产乱码一区二区三区| 中文字幕一区二区三区精华液| 99精品在线免费| 亚洲国产视频一区二区| 91精品国产丝袜白色高跟鞋| 精品一区二区在线播放| 国产精品初高中害羞小美女文| 91国产免费看| 久久国产精品色婷婷| 国产喷白浆一区二区三区| 91啪亚洲精品| 美腿丝袜亚洲三区| 国产精品区一区二区三| 欧美视频第二页| 国产另类ts人妖一区二区| 亚洲欧美一区二区三区久本道91 | 玉足女爽爽91| 91精品国产全国免费观看| 国产精品一区免费视频| 一区二区欧美国产| 精品国产一二三区| 色综合久久久久久久| 久久精品国产精品亚洲红杏| 国产精品久久久久婷婷二区次| 欧美日韩在线精品一区二区三区激情| 精品影院一区二区久久久| 亚洲激情av在线| 久久在线免费观看| 欧美伊人久久大香线蕉综合69| 美女脱光内衣内裤视频久久网站 | 成人亚洲精品久久久久软件| 一区二区三区高清在线| 国产欧美一区二区三区沐欲| 欧美日韩亚洲不卡| 99精品热视频| 极品瑜伽女神91| 另类欧美日韩国产在线| 国产精品丝袜一区| 欧美一区二区三区白人 | 国产一区二区看久久| 亚洲超丰满肉感bbw| 国产精品麻豆欧美日韩ww| 欧美一二三四在线| 欧美午夜影院一区| www.在线成人| 国产精品一二三四五| 蜜桃在线一区二区三区| 亚洲国产欧美日韩另类综合| 国产精品全国免费观看高清| 精品理论电影在线| 欧美一级国产精品| 欧美日韩欧美一区二区| 色婷婷综合五月| www.66久久| 粉嫩aⅴ一区二区三区四区五区 | 一个色妞综合视频在线观看| 欧美激情一区二区三区在线| 精品国产乱码久久久久久夜甘婷婷| 欧美男生操女生| 欧美私人免费视频| 欧美综合天天夜夜久久| 一本到一区二区三区| 99国产精品久久久久久久久久久| 丰满亚洲少妇av| 高清视频一区二区| 国产成人精品一区二区三区四区 | 成人国产精品视频| 成人免费看的视频| av高清不卡在线| av午夜精品一区二区三区| av网站免费线看精品| 91视频国产观看| 色婷婷狠狠综合| 欧美在线短视频| 欧美喷水一区二区| 日韩手机在线导航| 精品精品国产高清a毛片牛牛| 精品国偷自产国产一区| 久久青草国产手机看片福利盒子 | 亚洲精品乱码久久久久久黑人| 成人免费在线视频| 亚洲一区中文在线| 天堂va蜜桃一区二区三区 | 精品国产亚洲一区二区三区在线观看| 91精品国产综合久久精品app| 日韩一区二区免费在线观看| wwwwxxxxx欧美| 国产精品高潮久久久久无| 一区二区在线看| 奇米在线7777在线精品| 国产精品一二二区| 91亚洲国产成人精品一区二区三| 欧美性猛片aaaaaaa做受| 3d成人h动漫网站入口| 久久久久99精品一区| 亚洲精品videosex极品| 日本午夜精品一区二区三区电影| 久久av中文字幕片| 91在线小视频| 欧美肥妇bbw| 日本一二三四高清不卡| 亚洲国产成人av| 国产精品系列在线播放| 欧美亚洲国产怡红院影院| 日韩精品在线一区| 亚洲情趣在线观看| 久久99国产精品麻豆| 成人福利电影精品一区二区在线观看| 欧美视频在线不卡| www国产成人| 午夜欧美视频在线观看| 国产盗摄视频一区二区三区| 欧亚洲嫩模精品一区三区| 26uuu亚洲综合色| 性做久久久久久免费观看| 国内精品伊人久久久久av影院| 色综合天天做天天爱| 欧美mv日韩mv亚洲| 亚洲一区二区美女| 成人久久18免费网站麻豆| 欧美一区二区三区男人的天堂| 亚洲欧洲日产国产综合网| 国内精品在线播放| 日韩一区二区三区高清免费看看| 国产精品久线在线观看| 国产在线观看一区二区| 欧美伦理电影网| 一区二区在线观看免费| 国产精品99久久久久久久女警| 欧美精品久久一区二区三区| 亚洲欧美成人一区二区三区| 色婷婷国产精品| 亚洲国产精品成人综合| 蜜桃视频一区二区三区| 欧美久久婷婷综合色| 亚洲自拍欧美精品| 日本高清不卡视频| 综合亚洲深深色噜噜狠狠网站| 国产一区亚洲一区| 精品国产乱码91久久久久久网站| 婷婷六月综合网| 欧美日韩一区二区三区免费看| 国产精品高潮呻吟| 成人爱爱电影网址| 中文字幕国产一区| 粉嫩av亚洲一区二区图片| 国产欧美一区二区精品性色| 国内精品自线一区二区三区视频| 精品久久五月天| 国产精品99久久久久久久女警| 久久久久久久久久久99999| 国产一区二区精品久久|