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

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

?? nic_pm.c

?? plx9054的WDM驅動程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
        MPSetPowerD0 (FdoData);
    }
    else
    {
        DebugPrint(TRACE, DBG_POWER, "Entering a deeper sleep state\n");      
        status = MPSetPowerLow (FdoData, PowerState);
    }
    return status;
}



NTSTATUS
NICAddWakeUpPattern(
    IN PFDO_DATA  FdoData,
    IN PVOID        InformationBuffer, 
    IN UINT         InformationBufferLength,
    OUT PULONG      BytesRead,
    OUT PULONG      BytesNeeded   
    )
/*++
Routine Description:

    This routine will allocate a local memory structure, copy the pattern, 
    insert the pattern into a linked list and return success

    We are gauranteed that we wll get only one request at a time, so this is implemented
    without locks.
    
Arguments:
    
    FdoData                 FdoData structure
    InformationBuffer       Wake up Pattern
    InformationBufferLength Wake Up Pattern Length
    
Return Value:

    STATUS_Success - if successful.
    STATUS_UNSUCCESSFUL - if memory allocation fails. 
    
--*/
{

    NTSTATUS             status = STATUS_UNSUCCESSFUL;
    PMP_WAKE_PATTERN        pWakeUpPattern = NULL;
    UINT                    AllocationLength = 0;
    PNDIS_PM_PACKET_PATTERN pPmPattern = NULL;
    ULONG                   Signature = 0;
    ULONG                   CopyLength = 0;

    DebugPrint(TRACE, DBG_POWER, "--> NICAddWakeUpPattern\n");
    
    do
    {
        pPmPattern = (PNDIS_PM_PACKET_PATTERN) InformationBuffer;

        if (InformationBufferLength < sizeof(NDIS_PM_PACKET_PATTERN))
        {
            status = STATUS_BUFFER_TOO_SMALL;
            
            *BytesNeeded = sizeof(NDIS_PM_PACKET_PATTERN);
            break;
        }
        if (InformationBufferLength < pPmPattern->PatternOffset + pPmPattern->PatternSize)
        {
            status = STATUS_BUFFER_TOO_SMALL;
            
            *BytesNeeded = pPmPattern->PatternOffset + pPmPattern->PatternSize;
            break;
        }

        *BytesRead = pPmPattern->PatternOffset + pPmPattern->PatternSize;
        
        //
        // Calculate the e100 signature
        //
        status = MPCalculateE100PatternForFilter (
            (PUCHAR)pPmPattern+ pPmPattern->PatternOffset,
            pPmPattern->PatternSize,
            (PUCHAR)pPmPattern +sizeof(NDIS_PM_PACKET_PATTERN),
            pPmPattern->MaskSize,
            &Signature );
        
        if ( status != STATUS_SUCCESS)
        {
            break;
        }

        CopyLength = pPmPattern->PatternOffset + pPmPattern->PatternSize;
        
        //
        // Allocate the memory to hold the WakeUp Pattern
        //
        AllocationLength = sizeof (MP_WAKE_PATTERN) + CopyLength;
        
        pWakeUpPattern = ExAllocatePoolWithTag(NonPagedPool, AllocationLength, PCIDRV_POOL_TAG);

        if (!pWakeUpPattern)
        {
            break;
        }

        //
        // Initialize pWakeUpPattern
        //
        RtlZeroMemory (pWakeUpPattern, AllocationLength);

        pWakeUpPattern->AllocationSize = AllocationLength;
        
        pWakeUpPattern->Signature = Signature;

        //
        // Copy the pattern into local memory
        //
        RtlMoveMemory (&pWakeUpPattern->Pattern[0], InformationBuffer, CopyLength);

        ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
        
        //
        // Insert the pattern into the list 
        //
        ExInterlockedInsertHeadList (&FdoData->PoMgmt.PatternList, 
                                        &pWakeUpPattern->linkListEntry, 
                                        &FdoData->Lock);

        status = STATUS_SUCCESS;

    } while (FALSE);

    DebugPrint(TRACE, DBG_POWER, "<-- NICAddWakeUpPattern\n");

    return status;
}

NTSTATUS
NICRemoveWakeUpPattern(
    IN PFDO_DATA  FdoData,
    IN PVOID        InformationBuffer, 
    IN UINT         InformationBufferLength,
    OUT PULONG      BytesRead,
    OUT PULONG      BytesNeeded
    )
/*++
Routine Description:

    This routine will walk the list of wake up pattern and attempt to match the wake up pattern. 
    If it finds a copy , it will remove that WakeUpPattern     

Arguments:
    
    FdoData                 FdoData structure
    InformationBuffer       Wake up Pattern
    InformationBufferLength Wake Up Pattern Length
    
Return Value:

    Success - if successful.
    STATUS_UNSUCCESSFUL - if memory allocation fails. 
    
--*/
{

    NTSTATUS              status = STATUS_UNSUCCESSFUL;
    PNDIS_PM_PACKET_PATTERN  pReqPattern = (PNDIS_PM_PACKET_PATTERN)InformationBuffer;
    PLIST_ENTRY              pPatternEntry = ListNext(&FdoData->PoMgmt.PatternList) ;

    DebugPrint(TRACE, DBG_POWER, "--> NICRemoveWakeUpPattern\n");

    do
    {
        
        if (InformationBufferLength < sizeof(NDIS_PM_PACKET_PATTERN))
        {
            status = STATUS_BUFFER_TOO_SMALL;
            
            *BytesNeeded = sizeof(NDIS_PM_PACKET_PATTERN);
            break;
        }
        if (InformationBufferLength < pReqPattern->PatternOffset + pReqPattern->PatternSize)
        {
            status = STATUS_BUFFER_TOO_SMALL;
            
            *BytesNeeded = pReqPattern->PatternOffset + pReqPattern->PatternSize;
            break;
        }
        
        *BytesRead = pReqPattern->PatternOffset + pReqPattern->PatternSize;
     
        while (pPatternEntry != (&FdoData->PoMgmt.PatternList))
        {
            BOOLEAN                  bIsThisThePattern = FALSE;
            PMP_WAKE_PATTERN         pWakeUpPattern = NULL;
            PNDIS_PM_PACKET_PATTERN  pCurrPattern = NULL;;

            //
            // initialize local variables
            //
            pWakeUpPattern = CONTAINING_RECORD(pPatternEntry, MP_WAKE_PATTERN, linkListEntry);

            pCurrPattern = (PNDIS_PM_PACKET_PATTERN)&pWakeUpPattern->Pattern[0];

            //
            // increment the iterator
            //
            pPatternEntry = ListNext (pPatternEntry);

            //
            // Begin Check : Is (pCurrPattern  == pReqPattern) 
            //
            bIsThisThePattern = MPAreTwoPatternsEqual(pReqPattern, pCurrPattern);
                                                      

            if (bIsThisThePattern == TRUE)
            {
                //
                // we have a match - remove the entry
                //
                RemoveEntryList (&pWakeUpPattern->linkListEntry);

                //
                // Free the entry
                //
                ExFreePoolWithTag(pWakeUpPattern, PCIDRV_POOL_TAG);
                
                status = STATUS_SUCCESS;
                break;
            }

        } 
    }
    while (FALSE);

    DebugPrint(TRACE, DBG_POWER, "<-- NICRemoveWakeUpPattern\n");
    
    return status;
}



VOID
NICRemoveAllWakeUpPatterns(
    PFDO_DATA FdoData
    )
/*++
Routine Description:

    This routine will walk the list of wake up pattern and free it 

Arguments:
    
    FdoData                 FdoData structure
    
Return Value:

    Success - if successful.
    
--*/
{

    PLIST_ENTRY  pPatternEntry = ListNext(&FdoData->PoMgmt.PatternList) ;

    DebugPrint(TRACE, DBG_POWER, "--> NICRemoveAllWakeUpPatterns\n");
    
    while (pPatternEntry != (&FdoData->PoMgmt.PatternList))
    {
        PMP_WAKE_PATTERN  pWakeUpPattern = NULL;

        //
        // initialize local variables
        //
        pWakeUpPattern = CONTAINING_RECORD(pPatternEntry, MP_WAKE_PATTERN,linkListEntry);

        //
        // increment the iterator
        //
        pPatternEntry = ListNext (pPatternEntry);
       
        //
        // Remove the entry from the list
        //
        RemoveEntryList (&pWakeUpPattern->linkListEntry);

        //
        // Free the memory
        //
        ExFreePoolWithTag(pWakeUpPattern, PCIDRV_POOL_TAG);
    } 

    DebugPrint(TRACE, DBG_POWER, "<-- NICRemoveAllWakeUpPatterns\n");
    
}


NTSTATUS
NICConfigureForWakeUp(
    IN PFDO_DATA FdoData,
    IN BOOLEAN  AddPattern
    )
/*++
Routine Description:


Arguments:
    
    FdoData                 FdoData structure
    
Return Value:

    Success - if successful.
    
--*/
{
#define MAX_WAKEUP_PATTERN_LENGTH  128

    UCHAR           Buffer[sizeof(NDIS_PM_PACKET_PATTERN) +
                                MAX_WAKEUP_PATTERN_LENGTH];
    PCHAR           patternBuffer, nextMask, nextPattern;
    ULONG           maskLen;
    PNDIS_PM_PACKET_PATTERN ndisPattern;
    ULONG           bufLen;
    NTSTATUS        status;
    ULONG           unUsed;
    CHAR            wakePattern[]={0xff,0xff,0xff,0xff,0xff,0xff}; //broadcast address
    
    patternBuffer = (PCHAR)&Buffer[0];
    
    ndisPattern = (PNDIS_PM_PACKET_PATTERN)patternBuffer;    
    RtlZeroMemory(ndisPattern, sizeof(NDIS_PM_PACKET_PATTERN));

    
    ndisPattern->PatternSize = sizeof(wakePattern);
    
    maskLen = (ndisPattern->PatternSize-1)/8 + 1;
    
    nextMask = (PCHAR)patternBuffer + sizeof(NDIS_PM_PACKET_PATTERN);

    nextPattern = nextMask + maskLen;
      
    *nextMask = 0x3f;    

    ndisPattern->MaskSize = maskLen;
    ndisPattern->PatternOffset = (ULONG) ((ULONG_PTR) nextPattern - (ULONG_PTR) patternBuffer);

    bufLen = sizeof(NDIS_PM_PACKET_PATTERN) + maskLen + ndisPattern->PatternSize;
    
    RtlCopyMemory(nextPattern, FdoData->CurrentAddress, ETHERNET_ADDRESS_LENGTH);

    if(AddPattern){
        status = NICAddWakeUpPattern(FdoData, Buffer, bufLen, &unUsed, &unUsed);
        if(!NT_SUCCESS(status)){
            DebugPrint(TRACE, DBG_POWER, "NICAddWakeupPattern failed %x\n", status);
        }
    }else{
        status = NICRemoveWakeUpPattern(FdoData, Buffer, bufLen, &unUsed, &unUsed);
        if(!NT_SUCCESS(status)){
            DebugPrint(TRACE, DBG_POWER, "NICRemoveWakeUpPattern failed %x\n", status);
        }        
    }
    
    return status;
}

#if 0
NTSTATUS
NICConfigureForWakeUp(
    IN PFDO_DATA FdoData,
    IN BOOLEAN  AddPattern
    )
{
#define MAX_WAKEUP_PATTERN_LENGTH  128
#define ETHER_IP_ICMP_HEADER_SIZE  14+20+8

    UCHAR           Buffer[sizeof(NDIS_PM_PACKET_PATTERN) +
                                MAX_WAKEUP_PATTERN_LENGTH];
    PCHAR           patternBuffer, nextMask, nextPattern;
    ULONG           maskLen;
    PNDIS_PM_PACKET_PATTERN ndisPattern;
    ULONG           bufLen;
    NTSTATUS        status;
    ULONG           unUsed;
    CHAR            pingPattern[]={'a','b','c','d','e','f','g','h'};
    
    patternBuffer = (PCHAR)&Buffer[0];
    
    ndisPattern = (PNDIS_PM_PACKET_PATTERN)patternBuffer;    
    RtlZeroMemory(ndisPattern, sizeof(NDIS_PM_PACKET_PATTERN));

    
    ndisPattern->PatternSize = ETHER_IP_ICMP_HEADER_SIZE + sizeof(pingPattern);
    
    maskLen = (ndisPattern->PatternSize-1)/8 + 1;
    
    nextMask = (PCHAR)patternBuffer + sizeof(NDIS_PM_PACKET_PATTERN);

    nextPattern = nextMask + maskLen;
      
    *nextMask = 0x0;nextMask++;
    *nextMask = 0x0;nextMask++;
    *nextMask = 0x0;nextMask++;
    *nextMask = 0x0;nextMask++;
    *nextMask = 0x0;nextMask++;
    *nextMask = 0x3f;nextMask++;
    *nextMask = 0x0C;
    
    ndisPattern->MaskSize = maskLen;
    ndisPattern->PatternOffset = (ULONG) ((ULONG_PTR) nextPattern - (ULONG_PTR) patternBuffer);

    bufLen = sizeof(NDIS_PM_PACKET_PATTERN) + maskLen + ndisPattern->PatternSize;
    
    RtlZeroMemory(nextPattern, ETHER_IP_ICMP_HEADER_SIZE);    
    nextPattern += ETHER_IP_ICMP_HEADER_SIZE;
    
    RtlCopyMemory(nextPattern, pingPattern, sizeof(pingPattern));

    if(AddPattern){
        status = MPAddWakeUpPattern(FdoData, Buffer, bufLen, &unUsed, &unUsed);
        if(!NT_SUCCESS(status)){
            DebugPrint(TRACE, DBG_POWER, "MpAddWakeupPattern failed %x\n", status);
        }
    }else{
        status = MPRemoveWakeUpPattern(FdoData, Buffer, bufLen, &unUsed, &unUsed);
        if(!NT_SUCCESS(status)){
            DebugPrint(TRACE, DBG_POWER, "MPRemoveWakeUpPattern failed %x\n", status);
        }        
    }
    
    return status;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三区在线观看| 亚洲欧美经典视频| 国产精品女同一区二区三区| 亚洲嫩草精品久久| 美女在线一区二区| 色欧美乱欧美15图片| 欧美电影免费观看高清完整版在线观看 | 久久久九九九九| 亚洲成人免费av| 成人美女视频在线看| 日韩午夜激情av| 亚洲影院久久精品| 99久久久久久| 国产欧美精品一区| 免费人成精品欧美精品| 在线观看亚洲成人| 亚洲美女屁股眼交3| 国产精品一区二区无线| 欧美乱妇23p| 一区二区成人在线| gogo大胆日本视频一区| 337p粉嫩大胆噜噜噜噜噜91av| 五月激情综合网| 欧美视频一区二区| 一区二区三区在线观看动漫| av一区二区三区| 国产精品久久毛片| 成人白浆超碰人人人人| 国产精品久久久久久久午夜片| 国产九九视频一区二区三区| 欧美电影免费观看完整版| 另类欧美日韩国产在线| 欧美成人a视频| 久久国产麻豆精品| 精品剧情在线观看| 国产成人丝袜美腿| 国产精品剧情在线亚洲| 97精品久久久久中文字幕| 国产精品久久精品日日| 91在线无精精品入口| 亚洲人成网站在线| 欧美在线一区二区| 首页亚洲欧美制服丝腿| 91精品国产欧美一区二区成人 | 日韩欧美国产综合| 九九九久久久精品| 久久久国产午夜精品| 国产成人啪免费观看软件| 欧美国产成人在线| 色婷婷久久久亚洲一区二区三区| 亚洲男同1069视频| 91精品国产欧美一区二区 | 日韩高清欧美激情| 日韩免费电影网站| 国产美女精品在线| 亚洲视频在线一区观看| 欧美在线一区二区三区| 蜜桃视频在线观看一区二区| 91精品国产免费久久综合| 韩国三级中文字幕hd久久精品| 国产清纯白嫩初高生在线观看91 | 国产精品久久久久一区二区三区| 91丝袜高跟美女视频| 香港成人在线视频| 久久久精品人体av艺术| 欧美视频在线一区二区三区 | 青青草国产成人99久久| 国产亚洲婷婷免费| 欧美亚一区二区| 国产专区欧美精品| 亚洲va韩国va欧美va| 久久综合国产精品| 欧美挠脚心视频网站| 国产精选一区二区三区| 一区二区三区中文免费| 久久综合色婷婷| 在线亚洲免费视频| 国产精品1区2区| 日韩福利电影在线观看| 亚洲欧洲日产国产综合网| 91精品国产福利| 91视频观看视频| 国产乱妇无码大片在线观看| 亚洲成av人**亚洲成av**| 国产精品情趣视频| 欧美一级在线免费| 欧美三级一区二区| kk眼镜猥琐国模调教系列一区二区| 午夜精品影院在线观看| 国产精品网站在线观看| 日韩欧美三级在线| 5月丁香婷婷综合| av中文字幕一区| 国产高清久久久久| 久久国产婷婷国产香蕉| 日韩精品免费专区| 亚洲一区二区三区四区五区中文| 国产精品久久午夜夜伦鲁鲁| 日韩视频免费观看高清在线视频| 色8久久人人97超碰香蕉987| 国产成人免费视频网站| 久久精品国内一区二区三区 | 亚洲欧洲日韩女同| 国产欧美综合在线观看第十页| 欧美成人欧美edvon| 欧美一区二区成人6969| 在线播放91灌醉迷j高跟美女| 99精品国产一区二区三区不卡| 狠狠色综合色综合网络| 日本亚洲天堂网| 麻豆一区二区三| 秋霞午夜av一区二区三区| 亚洲亚洲人成综合网络| 亚洲精品国产一区二区精华液| 综合久久久久久久| 国产精品国产馆在线真实露脸| 国产三级精品三级| 日本一区二区三区电影| 亚洲国产岛国毛片在线| 国产欧美视频一区二区| 国产精品免费网站在线观看| 国产欧美一区二区三区网站| 国产天堂亚洲国产碰碰| 欧美国产日韩精品免费观看| 国产亚洲精品aa午夜观看| 久久精品在这里| 中文字幕中文字幕一区二区| 亚洲视频在线一区二区| 亚洲一区二区三区影院| 日本va欧美va瓶| 国产综合色在线| 不卡影院免费观看| 欧美三日本三级三级在线播放| 欧美猛男男办公室激情| 日韩欧美一级在线播放| 国产人成亚洲第一网站在线播放| 亚洲欧美日韩一区二区三区在线观看| 亚洲欧美日韩小说| 麻豆91免费看| 成人av手机在线观看| 91久久精品一区二区二区| 91精品国产综合久久久久久漫画 | 蜜臀久久99精品久久久画质超高清| 欧美tickling网站挠脚心| 欧美精品一区在线观看| 中文字幕乱码久久午夜不卡| 亚洲色图制服诱惑| 五月婷婷久久综合| 床上的激情91.| 欧美人xxxx| 国产婷婷色一区二区三区四区 | 亚洲欧洲日韩av| 亚洲国产成人高清精品| 精品一区二区三区欧美| www.日韩av| 日韩美女视频一区二区在线观看| 国产调教视频一区| 日韩精品乱码av一区二区| 从欧美一区二区三区| 日韩一卡二卡三卡| 亚洲三级在线播放| 激情综合网av| 欧美视频在线不卡| 中文字幕av一区 二区| 免费看日韩a级影片| 99国内精品久久| 久久午夜羞羞影院免费观看| 亚洲一卡二卡三卡四卡无卡久久| 国产美女视频91| 欧美一区二区精美| 亚洲国产综合色| 成人av在线一区二区三区| 日韩美女天天操| 日韩精品成人一区二区在线| 91在线国产福利| 国产精品沙发午睡系列990531| 日本中文字幕一区二区视频| 一本到不卡精品视频在线观看| 2021国产精品久久精品| 蜜桃精品在线观看| 欧美日韩日本视频| 亚洲永久免费av| 91精品1区2区| 亚洲色图视频免费播放| 成人午夜精品在线| 国产婷婷一区二区| 国产麻豆精品视频| 亚洲精品一区二区精华| 毛片av一区二区三区| 91精品国产品国语在线不卡| 亚洲v日本v欧美v久久精品| 91污在线观看| 亚洲激情欧美激情| 色av成人天堂桃色av| 亚洲精品一二三| 日本乱码高清不卡字幕| 亚洲欧美日韩综合aⅴ视频| 91视频一区二区| 亚洲免费观看在线视频| 色综合网站在线|