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

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

?? init.c

?? 硬盤驅動程序, 硬盤驅動程序,硬盤驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
    // Read partition table
    //
    partitionList = NULL;

    ntStatus = IoReadPartitionTable(devExt->DeviceObject,
                                    ConfigData->Disk.BytesPerSector,
                                    TRUE,
                                    &partitionList);
    //
    // Check on the status of IoReadPartitionTable()
    //
    if (!NT_SUCCESS(ntStatus))  {

        //
        // IoReadPartitionTable() failed, but force success so we don't
        // unload since we still have partition 0 to support.
        //
        DbgPrint("InitializeDisk: Couldn't read the partition table - status %x\n",ntStatus);

        ntStatus = STATUS_SUCCESS;

    } else {

        //
        // IoReadPartitionTable() didn't return error, so initialize the
        // partition.
        //
        partitionPointer = &devExt->NextPartition;

        //
        // we're assuming a single partition
        //
        partitionNumber = 0;

        //
        // Create the device, with a UNICODE name such as
        // \\Device\Harddisk0\Partition1
        //
        sprintf(partitionNameBuffer,
            "\\Device\\Harddisk%d\\Partition%d",
            *(ConfigData->HardDiskCount),
            partitionNumber + 1);

        //
        // convert the Ansi string into UNICODE
        //
        RtlInitString (&partitionNameString, partitionNameBuffer);

        ntStatus = RtlAnsiStringToUnicodeString(&unicodeString,
                                        &partitionNameString,
                                        TRUE);

        //
        // if we can't get a UNICODE string, we've failed
        //
        if (!NT_SUCCESS(ntStatus)) {

            DbgPrint("InitializeDisk: Couldn't create the partition 1"
                    " partition objects\n");

            goto InitializeDiskExit;
        }

        //
        // Create the device for this partition
        //
        ntStatus = IoCreateDevice(DriverObject,
                                sizeof(PARTITION_DATA),
                                &unicodeString,
                                FILE_DEVICE_DISK,
                                0,
                                FALSE,
                                &partitionObject);

        //
        // Free the UNICODE string no matter the success of IoCreateDevice
        // (so that we don't forget to later on)
        //
        RtlFreeUnicodeString(&unicodeString);

        //
        // Now check the success of IoCreateDevice
        //
        if (!NT_SUCCESS(ntStatus)) {

            DbgPrint("InitializeDisk: Couldn't create the partition 1"
                    " partition devices\n");
            goto InitializeDiskExit;
        }


        //
        // Now initialize the partition object and data.
        //
        partitionObject->Flags |= DO_DIRECT_IO;

        partitionData = partitionObject->DeviceExtension;

        partitionData->PartitionOrdinal =
                partitionData->Pi.PartitionNumber = partitionNumber + 1;

        partitionData->Pi.PartitionType =
                partitionList->PartitionEntry[partitionNumber].PartitionType;

        partitionData->Pi.BootIndicator =
                partitionList->PartitionEntry[partitionNumber].BootIndicator;

        partitionData->Pi.StartingOffset =
                partitionList->PartitionEntry[partitionNumber].StartingOffset;

        partitionData->Pi.PartitionLength =
                partitionList->PartitionEntry[partitionNumber].PartitionLength;

        partitionData->Pi.HiddenSectors =
                partitionList->PartitionEntry[partitionNumber].HiddenSectors;

        partitionData->Partition0 = devExt;

        partitionData->NextPartition = NULL;

        *partitionPointer = partitionObject;
        partitionPointer = &partitionData->NextPartition;

    }   

InitializeDiskExit:

    //
    // We now check on the overall status as we may have reached here
    // through a "goto"
    //

    if (!NT_SUCCESS(ntStatus))  {

        //
        // Delete everything that this routine has allocated.
        //
        // First the chain of partition objects
        //

        if (devExt != NULL) 
        {

            nextPartition = devExt->NextPartition;

            while (nextPartition != NULL) 
            {

                partitionObject = nextPartition;
                partitionData =
                (PPARTITION_DATA)(partitionObject->DeviceExtension);
                nextPartition = partitionData->NextPartition;
                IoDeleteDevice(partitionObject);
            }
        }

        //
        // delete the disk device object
        //

        if (deviceObject != NULL) 
        {

            IoDeleteDevice(deviceObject);
        }

        //
        // delete the object directory.  Since it was temporary, all
        // we have to do is close this single reference
        //

        if (handle != NULL) 
        {

            ZwClose(handle);
        }

    }

    //
    // Delete the buffer allocated for the partition list.
    //

    if (partitionList != NULL) 
    {

        ExFreePool(partitionList);
    }

    //
    // and return our final status
    //

    return ntStatus;
}





///////////////////////////////////////////////////////////////////////////////
//
//	ReportUsage
//
//    This routine builds a resource list and calls IoReportResourceUsage()
//
//	INPUTS:
//
//    ConfigData        - pointer to the configuration data
//    DriverObject      - pointer to our driver object
//
//	OUTPUTS:
//	
//    None.
//
//	RETURNS:
//
//    TRUE if no conflict was reported, otherwise FALSE
//
//      IRQL:
//
//    IRQL_PASSIVE_LEVEL
//
//	NOTES:
//
///////////////////////////////////////////////////////////////////////////////


static BOOLEAN
ReportUsage(IN PDRIVER_OBJECT DriverObject,
            IN PCONFIG_DATA ConfigData)
{

    ULONG size;
    ULONG numDesc;
    PCM_RESOURCE_LIST resourceList;
    PCM_FULL_RESOURCE_DESCRIPTOR nextDesc;
    PCM_PARTIAL_RESOURCE_DESCRIPTOR partial;
    BOOLEAN conflictDetected;

    //
    // determine the size of the resource list
    //
    size = sizeof(CM_FULL_RESOURCE_DESCRIPTOR);

    //
    // The full resource descriptor already contains one
    // partial.  Make room for two more.
    //
    // It will hold the irq "prd", the controller "csr" "prd", and
    // the controller port "prd".
    //
    size += 2*sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
    numDesc = 1;

    //
    // Now we increment the length of the resource list by field offset
    // of the first frd.   This will give us the length of what preceeds
    // the first frd in the resource list.
    //
    size += FIELD_OFFSET(CM_RESOURCE_LIST, List[0]);

    resourceList = ExAllocatePool(PagedPool, size);

    if (!resourceList) {

        return FALSE;
    }

    //
    // Zero out the field
    //
    RtlZeroMemory(resourceList, size);

    //
    // set the count in the resource list
    //
    resourceList->Count = numDesc;

    //
    // get a pointer to the first descriptor off the list
    //
    nextDesc = &resourceList->List[0];

    //
    // set the interfae and bus information
    //
    nextDesc->InterfaceType = ConfigData->InterfaceType;
    nextDesc->BusNumber = ConfigData->BusNumber;

    //
    // We only report 3 items
    //
    nextDesc->PartialResourceList.Count = 3;
    partial = &nextDesc->PartialResourceList.PartialDescriptors[0];

    //
    // fill in the ControllerBase information
    //
    partial->Type = CmResourceTypePort;
    partial->ShareDisposition = CmResourceShareDriverExclusive;
    partial->Flags = CM_RESOURCE_PORT_IO;
    partial->u.Port.Start = ConfigData->OriginalControllerBaseAddress;
    partial->u.Port.Length = ConfigData->RangeOfControllerBase;

    partial++;

    //
    // fill in the ControlPort information
    //
    partial->Type = CmResourceTypePort;
    partial->ShareDisposition = CmResourceShareDriverExclusive;
    partial->Flags = CM_RESOURCE_PORT_IO;
    partial->u.Port.Start = ConfigData->OriginalControlPortAddress;
    partial->u.Port.Length = ConfigData->RangeOfControlPort;

    partial++;

    //
    // fill in the IRQL information
    //
    partial->Type = CmResourceTypeInterrupt;
    partial->u.Interrupt.Level = ConfigData->OriginalControllerIrql;
    partial->u.Interrupt.Vector = ConfigData->OriginalControllerVector;

    partial->ShareDisposition = CmResourceShareDriverExclusive;

    partial->Flags = CM_RESOURCE_INTERRUPT_LATCHED;

    //
    // report the information to the I/O Manager
    //
    IoReportResourceUsage(NULL,
                        DriverObject,
                        resourceList,
                        size,
                        NULL,
                        NULL,
                        0,
                        FALSE,
                        &conflictDetected);

    //
    // cleanup and return
    //
    ExFreePool(resourceList);

    //
    // Note that we return the inverse of the return status of
    // IoReportResourceUsage 
    //
    return !conflictDetected;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av噜噜一区二区三区av| 久久超碰97人人做人人爱| 99国产精品视频免费观看| 成人成人成人在线视频| 国产日韩v精品一区二区| 国产一区二区三区蝌蚪| 欧美图片一区二区三区| 亚洲成人自拍偷拍| 欧美精品久久一区二区三区| 日本欧美肥老太交大片| 51精品视频一区二区三区| 国产一区在线看| 久久亚洲一区二区三区四区| 日本怡春院一区二区| 欧美一级夜夜爽| 激情综合网最新| 中文字幕一区二区三区精华液| 成人av资源在线| 亚洲va欧美va人人爽午夜| 9191成人精品久久| 天堂影院一区二区| 精品国产乱码久久久久久闺蜜| 久草热8精品视频在线观看| 久久精品一级爱片| 91在线国内视频| 婷婷亚洲久悠悠色悠在线播放| 欧美一区二区三区婷婷月色| 粉嫩av一区二区三区| 18欧美乱大交hd1984| 在线视频你懂得一区| 日韩电影一二三区| 国产午夜久久久久| 欧美日韩国产一区二区三区地区| 亚洲自拍欧美精品| 欧美精品日韩一本| 136国产福利精品导航| 国产在线精品一区二区| 成人开心网精品视频| 免费高清视频精品| 日本丶国产丶欧美色综合| 欧美在线短视频| 亚洲精品在线三区| 一区二区三区四区蜜桃| 欧美国产精品中文字幕| 一区二区三区**美女毛片| 成人成人成人在线视频| 91原创在线视频| 久久久一区二区| 一色桃子久久精品亚洲| 亚洲日本护士毛茸茸| 自拍视频在线观看一区二区| 视频一区二区欧美| 国产一区二区在线观看免费| 欧美美女bb生活片| 日韩1区2区日韩1区2区| 91精品国产综合久久小美女| 日本欧美一区二区三区| 欧美成人精品福利| 国产精品99久久久久久久vr | 成人夜色视频网站在线观看| 国产精品嫩草影院com| 91色.com| 国产精品18久久久久久久网站| 欧美mv日韩mv| 91色九色蝌蚪| 蜜臀av一级做a爰片久久| 国产无遮挡一区二区三区毛片日本| 国产成人午夜99999| 亚洲国产成人av| 中文字幕一区二区视频| 久久综合久久综合久久| 94色蜜桃网一区二区三区| 欧美不卡一区二区| 99九九99九九九视频精品| 男女性色大片免费观看一区二区| 亚洲精品一区二区三区99| 91色视频在线| 91农村精品一区二区在线| 国产乱子伦视频一区二区三区| 天天色综合天天| 亚洲国产精品人人做人人爽| 91福利区一区二区三区| 日韩中文字幕91| 亚洲在线成人精品| 一区二区三区在线观看国产| 久久天天做天天爱综合色| 欧美乱熟臀69xxxxxx| 色婷婷久久久久swag精品 | 在线不卡中文字幕播放| 国产一区二区免费视频| 99久久99久久免费精品蜜臀| 中文字幕免费一区| 中文一区在线播放| 亚洲精品一区二区三区四区高清| 成年人国产精品| 97精品国产露脸对白| 国产精品亚洲视频| 麻豆精品国产传媒mv男同| 亚洲影视在线播放| 久久99精品国产.久久久久久| 成人一区二区三区在线观看| 日韩午夜在线观看| 成人免费视频在线观看| 中文字幕色av一区二区三区| 日本欧美加勒比视频| 一本久久精品一区二区| 26uuu久久天堂性欧美| 五月天亚洲婷婷| 不卡av电影在线播放| 欧美丰满嫩嫩电影| 中文字幕永久在线不卡| 久久99精品久久久久婷婷| 色综合天天狠狠| 欧美日韩精品欧美日韩精品 | 成+人+亚洲+综合天堂| 欧美亚洲免费在线一区| 久久久精品蜜桃| 亚洲精品中文在线观看| 中文字幕色av一区二区三区| 色综合天天视频在线观看 | 中文字幕精品综合| 一区二区三区四区在线| 捆绑紧缚一区二区三区视频| 成人av手机在线观看| 欧美妇女性影城| 一区二区三区欧美| 色综合婷婷久久| 国产精品久久看| 床上的激情91.| 国产精品网站一区| 97精品超碰一区二区三区| 欧美精品一区二区三区久久久| 亚洲主播在线观看| 欧美日韩一区国产| 亚洲午夜精品一区二区三区他趣| 一本大道久久a久久精品综合| 国产亚洲欧美一区在线观看| 久久成人麻豆午夜电影| 国产精品一区二区三区99| 欧美肥大bbwbbw高潮| 成人午夜大片免费观看| 亚洲无人区一区| 国产午夜精品一区二区三区嫩草| 国产高清一区日本| 久久午夜老司机| 成人午夜电影网站| 日韩理论片网站| 91精品国产综合久久久久久久| 麻豆极品一区二区三区| 久久综合久久久久88| 日本韩国一区二区| 激情综合色综合久久| 亚洲日本韩国一区| 久久先锋影音av鲁色资源网| 99久久免费国产| 亚洲精品免费在线| 91免费在线视频观看| 国产九色sp调教91| 亚洲一区二区三区中文字幕在线| 在线视频国产一区| 色女孩综合影院| 欧美色精品在线视频| 欧美视频第二页| 欧美一级午夜免费电影| 日韩欧美精品三级| 日韩一区二区在线观看视频 | 欧美在线一区二区| 91在线国内视频| 欧美性淫爽ww久久久久无| 在线看一区二区| 99久久久免费精品国产一区二区| 国产精华液一区二区三区| 蜜臀av一区二区| 狠狠色丁香九九婷婷综合五月| 亚洲国产cao| **网站欧美大片在线观看| 亚洲精选一二三| 亚洲精品视频一区二区| 综合久久久久久| 午夜久久久久久久久| 激情综合网天天干| 国产精品羞羞答答xxdd| 天天操天天干天天综合网| 亚洲图片欧美色图| 亚洲另类色综合网站| 国产女人18毛片水真多成人如厕 | 国产精品欧美久久久久一区二区| 自拍偷拍亚洲综合| 亚洲va欧美va人人爽| 久久久777精品电影网影网| 国产无遮挡一区二区三区毛片日本| 国产精品久久久久aaaa樱花| 亚洲国产一区二区三区| 毛片基地黄久久久久久天堂| 三级久久三级久久久| 日韩电影在线观看一区| 首页综合国产亚洲丝袜| 午夜欧美一区二区三区在线播放| 亚洲成人激情自拍| 精品制服美女久久|