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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? filedisk.c

?? 網(wǎng)絡(luò)上流傳的filedisk源碼+加密代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:

    KeInitializeSpinLock(&device_extension->list_lock);

    KeInitializeEvent(
        &device_extension->request_event,
        SynchronizationEvent,
        FALSE
        );

    device_extension->terminate_thread = FALSE;

    status = PsCreateSystemThread(
        &thread_handle,
        (ACCESS_MASK) 0L,
        NULL,
        NULL,
        NULL,
        FileDiskThread,
        device_object
        );

    if (!NT_SUCCESS(status))
    {
        IoDeleteDevice(device_object);
        return status;
    }

    status = ObReferenceObjectByHandle(
        thread_handle,
        THREAD_ALL_ACCESS,
        NULL,
        KernelMode,
        &device_extension->thread_pointer,
        NULL
        );

    if (!NT_SUCCESS(status))
    {
        ZwClose(thread_handle);

        device_extension->terminate_thread = TRUE;

        KeSetEvent(
            &device_extension->request_event,
            (KPRIORITY) 0,
            FALSE
            );

        IoDeleteDevice(device_object);

        return status;
    }

    ZwClose(thread_handle);

    return STATUS_SUCCESS;
}

#pragma code_seg("PAGE")

VOID
FileDiskUnload (
    IN PDRIVER_OBJECT DriverObject
    )
{
    PDEVICE_OBJECT device_object;

    PAGED_CODE();

    device_object = DriverObject->DeviceObject;

    while (device_object)
    {
        device_object = FileDiskDeleteDevice(device_object);
    }

    ZwClose(dir_handle);
}

PDEVICE_OBJECT
FileDiskDeleteDevice (
    IN PDEVICE_OBJECT DeviceObject
    )
{
    PDEVICE_EXTENSION   device_extension;
    PDEVICE_OBJECT      next_device_object;

    PAGED_CODE();

    ASSERT(DeviceObject != NULL);

    device_extension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    device_extension->terminate_thread = TRUE;

    KeSetEvent(
        &device_extension->request_event,
        (KPRIORITY) 0,
        FALSE
        );

    KeWaitForSingleObject(
        device_extension->thread_pointer,
        Executive,
        KernelMode,
        FALSE,
        NULL
        );

    ObDereferenceObject(device_extension->thread_pointer);

    if (device_extension->security_client_context != NULL)
    {
        SeDeleteClientSecurity(device_extension->security_client_context);
        ExFreePool(device_extension->security_client_context);
    }

    next_device_object = DeviceObject->NextDevice;

    IoDeleteDevice(DeviceObject);

    return next_device_object;
}

NTSTATUS
FileDiskCreateClose (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    PAGED_CODE();

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = FILE_OPENED;

    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return STATUS_SUCCESS;
}

#pragma code_seg()

NTSTATUS
FileDiskReadWrite (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    PDEVICE_EXTENSION   device_extension;
    PIO_STACK_LOCATION  io_stack;

    device_extension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    if (!device_extension->media_in_device)
    {
        Irp->IoStatus.Status = STATUS_NO_MEDIA_IN_DEVICE;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        return STATUS_NO_MEDIA_IN_DEVICE;
    }

    io_stack = IoGetCurrentIrpStackLocation(Irp);

    if (io_stack->Parameters.Read.Length == 0)
    {
        Irp->IoStatus.Status = STATUS_SUCCESS;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        return STATUS_SUCCESS;
    }

    IoMarkIrpPending(Irp);

    ExInterlockedInsertTailList(
        &device_extension->list_head,
        &Irp->Tail.Overlay.ListEntry,
        &device_extension->list_lock
        );

    KeSetEvent(
        &device_extension->request_event,
        (KPRIORITY) 0,
        FALSE
        );

    return STATUS_PENDING;
}

NTSTATUS
FileDiskDeviceControl (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    PDEVICE_EXTENSION   device_extension;
    PIO_STACK_LOCATION  io_stack;
    NTSTATUS            status;

    device_extension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    io_stack = IoGetCurrentIrpStackLocation(Irp);

    if (!device_extension->media_in_device &&
        io_stack->Parameters.DeviceIoControl.IoControlCode !=
        IOCTL_FILE_DISK_OPEN_FILE)
    {
        Irp->IoStatus.Status = STATUS_NO_MEDIA_IN_DEVICE;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        return STATUS_NO_MEDIA_IN_DEVICE;
    }

    switch (io_stack->Parameters.DeviceIoControl.IoControlCode)
    {
    case IOCTL_FILE_DISK_OPEN_FILE:
        {
            SECURITY_QUALITY_OF_SERVICE security_quality_of_service;

            if (device_extension->media_in_device)
            {
                KdPrint(("FileDisk: IOCTL_FILE_DISK_OPEN_FILE: Media already opened\n"));

                status = STATUS_INVALID_DEVICE_REQUEST;
                Irp->IoStatus.Information = 0;
                break;
            }

            if (io_stack->Parameters.DeviceIoControl.InputBufferLength <
                sizeof(OPEN_FILE_INFORMATION))
            {
                status = STATUS_INVALID_PARAMETER;
                Irp->IoStatus.Information = 0;
                break;
            }

            if (io_stack->Parameters.DeviceIoControl.InputBufferLength <
                sizeof(OPEN_FILE_INFORMATION) +
                ((POPEN_FILE_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->FileNameLength -
                sizeof(UCHAR))
            {
                status = STATUS_INVALID_PARAMETER;
                Irp->IoStatus.Information = 0;
                break;
            }

            if (device_extension->security_client_context != NULL)
            {
                SeDeleteClientSecurity(device_extension->security_client_context);
            }
            else
            {
                device_extension->security_client_context =
                    ExAllocatePool(NonPagedPool, sizeof(SECURITY_CLIENT_CONTEXT));
            }

            RtlZeroMemory(&security_quality_of_service, sizeof(SECURITY_QUALITY_OF_SERVICE));

            security_quality_of_service.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
            security_quality_of_service.ImpersonationLevel = SecurityImpersonation;
            security_quality_of_service.ContextTrackingMode = SECURITY_STATIC_TRACKING;
            security_quality_of_service.EffectiveOnly = FALSE;

            SeCreateClientSecurity(
                PsGetCurrentThread(),
                &security_quality_of_service,
                FALSE,
                device_extension->security_client_context
                );

            IoMarkIrpPending(Irp);

            ExInterlockedInsertTailList(
                &device_extension->list_head,
                &Irp->Tail.Overlay.ListEntry,
                &device_extension->list_lock
                );

            KeSetEvent(
                &device_extension->request_event,
                (KPRIORITY) 0,
                FALSE
                );

            status = STATUS_PENDING;

            break;
        }

    case IOCTL_FILE_DISK_CLOSE_FILE:
        {
            IoMarkIrpPending(Irp);

            ExInterlockedInsertTailList(
                &device_extension->list_head,
                &Irp->Tail.Overlay.ListEntry,
                &device_extension->list_lock
                );

            KeSetEvent(
                &device_extension->request_event,
                (KPRIORITY) 0,
                FALSE
                );

            status = STATUS_PENDING;

            break;
        }

    case IOCTL_DISK_CHECK_VERIFY:
    case IOCTL_CDROM_CHECK_VERIFY:
    case IOCTL_STORAGE_CHECK_VERIFY:
    case IOCTL_STORAGE_CHECK_VERIFY2:
        {
            status = STATUS_SUCCESS;
            Irp->IoStatus.Information = 0;
            break;
        }

    case IOCTL_DISK_GET_DRIVE_GEOMETRY:
    case IOCTL_CDROM_GET_DRIVE_GEOMETRY:
        {
            PDISK_GEOMETRY  disk_geometry;
            ULONGLONG       length;

            if (io_stack->Parameters.DeviceIoControl.OutputBufferLength <
                sizeof(DISK_GEOMETRY))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                Irp->IoStatus.Information = 0;
                break;
            }

            disk_geometry = (PDISK_GEOMETRY) Irp->AssociatedIrp.SystemBuffer;

            length = device_extension->file_information.AllocationSize.QuadPart;

            disk_geometry->Cylinders.QuadPart = length / MM_MAXIMUM_DISK_IO_SIZE;
            disk_geometry->MediaType = FixedMedia;
            disk_geometry->TracksPerCylinder = MM_MAXIMUM_DISK_IO_SIZE / PAGE_SIZE;
            disk_geometry->SectorsPerTrack = PAGE_SIZE / SECTOR_SIZE;
            disk_geometry->BytesPerSector = SECTOR_SIZE;

            status = STATUS_SUCCESS;
            Irp->IoStatus.Information = sizeof(DISK_GEOMETRY);

            break;
        }

    case IOCTL_DISK_GET_LENGTH_INFO:
        {
            PGET_LENGTH_INFORMATION get_length_information;

            if (io_stack->Parameters.DeviceIoControl.OutputBufferLength <
                sizeof(GET_LENGTH_INFORMATION))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                Irp->IoStatus.Information = 0;
                break;
            }

            get_length_information = (PGET_LENGTH_INFORMATION) Irp->AssociatedIrp.SystemBuffer;

            get_length_information->Length.QuadPart =
                device_extension->file_information.AllocationSize.QuadPart;

            status = STATUS_SUCCESS;
            Irp->IoStatus.Information = sizeof(GET_LENGTH_INFORMATION);

        break;
        }

    case IOCTL_DISK_GET_PARTITION_INFO:
        {
            PPARTITION_INFORMATION  partition_information;
            ULONGLONG               length;

            if (io_stack->Parameters.DeviceIoControl.OutputBufferLength <
                sizeof(PARTITION_INFORMATION))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                Irp->IoStatus.Information = 0;
                break;
            }

            partition_information = (PPARTITION_INFORMATION) Irp->AssociatedIrp.SystemBuffer;

            length = device_extension->file_information.AllocationSize.QuadPart;

            partition_information->StartingOffset.QuadPart = SECTOR_SIZE;
            partition_information->PartitionLength.QuadPart = length - SECTOR_SIZE;
            partition_information->HiddenSectors = 1;
            partition_information->PartitionNumber = 0;
            partition_information->PartitionType = 0;
            partition_information->BootIndicator = FALSE;
            partition_information->RecognizedPartition = FALSE;
            partition_information->RewritePartition = FALSE;

            status = STATUS_SUCCESS;
            Irp->IoStatus.Information = sizeof(PARTITION_INFORMATION);

            break;
        }

    case IOCTL_DISK_GET_PARTITION_INFO_EX:
        {
            PPARTITION_INFORMATION_EX   partition_information_ex;
            ULONGLONG                   length;

            if (io_stack->Parameters.DeviceIoControl.OutputBufferLength <
                sizeof(PARTITION_INFORMATION_EX))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                Irp->IoStatus.Information = 0;
                break;
            }

            partition_information_ex = (PPARTITION_INFORMATION_EX) Irp->AssociatedIrp.SystemBuffer;

            length = device_extension->file_information.AllocationSize.QuadPart;

            partition_information_ex->PartitionStyle = PARTITION_STYLE_MBR;
            partition_information_ex->StartingOffset.QuadPart = SECTOR_SIZE;
            partition_information_ex->PartitionLength.QuadPart = length - SECTOR_SIZE;
            partition_information_ex->PartitionNumber = 0;
            partition_information_ex->RewritePartition = FALSE;
            partition_information_ex->Mbr.PartitionType = 0;
            partition_information_ex->Mbr.BootIndicator = FALSE;
            partition_information_ex->Mbr.RecognizedPartition = FALSE;
            partition_information_ex->Mbr.HiddenSectors = 1;

            status = STATUS_SUCCESS;
            Irp->IoStatus.Information = sizeof(PARTITION_INFORMATION_EX);

            break;
        }

    case IOCTL_DISK_IS_WRITABLE:
        {
            if (!device_extension->read_only)
            {
                status = STATUS_SUCCESS;
            }
            else
            {
                status = STATUS_MEDIA_WRITE_PROTECTED;
            }
            Irp->IoStatus.Information = 0;
            break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区av在线播放| 日韩一区二区三区视频在线| 日韩成人av影视| 久久蜜桃av一区二区天堂| 久久精品免费观看| 欧美日高清视频| 韩国成人精品a∨在线观看| 亚洲蜜臀av乱码久久精品| 3d成人h动漫网站入口| 欧美国产精品一区二区| 欧美性大战久久| 国产一区二区三区久久久| 一区二区三区中文字幕精品精品| 日韩视频在线你懂得| 99视频在线观看一区三区| 蜜臂av日日欢夜夜爽一区| 亚洲欧美日韩系列| 久久一区二区视频| 在线免费观看日本欧美| 国产一区在线视频| 亚洲成人777| 日韩欧美国产高清| 欧美日韩中文字幕精品| 成人午夜碰碰视频| 日韩av在线发布| 国产精品久久久久天堂| 精品少妇一区二区三区| 欧美午夜精品一区二区蜜桃| 99久久99久久精品国产片果冻| 久久精品国产精品亚洲红杏| 亚洲丰满少妇videoshd| 一区视频在线播放| 国产欧美日韩久久| 欧美精品免费视频| www.66久久| 国产精品一区二区不卡| 日韩电影一二三区| 亚洲一二三四久久| 一区二区三区自拍| 亚洲欧美日韩在线| 国产欧美日韩激情| 国产视频在线观看一区二区三区 | 欧美色综合网站| 91在线观看高清| 成人黄色777网| 高清不卡在线观看| 久久66热偷产精品| 蜜桃在线一区二区三区| 一区二区三区国产| 亚洲男人的天堂av| 亚洲人成小说网站色在线| 久久久精品一品道一区| 精品国产一区二区三区忘忧草| 欧美美女黄视频| 欧美日韩1区2区| 色妞www精品视频| 色天使色偷偷av一区二区| 色婷婷综合久久久中文字幕| 91视视频在线观看入口直接观看www | 黄色日韩网站视频| 精品一区二区三区在线视频| 久久精品国产精品亚洲红杏| 精品一区二区三区免费| 久久不见久久见免费视频1| 日韩黄色免费电影| 久久精品国产亚洲aⅴ| 日本视频在线一区| 青青草97国产精品免费观看无弹窗版| 欧美又粗又大又爽| 中文字幕免费不卡在线| 免费观看在线综合| 麻豆极品一区二区三区| 久久国内精品自在自线400部| 91成人免费网站| 欧美日韩中文一区| 欧美美女黄视频| 日韩视频免费观看高清完整版 | 成人免费在线视频观看| 国产精品三级久久久久三级| 中文字幕av一区二区三区高| 日韩美女久久久| 一区二区三区蜜桃| 奇米精品一区二区三区在线观看 | 欧美午夜寂寞影院| 欧洲一区在线观看| 91精品免费在线观看| 久久综合九色综合久久久精品综合 | 这里只有精品免费| 精品久久国产老人久久综合| 中文字幕不卡在线播放| 亚洲宅男天堂在线观看无病毒| 日韩精品亚洲一区| 岛国精品在线观看| 99国产精品99久久久久久| 在线亚洲一区二区| 精品人在线二区三区| 欧美videossexotv100| 欧美激情综合五月色丁香| 欧美国产日韩亚洲一区| 午夜久久久久久久久| 国产一区不卡视频| 色婷婷av一区二区三区大白胸| 91精品国产麻豆| 国产农村妇女毛片精品久久麻豆| 中文字幕亚洲一区二区av在线| 日本91福利区| 91麻豆文化传媒在线观看| 精品日韩欧美一区二区| 一区二区三区免费网站| 成人免费高清在线| 久久久综合网站| 日韩在线a电影| 在线观看欧美黄色| 中文字幕色av一区二区三区| 久久99精品久久久久| 欧美日韩国产a| 亚洲视频精选在线| 国产福利91精品一区| 日韩视频不卡中文| 无吗不卡中文字幕| 欧美在线小视频| 亚洲美女屁股眼交3| 顶级嫩模精品视频在线看| 欧美精品一区二区蜜臀亚洲| 婷婷激情综合网| 欧美在线看片a免费观看| 成人免费小视频| aaa欧美日韩| 国产精品乱人伦一区二区| 国产白丝精品91爽爽久久| 精品国产乱码久久久久久牛牛 | 精品国产露脸精彩对白| 亚洲成人1区2区| 欧美精品777| 亚洲一区二区在线免费看| 色一区在线观看| 国产精品亲子伦对白| 国产成人在线影院| 国产视频911| 国产一区二区三区免费观看 | 国产精品人成在线观看免费 | 欧美国产日韩亚洲一区| 国产麻豆日韩欧美久久| 精品欧美久久久| 美女视频免费一区| 精品电影一区二区三区| 蜜臀va亚洲va欧美va天堂| 欧美日韩另类一区| 亚洲国产cao| 欧美精品亚洲一区二区在线播放| 亚洲一区电影777| 在线精品视频免费观看| 亚洲男人都懂的| 欧美挠脚心视频网站| 亚洲午夜日本在线观看| 日韩精品自拍偷拍| 天天综合天天做天天综合| 日韩免费看的电影| 国产成人精品免费网站| 国产精品久久久久婷婷| 欧美日韩激情一区二区| 免费观看在线色综合| 欧美激情一区二区三区四区| 成人免费视频国产在线观看| 一区二区三区不卡在线观看| 成人激情电影免费在线观看| 亚洲视频一区二区在线| 欧美在线一二三四区| 免费观看在线色综合| 欧美国产一区在线| 91视视频在线观看入口直接观看www| 亚洲一区二区三区在线播放| 日韩一区二区三区三四区视频在线观看 | 亚洲精品高清在线| 91精品国产91久久综合桃花 | 成人深夜福利app| 一区二区三区在线播放| 欧美成人猛片aaaaaaa| 久久精品免费观看| 国产精品萝li| 日韩一级完整毛片| 国产成人av电影在线| 日韩成人一区二区| 亚洲精品一区二区三区福利 | av影院午夜一区| 奇米亚洲午夜久久精品| 亚洲色图在线视频| 51精品国自产在线| 国产成人精品1024| 一区二区三区成人| 国产精品久久久爽爽爽麻豆色哟哟| 色欧美片视频在线观看在线视频| 奇米综合一区二区三区精品视频| 91精品国产欧美一区二区18| 不卡视频一二三| 午夜精品在线看| 最新国产精品久久精品| www一区二区| 欧美亚日韩国产aⅴ精品中极品| 国产在线一区二区|