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

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

?? packet.c

?? <Visual C++ 網絡程序設計實例詳解>配套源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
        
        //
        //  Initializing the Event used for synchronizing open and close.
        //
        
        NdisInitializeEvent(&open->Event);

        //
        // List to hold irp's want to reset the adapter
        //
        InitializeListHead(&open->ResetIrpList);

        //
        // Initialize the spinlock used for synchronizing access
        // to the reset list.
        //
        KeInitializeSpinLock(&open->ResetQueueLock);
        
        //
        //  Initialize list for holding pending read requests
        //
        KeInitializeSpinLock(&open->RcvQSpinLock);
        InitializeListHead(&open->RcvList);

        //
        // Now open the adapter below and complete the initialization
        //
        
        NdisOpenAdapter(Status,
                          &status,
                          &open->AdapterHandle,
                          &mediumIndex,
                          &mediumArray,
                          sizeof(mediumArray)/sizeof(NDIS_MEDIUM),
                          Globals.NdisProtocolHandle,
                          open,
                          DeviceName,
                          0,
                          NULL);

        if(*Status == NDIS_STATUS_PENDING)
        {
              NdisWaitEvent(&open->Event, 0);
              *Status = open->Status;
        }
        if(*Status != NDIS_STATUS_SUCCESS)
        {
            DebugPrint(("Failed to openAdapter\n"));
            break;
        }
        open->IrpCount = 0;

        InterlockedExchange( (PLONG)&open->Bound, TRUE );
        NdisInitializeEvent(&open->CleanupEvent);

        //
        // Let the initial state of the event to be signalled state.
        //

        NdisSetEvent(&open->CleanupEvent);

        //
        //  Save the the friendly name of the MAC driver
        //

        NdisQueryAdapterInstanceName(&open->AdapterName, 
                                        open->AdapterHandle);
        DebugPrint(("Bound AdapterName %ws\n", open->AdapterName.Buffer));

        open->Medium = mediumArray;
        //
        // Link this instance to the global adapterlist.
        //
        
        InitializeListHead(&open->AdapterListEntry);
        
        ExInterlockedInsertTailList(&Globals.AdapterList,
                                    &open->AdapterListEntry, 
                                    &Globals.GlobalLock);

        //
        // Clear the DO_DEVICE_INITIALIZING flag. This is required
        // if you create deviceobjects outside of DriverEntry.
        // Untill you do this, application cannot send I/O request.
        // 

        deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;


    } while(FALSE);

    if (*Status != NDIS_STATUS_SUCCESS)
    {
        if (open && open->PacketPool != NULL) {
             NdisFreePacketPool(open->PacketPool);
        }
        if (deviceObject != NULL) {
            IoDeleteDevice(deviceObject);
        }
        
        if(unicodeDeviceName.Buffer)
            ExFreePool(unicodeDeviceName.Buffer);

        if(symbolicLink) {
            IoDeleteSymbolicLink(&open->SymbolicLink);
            ExFreePool(open->SymbolicLink.Buffer);
        }
    }

    DebugPrint(("Return BindAdapter :0x%x\n", *Status));
}


VOID
PacketUnbindAdapter(
    OUT PNDIS_STATUS        Status,
    IN  NDIS_HANDLE         ProtocolBindingContext,
    IN  NDIS_HANDLE         UnbindContext
    )
/*++

Routine Description:

    Called by NDIS when we are required to unbind to the adapter below.

Arguments:

    Status                    Placeholder for return status
    ProtocolBindingContext    Pointer to the adapter structure
    UnbindContext            Context for NdisUnbindComplete() if this pends

Return Value:


--*/
{
    POPEN_INSTANCE   open =(POPEN_INSTANCE)ProtocolBindingContext;
    KIRQL            oldIrql;

    DebugPrint(("PacketUnbindAdapter :%ws\n", open->AdapterName.Buffer));

    if(open->AdapterHandle != NULL)
    {
        NdisResetEvent(&open->Event);

        //
        // Your are no longer bound to any adapter
        //

        InterlockedExchange( (PLONG) &open->Bound, FALSE );

        //
        // Cancel all the pending reads.
        // 

        PacketCancelReadIrps(open->DeviceObject);
        
        //
        // Wait for all the outstanding IRPs to complete
        //
        DebugPrint(("Waiting on CleanupEvent\n"));

        NdisWaitEvent(&open->CleanupEvent, 0);

        NdisCloseAdapter(Status, open->AdapterHandle);

        //
        // Wait for it to complete
        //
        if(*Status == NDIS_STATUS_PENDING)
        {
            NdisWaitEvent(&open->Event, 0);
            *Status = open->Status;
        }
        else
        {
            *Status = NDIS_STATUS_FAILURE;
            ASSERT(0);
        }

        //
        // Delink this instance from the global adapter list.
        //
        
        KeAcquireSpinLock(&Globals.GlobalLock, &oldIrql);
        RemoveEntryList(&open->AdapterListEntry);
        KeReleaseSpinLock(&Globals.GlobalLock, oldIrql);
        
        NdisFreePacketPool(open->PacketPool);
        
        NdisFreeMemory(open->AdapterName.Buffer, open->AdapterName.Length, 0);

        IoDeleteSymbolicLink(&open->SymbolicLink);
        ExFreePool(open->SymbolicLink.Buffer);
        
        IoDeleteDevice(open->DeviceObject);
    }

    DebugPrint(("Exit PacketUnbindAdapter\n"));
}

VOID
PacketOpenAdapterComplete(
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN NDIS_STATUS  Status,
    IN NDIS_STATUS  OpenErrorStatus
    )
/*++

Routine Description:

    Completion routine for NdisOpenAdapter issued from within the 
    PacketBindAdapter. Simply unblock the caller.

Arguments:

    ProtocolBindingContext    Pointer to the adapter
    Status                    Status of the NdisOpenAdapter call
    OpenErrorStatus            Secondary status(ignored by us).

Return Value:

    None

--*/
{

    POPEN_INSTANCE    open = ProtocolBindingContext;

    DebugPrint(("Packet: OpenAdapterComplete\n"));

    open->Status = Status;
    NdisSetEvent(&open->Event);
    return;

}

VOID
PacketCloseAdapterComplete(
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN NDIS_STATUS  Status
    )
/*++

Routine Description:

    Completion routine for NdisCloseAdapter issued from within the 
    PacketUnBindAdapter. Simply unblock the caller.

Arguments:

    ProtocolBindingContext    Pointer to the adapter
    Status                    Status of the NdisOpenAdapter call

Return Value:

    None

--*/

{
    POPEN_INSTANCE    open = ProtocolBindingContext;

    DebugPrint(("CloseAdapterComplete\n"));

    open->Status = Status;
    NdisSetEvent(&open->Event);
    
    return;

}


NDIS_STATUS
PacketPNPHandler(
    IN    NDIS_HANDLE        ProtocolBindingContext,
    IN    PNET_PNP_EVENT     NetPnPEvent
    )

/*++
Routine Description:

    NDIS calls ProtocolPnPEvent to indicate a Plug and Play 
    event or a Power Management event.  
    All PNP Related OIDS(requests) are routed to this function. 

Arguments:

    ProtocolBindingContext    Pointer to our adapter structure.
    NetPnPEvent               Pointer to a Net_PnP_Event

Return Value:

    NDIS_STATUS_SUCCESS: as we do not do much here

--*/
{
    POPEN_INSTANCE              open  =(POPEN_INSTANCE)ProtocolBindingContext;
    NDIS_STATUS                 Status  = NDIS_STATUS_SUCCESS;
    PNET_DEVICE_POWER_STATE     powerState;

    DebugPrint(("PacketPNPHandler\n"));
    
    powerState = (PNET_DEVICE_POWER_STATE)NetPnPEvent->Buffer;

    //
    // This will happen when all entities in the system need to be notified
    //
    //if(open == NULL)
    //{
    //  return Status;
    //}

    switch(NetPnPEvent->NetEvent)
    {
         case  NetEventSetPower :
            DebugPrint(("NetEventSetPower\n"));
            switch (*powerState) {
            
                case NetDeviceStateD0:
                    Status = NDIS_STATUS_SUCCESS;
                    break;

                default:
                    //
                    // We can't suspend, so we ask NDIS to Unbind us by
                    // returning this status:
                    //
                    Status = NDIS_STATUS_NOT_SUPPORTED;
                    break;
            }
            break;
         case NetEventQueryPower :
            DebugPrint(("NetEventQueryPower\n"));
            break;
            
         case NetEventQueryRemoveDevice  :
            DebugPrint(("NetEventQueryRemoveDevice \n"));
            break;

         case NetEventCancelRemoveDevice  :
            DebugPrint(("NetEventCancelRemoveDevice \n"));
            break;
            
         case NetEventReconfigure :
            //
            // The protocol should always succeed this event 
            // by returning NDIS_STATUS_SUCCESS
            //
            DebugPrint(("NetEventReconfigure\n"));
            break;

        case NetEventBindsComplete  :
            DebugPrint(("NetEventBindsComplete \n"));
            break;

        case NetEventPnPCapabilities  :
            DebugPrint(("NetEventPnPCapabilities \n"));
        case NetEventBindList:
            DebugPrint(("NetEventBindList \n"));
        default:
            Status = NDIS_STATUS_NOT_SUPPORTED;
            break;
    }

    return Status;
}


VOID
IoIncrement (
    IN  OUT POPEN_INSTANCE  Open
    )   

/*++
Routine Description:

    This routine increments the number of requests the device receives
    
Arguments:

    Open - pointer to the device extension.
    
Return Value:
--*/

{
    LONG            result;
    
    result = InterlockedIncrement(&Open->IrpCount);

    //DebugPrint(("IoIncrement %d\n", result));

    //
    // Need to clear event (when IrpCount bumps from 0 to 1) 
    //
    
    if (result == 1) {
        //
        // We need to clear the event
        //
        NdisResetEvent(&Open->CleanupEvent);
    }

    return;
}

VOID
IoDecrement (
    IN  OUT POPEN_INSTANCE  Open
    )
/*++
Routine Description:

    This routine decrements as it complete the request it receives

Arguments:

    Open - pointer to the device extension.
    
Return Value:

--*/
{
    LONG            result;
    
    result = InterlockedDecrement(&Open->IrpCount);

    //DebugPrint(("IoDecrement %d\n", result));

    if (result == 0) {

        //
        // Set the event when the count transition from 1 to 0.
        //
 
        NdisSetEvent (&Open->CleanupEvent);
    }
    return;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产在线观看| 国内成人精品2018免费看| 《视频一区视频二区| 国产精品嫩草99a| 亚洲免费av高清| 亚洲美女在线一区| 亚洲视频每日更新| 午夜一区二区三区视频| 卡一卡二国产精品| 波波电影院一区二区三区| 欧美亚洲动漫精品| 日韩女同互慰一区二区| 国产无人区一区二区三区| 亚洲视频一区在线观看| 性做久久久久久久久| 国产成人亚洲综合a∨猫咪| 97精品电影院| 精品国产乱码久久久久久图片| 国产日韩欧美在线一区| 亚洲制服丝袜在线| 成人免费视频免费观看| 欧美三片在线视频观看| 亚洲欧洲三级电影| 久久精品av麻豆的观看方式| 97超碰欧美中文字幕| 日韩免费视频一区| 亚洲国产日韩av| 成人国产免费视频| 精品国产凹凸成av人网站| 亚洲影视资源网| 99久久久免费精品国产一区二区| 91麻豆精品国产91久久久久| 亚洲女与黑人做爰| 成人激情免费网站| 国产精品久久久久久久蜜臀| 久久精品国产精品亚洲红杏| 4438x亚洲最大成人网| 香港成人在线视频| 欧美色中文字幕| 午夜精品一区二区三区电影天堂| 在线免费av一区| 香蕉av福利精品导航| 欧美日韩一区二区三区高清| 亚洲一区中文在线| 欧美精品一区二区在线观看| 久久久无码精品亚洲日韩按摩| 久久一日本道色综合| 中文字幕一区二区在线播放| 视频一区视频二区中文| 欧日韩精品视频| 日韩欧美美女一区二区三区| 日本成人中文字幕| 日韩一区二区在线观看视频播放| 日韩高清在线一区| 2021久久国产精品不只是精品| 国产成人午夜片在线观看高清观看| 精品免费日韩av| jlzzjlzz欧美大全| 日本不卡123| 26uuu欧美日本| 99国产欧美另类久久久精品 | 91日韩在线专区| 亚洲bt欧美bt精品| 欧美韩日一区二区三区四区| 精品视频资源站| 99精品视频在线观看免费| 日韩电影在线观看一区| 国产精品久久久久婷婷二区次 | 亚洲人成网站色在线观看| 欧美精品一级二级| 99精品欧美一区| 国产高清视频一区| 九一九一国产精品| 亚洲观看高清完整版在线观看 | 国产乱对白刺激视频不卡| 亚洲韩国精品一区| 亚洲精品国产视频| 国产精品美女久久福利网站| 国产亚洲一区字幕| 精品久久国产老人久久综合| 在线不卡的av| 不卡一区中文字幕| 国产一区二区导航在线播放| 青青草精品视频| 久久精品国内一区二区三区| 亚洲午夜精品17c| 香蕉成人伊视频在线观看| 亚洲va欧美va人人爽| 日韩av网站在线观看| 蜜臀av在线播放一区二区三区| 亚洲一区在线观看网站| 亚洲va欧美va国产va天堂影院| 久久久久久久久久久久久女国产乱| 99视频精品全部免费在线| 色婷婷综合中文久久一本| 欧美在线制服丝袜| 精品久久五月天| 亚洲欧美偷拍三级| 免费看欧美女人艹b| 成人亚洲一区二区一| 欧美艳星brazzers| 日韩欧美在线综合网| 国产精品久久久久毛片软件| 午夜精品一区二区三区三上悠亚| 黄色小说综合网站| 欧美日韩国产高清一区二区| 久久久99免费| 日韩中文字幕麻豆| 99精品国产91久久久久久| 日韩丝袜美女视频| 天天av天天翘天天综合网| 福利电影一区二区三区| 国产99精品在线观看| 国产 日韩 欧美大片| 欧美日韩激情一区| 欧美精品 日韩| 欧美mv日韩mv亚洲| 综合久久久久久| 亚洲色图欧洲色图| 亚洲成人免费在线观看| 国产一区二区在线影院| 欧美精品视频www在线观看| 国产日韩综合av| 国产在线视频一区二区| 欧美在线|欧美| 午夜久久福利影院| 日韩欧美专区在线| 青青草国产成人99久久| 日本二三区不卡| 亚洲色欲色欲www| 91麻豆swag| 一级女性全黄久久生活片免费| 国产剧情一区二区| 欧美精品一区二区在线观看| 韩国av一区二区三区在线观看| 久久久久久久综合日本| 六月丁香婷婷久久| 欧美一区二区不卡视频| 日韩成人一级片| 日韩久久精品一区| 国产91精品欧美| 中文字幕一区二区三区四区| 成人动漫精品一区二区| 中文一区二区完整视频在线观看| 国产91精品入口| 亚洲v中文字幕| 久久久99精品久久| 色综合天天综合色综合av | 日韩美一区二区三区| 国产精品一品二品| 日本在线观看不卡视频| 欧美激情在线观看视频免费| 99久久国产综合精品麻豆 | 成人av在线资源| 青青草伊人久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美影视一区二区三区| 精品一区精品二区高清| 亚洲天堂中文字幕| 欧美精品一区二区三区在线播放| 99精品在线免费| 国产成a人无v码亚洲福利| 一区二区三区小说| 国产欧美日韩激情| 国产亚洲婷婷免费| 久久免费视频色| 日韩欧美高清一区| 欧美日韩一区高清| 4438成人网| 欧美一二三四在线| 欧美日韩综合在线免费观看| 91伊人久久大香线蕉| 成人一级黄色片| www.亚洲在线| 国产成人99久久亚洲综合精品| 蜜桃av噜噜一区| 日韩黄色小视频| 久久精品国产免费| 国产精品一二三四| 国产91高潮流白浆在线麻豆| 成人丝袜18视频在线观看| 99视频一区二区| 91亚洲精品久久久蜜桃网站| 成人精品高清在线| 欧美三级电影精品| 久久久久久一级片| 中文字幕一区二区三区在线播放| 中文字幕日本不卡| 亚洲综合自拍偷拍| 美国十次综合导航| 91蜜桃在线免费视频| 欧美午夜一区二区三区免费大片| 欧美日韩国产小视频| 欧美电影免费观看高清完整版在| 精品少妇一区二区三区| 国产精品久久久久久久久晋中 | 成人自拍视频在线| 精品视频在线免费看| 日韩欧美在线1卡| 亚洲三级视频在线观看|