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

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

?? enum.c

?? The Disk sample is used with Classpnp.sys as disk driver. The sample supports Plug and Play, Power M
?? C
?? 第 1 頁 / 共 3 頁
字號:

            if (partitionStyle == PARTITION_STYLE_GPT) {

                DebugPrint ((1, "DiskUpdatePartitions: EFI Partition %ws\n",
                      pdoData->Efi.PartitionName
                      ));
            }
            //
            // no matching entry in the partition list - throw this partition
            // object away
            //

            pdoExtension->CommonExtension.PartitionLength.QuadPart = 0;

            //
            // grab a pointer to the next child before we mark this one as
            // missing since missing devices could vanish at any time.
            //

            oldChildList = pdoExtension->CommonExtension.ChildList;
            pdoExtension->CommonExtension.ChildList = (PVOID) -1;

            //
            // Now tell the class driver that this child is "missing" - this
            // will cause it to be deleted.
            //


            ClassMarkChildMissing(pdoExtension, FALSE);
        }
    }

    //
    // At this point the old child list had best be empty.
    //

    ASSERT(oldChildList == NULL);

    //
    // Iterate through the partition entries and create any partition
    // objects that don't already exist
    //

    partitionOrdinal = 0;
    newPartitionNumber = 0;

    for(partitionNumber = 0;
        partitionNumber < partitionCount;
        partitionNumber++) {

        PDEVICE_OBJECT pdo;

        partitionEntry = &(PartitionList->PartitionEntry[partitionNumber]);

        //
        // Is this partition interesting
        //

        if (partitionStyle == PARTITION_STYLE_MBR) {

            if((partitionEntry->Mbr.PartitionType == PARTITION_ENTRY_UNUSED) ||
               (IsContainerPartition(partitionEntry->Mbr.PartitionType))) {

                continue;
            }
        }

        //
        // Increment the count of interesting partitions
        //

        partitionOrdinal++;
        newPartitionNumber++;

        //
        // Has this already been matched
        //

        if(partitionEntry->PartitionNumber == 0) {

            LONG i;

            //
            // find the first safe partition number for this device
            //

            for(i = 0; i < (LONG) partitionCount; i++) {


                PPARTITION_INFORMATION_EX tmp = &(PartitionList->PartitionEntry[i]);

                if (partitionStyle == PARTITION_STYLE_MBR) {
                    if (tmp->Mbr.PartitionType == PARTITION_ENTRY_UNUSED ||
                        IsContainerPartition(tmp->Mbr.PartitionType)) {
                        continue;
                    }
                } 

                if(tmp->PartitionNumber == newPartitionNumber) {

                    //
                    // Found a matching partition number - increment the count
                    // and restart the scan.
                    //

                    newPartitionNumber++;
                    i = -1;
                    continue;
                }
            }

            //
            // Assign this partition a partition number
            //

            partitionEntry->PartitionNumber = newPartitionNumber;

            DebugPrint((1, "DiskUpdatePartitions: Found new partition #%d, ord %d "
                           "starting at %#016I64x and running for %#016I64x\n",
                           partitionEntry->PartitionNumber,
                           partitionOrdinal,
                           partitionEntry->StartingOffset.QuadPart,
                           partitionEntry->PartitionLength.QuadPart));

            ClassReleaseChildLock(fdoExtension);

            status = DiskCreatePdo(Fdo,
                                   partitionOrdinal,
                                   partitionEntry,
                                   partitionStyle,
                                   &pdo);

            ClassAcquireChildLock(fdoExtension);

            if(!NT_SUCCESS(status)) {

                DebugPrint((1, "DiskUpdatePartitions: error %lx creating "
                               "new PDO for partition ordinal %d, number %d\n",
                               status,
                               partitionOrdinal,
                               partitionEntry->PartitionNumber));

                //
                // don't increment the partition number - we'll try to reuse
                // it for the next child.
                //

                partitionEntry->PartitionNumber = 0;
                newPartitionNumber--;

                continue;
            }

            //
            // mark the new device as enumerated
            //

            pdoExtension = pdo->DeviceExtension;
            pdoExtension->IsMissing = FALSE;

            //
            // This number's taken already - try to scanning the partition
            // table more than once for a new number.
            //

        }
    }

    //
    // ISSUE - 2000/02/09 - math: Review.
    // Is PartitionStyle the only field that needs updating?
    //

    {
        PCOMMON_DEVICE_EXTENSION commonExtension;
        PDISK_DATA diskData;

        commonExtension = Fdo->DeviceExtension;
        diskData = (PDISK_DATA)(commonExtension->DriverData);

        diskData->PartitionStyle = partitionStyle;
    }
        
    ClassReleaseChildLock(fdoExtension);
    return;
}


NTSTATUS
DiskCreatePdo(
    IN PDEVICE_OBJECT Fdo,
    IN ULONG PartitionOrdinal,
    IN PPARTITION_INFORMATION_EX PartitionEntry,
    IN PARTITION_STYLE PartitionStyle,
    OUT PDEVICE_OBJECT *Pdo
    )

/*++

Routine Description:

    This routine will create and initialize a new partition device object
    (PDO) and insert it into the FDO partition list.

Arguments:

    Fdo - a pointer to the functional device object this PDO will be a child
          of

    PartitionOrdinal - the partition ordinal for this PDO

    PartitionEntry - the partition information for this device object

    PartitionStyle - what style of partition table entry PartitionEntry is;
            currently either MBR or EFI

    Pdo - a location to store the pdo pointer upon successful completion

Return Value:

    status

--*/

{
    PFUNCTIONAL_DEVICE_EXTENSION fdoExtension = Fdo->DeviceExtension;

    PDEVICE_OBJECT pdo = NULL;
    PPHYSICAL_DEVICE_EXTENSION pdoExtension = NULL;

    PUCHAR deviceName = NULL;

    PDISK_DATA diskData = fdoExtension->CommonExtension.DriverData;

    ULONG numberListElements;

    NTSTATUS status = STATUS_SUCCESS;

    PAGED_CODE();

    //
    // Create partition object and set up partition parameters.
    //

    status = DiskGenerateDeviceName(FALSE,
                                    fdoExtension->DeviceNumber,
                                    PartitionEntry->PartitionNumber,
                                    &PartitionEntry->StartingOffset,
                                    &PartitionEntry->PartitionLength,
                                    &deviceName);

    if(!NT_SUCCESS(status)) {

        DebugPrint((1, "DiskCreatePdo - Can't generate name %lx\n", status));
        return status;
    }

    DebugPrint((2, "DiskCreatePdo: Create device object %s\n", deviceName));

    status = ClassCreateDeviceObject(Fdo->DriverObject,
                                     deviceName,
                                     Fdo,
                                     FALSE,
                                     &pdo);

    if (!NT_SUCCESS(status)) {

        DebugPrint((1, "DiskEnumerateDevice: Can't create device object for %s\n", deviceName));

        return status;
    }

    //
    // Set up device extension fields.
    //

    pdoExtension = pdo->DeviceExtension;

    //
    // Set up device object fields.
    //

    SET_FLAG(pdo->Flags, DO_DIRECT_IO);

    pdo->StackSize = (CCHAR)
        pdoExtension->CommonExtension.LowerDeviceObject->StackSize + 1;

    //
    // Get pointer to new disk data.
    //

    diskData = (PDISK_DATA) pdoExtension->CommonExtension.DriverData;

    //
    // Set the alignment requirements for the device based on the
    // host adapter requirements
    //

    if (Fdo->AlignmentRequirement > pdo->AlignmentRequirement) {
        pdo->AlignmentRequirement = Fdo->AlignmentRequirement;
    }

    if (fdoExtension->SrbFlags & SRB_FLAGS_QUEUE_ACTION_ENABLE) {
        numberListElements = 30;
    } else {
        numberListElements = 8;
    }

    //
    // Build the lookaside list for srb's for this partition based on
    // whether the adapter and disk can do tagged queueing.  Don't bother to 
    // check the status - this can't fail when called for a PDO.
    //

    ClassInitializeSrbLookasideList((PCOMMON_DEVICE_EXTENSION) pdoExtension,
                                    numberListElements);

    //
    // Set the sense-data pointer in the device extension.
    //

    diskData->PartitionOrdinal = PartitionOrdinal;
    pdoExtension->CommonExtension.PartitionNumber = PartitionEntry->PartitionNumber;

    //
    // Initialize relevant data.
    //
    
    if (PartitionStyle == PARTITION_STYLE_MBR) {
    
        diskData->Mbr.PartitionType = PartitionEntry->Mbr.PartitionType;
        diskData->Mbr.BootIndicator = PartitionEntry->Mbr.BootIndicator;
        diskData->Mbr.HiddenSectors = PartitionEntry->Mbr.HiddenSectors;

    } else {

        diskData->Efi.PartitionType = PartitionEntry->Gpt.PartitionType;
        diskData->Efi.PartitionId = PartitionEntry->Gpt.PartitionType;
        diskData->Efi.Attributes = PartitionEntry->Gpt.Attributes;
        RtlCopyMemory (diskData->Efi.PartitionName,
                       PartitionEntry->Gpt.Name,
                       sizeof (diskData->Efi.PartitionName)
                       );
    }

    DebugPrint((2, "DiskEnumerateDevice: Partition type is %x\n",
        diskData->Mbr.PartitionType));

    pdoExtension->CommonExtension.StartingOffset  =
        PartitionEntry->StartingOffset;

    pdoExtension->CommonExtension.PartitionLength =
        PartitionEntry->PartitionLength;


    DebugPrint((1, "DiskCreatePdo: hidden sectors value for pdo %#p set to %#x\n",
                pdo,
                diskData->Mbr.HiddenSectors));

    //
    // Check for removable media support.
    //

    if (fdoExtension->DeviceDescriptor->RemovableMedia) {
        SET_FLAG(pdo->Characteristics, FILE_REMOVABLE_MEDIA);
    }

    pdoExtension->CommonExtension.DeviceObject = pdo;

    CLEAR_FLAG(pdo->Flags, DO_DEVICE_INITIALIZING);

    *Pdo = pdo;

    return status;
}





VOID
DiskAcquirePartitioningLock(
    IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension
    )
{
    PDISK_DATA diskData = FdoExtension->CommonExtension.DriverData;

    PAGED_CODE();

    ASSERT_FDO(FdoExtension->DeviceObject);

    KeWaitForSingleObject(&(diskData->PartitioningEvent),
                          UserRequest,
                          UserMode,
                          FALSE,
                          NULL);
    return;
}


VOID
DiskReleasePartitioningLock(
    IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension
    )
{
    PDISK_DATA diskData = FdoExtension->CommonExtension.DriverData;

    PAGED_CODE();

    ASSERT_FDO(FdoExtension->DeviceObject);

    KeSetEvent(&(diskData->PartitioningEvent), IO_NO_INCREMENT, FALSE);
    return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品久久精品色综合| 国产一区二区三区黄视频| 麻豆成人在线观看| 成人免费视频视频在线观看免费| 91精品国产色综合久久| 日本一区二区三级电影在线观看| 午夜精品福利一区二区蜜股av | 日韩欧美国产午夜精品| 国产精品网曝门| 免费看日韩a级影片| 欧美色精品天天在线观看视频| 国产精品美女视频| 国产一区二区三区四区五区入口| 欧美在线你懂的| 亚洲天堂免费看| 粉嫩久久99精品久久久久久夜| 欧美一级午夜免费电影| 亚洲一区av在线| 色网综合在线观看| 1区2区3区欧美| 91亚洲精品一区二区乱码| 久久久久久久久免费| 午夜久久福利影院| 欧美日韩精品电影| 亚洲成av人片| 欧美日韩一区成人| 亚洲不卡av一区二区三区| 91视频免费播放| 国产精品久久国产精麻豆99网站| 豆国产96在线|亚洲| 欧美精品一区二区在线观看| 精品亚洲免费视频| 精品久久久久久久久久久久久久久 | 天天综合色天天综合| 91国内精品野花午夜精品| 国产欧美精品一区二区色综合朱莉| 日韩av中文在线观看| 91精品国产入口| 青青青伊人色综合久久| 亚洲免费色视频| 成人99免费视频| 亚洲精品中文字幕在线观看| 色88888久久久久久影院按摩| 亚洲精品水蜜桃| 欧美主播一区二区三区| 午夜精品久久久久久不卡8050| 欧美三日本三级三级在线播放| 亚洲精品成人悠悠色影视| 91久久线看在观草草青青| 一区二区三区资源| 91.xcao| 韩国毛片一区二区三区| 日本一二三四高清不卡| av在线综合网| 亚洲国产日日夜夜| 欧美大片在线观看| 不卡欧美aaaaa| 亚洲激情六月丁香| 欧美一区二区三区日韩| 国内精品免费在线观看| 国产精品乱人伦| 色八戒一区二区三区| 奇米色777欧美一区二区| 久久久精品综合| 色视频一区二区| 美女视频一区在线观看| 久久久久久久久久看片| 日本韩国欧美国产| 捆绑变态av一区二区三区| 国产精品情趣视频| 欧美日韩国产一区| 国产在线观看免费一区| 亚洲精品成人少妇| 精品精品国产高清一毛片一天堂| 成人av资源在线观看| 日韩综合小视频| 国产精品免费久久久久| 在线不卡中文字幕播放| 国产99久久久国产精品免费看| 亚洲与欧洲av电影| 国产日韩欧美一区二区三区综合| 欧洲av一区二区嗯嗯嗯啊| 狠狠色伊人亚洲综合成人| 一区二区不卡在线播放| 国产午夜亚洲精品不卡| 欧美日韩dvd在线观看| 成人中文字幕合集| 麻豆传媒一区二区三区| 一区二区三区久久久| 国产亚洲精品精华液| 在线播放91灌醉迷j高跟美女 | 中文字幕av资源一区| 在线播放日韩导航| 色婷婷综合久久久中文一区二区| 久久精品国产亚洲5555| 一区二区三区四区不卡在线| 亚洲国产精品成人综合色在线婷婷| 在线不卡中文字幕| 欧美天天综合网| 色哟哟日韩精品| www.成人在线| 成人综合婷婷国产精品久久蜜臀| 激情六月婷婷综合| 日本vs亚洲vs韩国一区三区二区| 亚洲国产精品视频| 伊人色综合久久天天| 中文字幕制服丝袜一区二区三区| www亚洲一区| 久久先锋影音av鲁色资源| 日韩欧美一级精品久久| 欧美一二三四在线| 91精品在线一区二区| 欧美日本一区二区| 正在播放一区二区| 91精品免费观看| 欧美一区二区久久| 欧美一区二区三区在线观看| 欧美群妇大交群的观看方式| 欧美亚洲综合一区| 欧美剧情片在线观看| 欧美日韩中文精品| 欧美二区三区91| 日韩三级视频在线观看| 日韩精品在线一区二区| 欧美xxxx老人做受| 国产日韩精品一区二区三区在线| 国产目拍亚洲精品99久久精品| 国产人妖乱国产精品人妖| 日本一区二区三区久久久久久久久不 | 韩国v欧美v亚洲v日本v| 精品一区二区精品| 粉嫩av一区二区三区粉嫩| www.一区二区| 欧美性大战久久| 欧美肥胖老妇做爰| 久久午夜电影网| 亚洲日穴在线视频| 亚洲一区二区不卡免费| 日日骚欧美日韩| 国产在线不卡一卡二卡三卡四卡| 国产精品18久久久久久久久| 99re6这里只有精品视频在线观看| 色婷婷av久久久久久久| 欧美一区二区三区色| 欧美国产视频在线| 亚洲18女电影在线观看| 麻豆成人av在线| 波多野结衣91| 在线播放中文一区| 欧美韩国日本一区| 三级欧美韩日大片在线看| 国产精品一二一区| 欧美探花视频资源| 久久精品一区二区三区不卡牛牛| 国产精品毛片大码女人| 亚洲电影第三页| 国产精品资源在线| 欧美色老头old∨ideo| 久久精品免视看| 午夜精品爽啪视频| 成人美女视频在线观看18| 欧美日韩一区二区三区在线| 久久综合精品国产一区二区三区| 亚洲欧美国产毛片在线| 激情综合网天天干| 欧美在线免费观看视频| 久久久久国产免费免费| 午夜视频在线观看一区| 成人免费毛片app| 欧美本精品男人aⅴ天堂| 亚洲激情六月丁香| 盗摄精品av一区二区三区| 69堂国产成人免费视频| 亚洲欧美视频一区| 成人永久免费视频| 日韩午夜在线观看| 亚洲1区2区3区视频| 91麻豆精东视频| 国产日韩欧美不卡| 极品美女销魂一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 欧美另类高清zo欧美| 中文字幕在线不卡国产视频| 国产中文一区二区三区| 91精品国产综合久久久久久| 亚洲品质自拍视频网站| 国产91丝袜在线观看| 精品剧情在线观看| 视频一区免费在线观看| 精品视频999| 亚洲激情图片小说视频| 91在线视频观看| 亚洲国产成人私人影院tom| 理论片日本一区| 精品国产制服丝袜高跟| 免费观看在线色综合| 欧美一区二区三区小说| 日韩精品一二三| 欧美一级专区免费大片| 全国精品久久少妇|