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

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

?? diskperf.c

?? U盤過濾驅動,仿DDK例子diskperf改寫,實現U盤的只讀操作,供初學者參考
?? C
?? 第 1 頁 / 共 5 頁
字號:
            break;

        }

        default:
            DBGOUT((3,
               "DiskPerfDispatchPnp: Forwarding irp"));
            //
            // Simply forward all other Irps
            //
            return DiskPerfSendToNextDriver(DeviceObject, Irp);

    }

    return status;

} // end DiskPerfDispatchPnp()


NTSTATUS
DiskPerfIrpCompletion(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )

/*++

Routine Description:

    Forwarded IRP completion routine. Set an event and return
    STATUS_MORE_PROCESSING_REQUIRED. Irp forwarder will wait on this
    event and then re-complete the irp after cleaning up.

Arguments:

    DeviceObject is the device object of the WMI driver
    Irp is the WMI irp that was just completed
    Context is a PKEVENT that forwarder will wait on

Return Value:

    STATUS_MORE_PORCESSING_REQUIRED

--*/

{
    PKEVENT Event = (PKEVENT) Context;

    UNREFERENCED_PARAMETER(DeviceObject);
    UNREFERENCED_PARAMETER(Irp);

    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);

    return(STATUS_MORE_PROCESSING_REQUIRED);

} // end DiskPerfIrpCompletion()


NTSTATUS
DiskPerfStartDevice(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    This routine is called when a Pnp Start Irp is received.
    It will schedule a completion routine to initialize and register with WMI.

Arguments:

    DeviceObject - a pointer to the device object

    Irp - a pointer to the irp


Return Value:

    Status of processing the Start Irp

--*/
{
    PDEVICE_EXTENSION   deviceExtension;
    KEVENT              event;
    NTSTATUS            status;

    PAGED_CODE();

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    status = DiskPerfForwardIrpSynchronous(DeviceObject, Irp);

    DiskPerfSyncFilterWithTarget(DeviceObject,
                                 deviceExtension->TargetDeviceObject);

    //
    // Complete WMI registration
    //
    DiskPerfRegisterDevice(DeviceObject);

    //
    // Complete the Irp
    //
    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return status;
}


NTSTATUS
DiskPerfRemoveDevice(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    This routine is called when the device is to be removed.
    It will de-register itself from WMI first, detach itself from the
    stack before deleting itself.

Arguments:

    DeviceObject - a pointer to the device object

    Irp - a pointer to the irp


Return Value:

    Status of removing the device

--*/
{
    NTSTATUS            status;
    PDEVICE_EXTENSION   deviceExtension;
    PWMILIB_CONTEXT     wmilibContext;

    PAGED_CODE();

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    //
    // Remove registration with WMI first
    //
    IoWMIRegistrationControl(DeviceObject, WMIREG_ACTION_DEREGISTER);

    //
    // quickly zero out the count first to invalid the structure
    //
    wmilibContext = &deviceExtension->WmilibContext;
    InterlockedExchange(
        (PLONG) &(wmilibContext->GuidCount),
        (LONG) 0);
    RtlZeroMemory(wmilibContext, sizeof(WMILIB_CONTEXT));

    status = DiskPerfForwardIrpSynchronous(DeviceObject, Irp);

    IoDetachDevice(deviceExtension->TargetDeviceObject);
    IoDeleteDevice(DeviceObject);

    //
    // Complete the Irp
    //
    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    return status;
}


NTSTATUS
DiskPerfSendToNextDriver(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )

/*++

Routine Description:

    This routine sends the Irp to the next driver in line
    when the Irp is not processed by this driver.

Arguments:

    DeviceObject
    Irp

Return Value:

    NTSTATUS

--*/

{
    PDEVICE_EXTENSION   deviceExtension;

    IoSkipCurrentIrpStackLocation(Irp);
    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    return IoCallDriver(deviceExtension->TargetDeviceObject, Irp);

} // end DiskPerfSendToNextDriver()

NTSTATUS
DiskPerfDispatchPower(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    PDEVICE_EXTENSION deviceExtension;

    PoStartNextPowerIrp(Irp);
    IoSkipCurrentIrpStackLocation(Irp);

    deviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
    return PoCallDriver(deviceExtension->TargetDeviceObject, Irp);

} // end DiskPerfDispatchPower

NTSTATUS
DiskPerfForwardIrpSynchronous(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )

/*++

Routine Description:

    This routine sends the Irp to the next driver in line
    when the Irp needs to be processed by the lower drivers
    prior to being processed by this one.

Arguments:

    DeviceObject
    Irp

Return Value:

    NTSTATUS

--*/

{
    PDEVICE_EXTENSION   deviceExtension;
    KEVENT event;
    NTSTATUS status;

    KeInitializeEvent(&event, NotificationEvent, FALSE);
    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    //
    // copy the irpstack for the next device
    //

    IoCopyCurrentIrpStackLocationToNext(Irp);

    //
    // set a completion routine
    //

    IoSetCompletionRoutine(Irp, DiskPerfIrpCompletion,
                            &event, TRUE, TRUE, TRUE);

    //
    // call the next lower device
    //

    status = IoCallDriver(deviceExtension->TargetDeviceObject, Irp);

    //
    // wait for the actual completion
    //

    if (status == STATUS_PENDING) {
        KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
        status = Irp->IoStatus.Status;
    }

    return status;

} // end DiskPerfForwardIrpSynchronous()


NTSTATUS
DiskPerfCreate(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )

/*++

Routine Description:

    This routine services open commands. It establishes
    the driver's existance by returning status success.

Arguments:

    DeviceObject - Context for the activity.
    Irp          - The device control argument block.

Return Value:

    NT Status

--*/

{
    PAGED_CODE();

    UNREFERENCED_PARAMETER(DeviceObject);
    Irp->IoStatus.Status = STATUS_SUCCESS;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return STATUS_SUCCESS;

} // end DiskPerfCreate()


/*++

Routine Description:

This is the driver entry point for read and write requests
to disks to which the diskperf driver has attached.
This driver collects statistics and then sets a completion
routine so that it can collect additional information when
the request completes. Then it calls the next driver below
it.

Arguments:

DeviceObject
Irp

Return Value:

NTSTATUS

--*/

NTSTATUS
DiskPerfReadWrite(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )

//完成一個IRP必須先填充IoStatus塊的Status和Information成員,
//然后調用IoCompleteRequest例程。Status值就是NTSTATUS.H中定義的狀態代碼
//而Information值要取決于你完成的是何種類型的IRP以及是成功還是失敗。
//通常情況下,如果IRP完成失敗(即,完成的結果是某種錯誤狀態),你應把Information域置0。
//返回STATUS_MEDIA_WRITE_PROTECTED不會出現延緩寫入失敗。 
{
    PDEVICE_EXTENSION  deviceExtension = DeviceObject->DeviceExtension;
    PIO_STACK_LOCATION currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
    PIO_STACK_LOCATION nextIrpStack = IoGetNextIrpStackLocation(Irp);
    ULONG              processor = (ULONG) KeGetCurrentProcessorNumber();
    PDISK_PERFORMANCE  partitionCounters = NULL;
    LONG               queueLen;
    PLARGE_INTEGER     timeStamp;
	NTSTATUS		   status; // by sun define;
	ULONG BytesTxd = 0;// by sun define

    if (deviceExtension->DiskCounters != NULL) {
        partitionCounters = (PDISK_PERFORMANCE)
                            ((PCHAR) deviceExtension->DiskCounters
                                + (processor*PROCESSOR_COUNTERS_SIZE));
    }


    //
    // Device is not initialized properly. Blindly pass the irp along
    //
    if (deviceExtension->CountersEnabled <= 0 ||
        deviceExtension->PhysicalDeviceNameBuffer[0] == 0 ||
        partitionCounters == NULL) {
        return DiskPerfSendToNextDriver(DeviceObject, Irp);
    }

	//////////////////////////////////////////////////////////////////////////

	//if( ( currentIrpStack->MajorFunction == IRP_MJ_WRITE ) && IsReadOnly )
	//{

	//	DbgPrint(("Read only by sun \n"));
	//	status = STATUS_MEDIA_WRITE_PROTECTED;
	//	Irp->IoStatus.Status = status;
	//	Irp->IoStatus.Information = BytesTxd;
	//	IoCompleteRequest(Irp,IO_NO_INCREMENT );// IO_NO_INCREMENT

	//	return status;

	//}

	//////////////////////////////////////////////////////////////////////////

    //
    // Increment queue depth counter.
    //

    queueLen = InterlockedIncrement(&deviceExtension->QueueDepth);

    //
    // Copy current stack to next stack.
    //

    *nextIrpStack = *currentIrpStack;

    //
    // Time stamp current request start.
    //

    timeStamp = (PLARGE_INTEGER) &currentIrpStack->Parameters.Read;
    DiskPerfGetClock(*timeStamp, NULL);
    DBGOUT((10, "DiskPerfReadWrite: TS=%I64u\n", *timeStamp));

    if (queueLen == 1) {
        partitionCounters->IdleTime.QuadPart
            += timeStamp->QuadPart -
                deviceExtension->LastIdleClock.QuadPart;
        deviceExtension->LastIdleClock.QuadPart = timeStamp->QuadPart;
    }

    //
    // Set completion routine callback.
    //

    IoSetCompletionRoutine(Irp,
                           DiskPerfIoCompletion,
                           DeviceObject,
                           TRUE,
                           TRUE,
                           TRUE);

    //
    // Return the results of the call to the disk driver.
    //

    return IoCallDriver(deviceExtension->TargetDeviceObject,
                        Irp);
} // end DiskPerfReadWrite()


NTSTATUS
DiskPerfIoCompletion(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp,
    IN PVOID          Context
    )

/*++

Routine Description:

    This routine will get control from the system at the completion of an IRP.
    It will calculate the difference between the time the IRP was started
    and the current time, and decrement the queue depth.

Arguments:

    DeviceObject - for the IRP.
    Irp          - The I/O request that just completed.
    Context      - Not used.

Return Value:

    The IRP status.

--*/

{
    PDEVICE_EXTENSION  deviceExtension   = DeviceObject->DeviceExtension;
    PIO_STACK_LOCATION irpStack          = IoGetCurrentIrpStackLocation(Irp);
    PDISK_PERFORMANCE  partitionCounters;
    LARGE_INTEGER      timeStampComplete;
    PLARGE_INTEGER     difference;
    KIRQL              currentIrql;
    LONG               queueLen;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区欧美精品| 成人精品鲁一区一区二区| 一区二区三区免费观看| 欧美国产日韩精品免费观看| 久久嫩草精品久久久久| 精品美女在线观看| 精品福利一二区| 久久亚洲私人国产精品va媚药| 欧美一区二区三区喷汁尤物| 欧美一区二区三区白人| 3d成人动漫网站| 日韩三级在线观看| 精品国产乱码久久久久久牛牛| 欧美大片在线观看一区| 欧美精品一区二区三区久久久| 精品国产一区二区三区久久影院 | 欧美影院午夜播放| 欧洲精品一区二区三区在线观看| 99精品1区2区| 色综合中文综合网| 国产精品久久久久天堂| 中文字幕一区二区三区在线播放| 日韩毛片视频在线看| 亚洲另类中文字| 午夜不卡av在线| 久久国产精品第一页| 国产精品中文欧美| 99综合影院在线| 欧美日韩一级大片网址| 欧美电视剧免费观看| 亚洲国产精品精华液ab| 一区二区三区成人| 免费不卡在线观看| 成人亚洲精品久久久久软件| 色狠狠综合天天综合综合| 欧美日韩成人一区| 久久蜜桃一区二区| 亚洲男人的天堂av| 日韩电影在线观看一区| 国产一区二区伦理| 色999日韩国产欧美一区二区| 欧美老肥妇做.爰bbww| 久久久久久久久免费| 亚洲精品第一国产综合野| 免费成人在线影院| 99在线精品免费| 欧美一区二区不卡视频| 中文字幕不卡的av| 丝袜美腿亚洲综合| 成人黄色小视频| 91麻豆精品国产无毒不卡在线观看| 国产午夜精品理论片a级大结局| 一区二区三区高清在线| 国产精品自拍一区| 欧美自拍丝袜亚洲| 亚洲国产精品国自产拍av| 香蕉成人啪国产精品视频综合网| 国产一区二区三区免费观看| 欧美这里有精品| 国产日韩三级在线| 免费看精品久久片| 在线观看一区二区视频| 久久久久久日产精品| 午夜av区久久| 日本道免费精品一区二区三区| 精品国产污污免费网站入口 | 亚洲欧洲成人精品av97| 日本不卡视频在线观看| 91丨九色丨蝌蚪丨老版| 日韩欧美国产wwwww| 亚洲综合激情另类小说区| 国产成人精品一区二区三区网站观看| 欧美二区三区的天堂| 亚洲色图另类专区| 国产在线麻豆精品观看| 555www色欧美视频| 亚洲六月丁香色婷婷综合久久 | 精品视频123区在线观看| 国产欧美日韩精品一区| 精一区二区三区| 欧美日韩国产成人在线91| 亚洲色图视频网| 成人理论电影网| 久久精品视频一区二区三区| 麻豆成人在线观看| 欧美高清视频一二三区| 亚洲自拍另类综合| 99这里只有久久精品视频| 国产日韩欧美精品一区| 国产一区欧美二区| 精品国产青草久久久久福利| 日本一区中文字幕| 欧美裸体一区二区三区| 亚洲欧美日韩国产一区二区三区| 成人永久免费视频| 欧美激情一区二区三区在线| 九九精品视频在线看| 日韩精品一区国产麻豆| 青青草国产精品97视觉盛宴| 欧美久久免费观看| 日韩不卡一区二区三区| 91精品久久久久久蜜臀| 视频在线观看一区二区三区| 欧美日韩精品久久久| 午夜激情综合网| 日韩一区二区三区视频在线观看| 日韩福利视频导航| 欧美xxxxxxxx| 极品尤物av久久免费看| 国产夜色精品一区二区av| 国产精品456露脸| 国产精品女同互慰在线看| 成人午夜免费av| 1区2区3区国产精品| 色综合天天性综合| 亚洲一区二区视频在线| 欧美日韩国产高清一区二区三区| 三级成人在线视频| 欧美成人精品高清在线播放| 韩国欧美国产1区| 国产精品视频九色porn| www.激情成人| 一区二区三区高清| 欧美一区二区福利在线| 国内精品国产三级国产a久久| 国产欧美日韩视频在线观看| 99久久免费视频.com| 亚洲成人免费视频| 精品成人一区二区三区| 国产99久久久国产精品潘金| 亚洲欧美日韩电影| 日韩一区二区在线观看| 国产成人三级在线观看| 1000部国产精品成人观看| 欧美日韩电影在线播放| 国产精品一区二区免费不卡 | 亚洲精品自拍动漫在线| 欧美午夜精品电影| 久久99国产乱子伦精品免费| 国产亚洲污的网站| 在线观看日韩一区| 久久精品国产成人一区二区三区 | 国产视频一区二区在线观看| 色网站国产精品| 99久久免费精品| 日韩va欧美va亚洲va久久| 日本一区二区三区dvd视频在线| 91在线视频官网| 日本女优在线视频一区二区| 久久噜噜亚洲综合| 91搞黄在线观看| 国产在线播放一区| 一区二区三区精品在线观看| 久久无码av三级| 91激情五月电影| 国产精品自在在线| 亚洲国产一区二区在线播放| ww亚洲ww在线观看国产| 欧美影院精品一区| 国v精品久久久网| 日韩黄色小视频| 亚洲少妇30p| 国产午夜精品一区二区| 欧美顶级少妇做爰| 91社区在线播放| 国产一区二区三区在线观看免费 | 日本乱码高清不卡字幕| 精品一区二区三区在线播放| 一区二区在线观看av| 久久久精品影视| 欧美一级二级三级乱码| 色成人在线视频| 国产寡妇亲子伦一区二区| 日韩和的一区二区| 亚洲美女视频在线观看| 欧美激情中文字幕一区二区| 日韩精品一区二区三区中文精品| 欧美体内she精视频| 成人天堂资源www在线| 精品亚洲免费视频| 五月婷婷久久丁香| 亚洲精品欧美激情| 中文幕一区二区三区久久蜜桃| 欧美不卡一区二区三区| 欧美日韩亚洲高清一区二区| 成人不卡免费av| 高清不卡一区二区在线| 激情成人午夜视频| 日韩av一二三| 天天综合网 天天综合色| 亚洲精品乱码久久久久久日本蜜臀| 久久精品一区蜜桃臀影院| 欧美成人艳星乳罩| 欧美成人性福生活免费看| 91精品国产综合久久久蜜臀粉嫩 | 日韩欧美一级在线播放| 欧美日韩大陆一区二区| 精品视频一区 二区 三区| 欧美中文字幕一二三区视频| 色综合久久久久综合99|