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

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

?? diskperf.c

?? U盤過濾驅動,仿DDK例子diskperf改寫,實現U盤的只讀操作,供初學者參考
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*++
Copyright (C) Microsoft Corporation, 1991 - 1999

Module Name:

    diskperf.c

Abstract:

    This driver monitors disk accesses capturing performance data.

Environment:

    kernel mode only

Notes:

--*/


#define INITGUID

#include "ntddk.h"
#include "ntdddisk.h"
#include "stdarg.h"
#include "stdio.h"
#include <ntddvol.h>

#include <mountdev.h>
#include "wmistr.h"
#include "wmidata.h"
#include "wmiguid.h"
#include "wmilib.h"
#include "scsi.h"

#ifdef POOL_TAGGING
#ifdef ExAllocatePool
#undef ExAllocatePool
#endif
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'frPD')
#endif

#define DISKPERF_MAXSTR         64

//////////////////////////////////////////////////////////////////////////
// 控制碼
//
#define DISK_READONLY	\
	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x830, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define DISK_NONREADONLY	\
	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x831, METHOD_BUFFERED, FILE_ANY_ACCESS)


//  是否僅可讀
//

BOOLEAN IsReadOnly = FALSE;

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

//
// Device Extension
//

typedef struct _DEVICE_EXTENSION {

    //
    // Back pointer to device object
    //

    PDEVICE_OBJECT DeviceObject;

    //
    // Target Device Object
    //

    PDEVICE_OBJECT TargetDeviceObject;

    //
    // Physical device object
    //
    PDEVICE_OBJECT PhysicalDeviceObject;

    //
    // Disk number for reference in WMI
    //

    ULONG       DiskNumber;

    //
    // If device is enabled for counting always
    //

    LONG        EnabledAlways;

    //
    // Use to keep track of Volume info from ntddvol.h
    //

    WCHAR StorageManagerName[8];

    //
    // Disk performance counters
    // and locals used to compute counters
    //

    ULONG   Processors;
    PDISK_PERFORMANCE DiskCounters;    // per processor counters
    LARGE_INTEGER LastIdleClock;
    LONG QueueDepth;
    LONG CountersEnabled;

    //
    // must synchronize paging path notifications
    //
    KEVENT PagingPathCountEvent;
    ULONG  PagingPathCount;

    //
    // Physical Device name or WMI Instance Name
    //

    UNICODE_STRING PhysicalDeviceName;
    WCHAR PhysicalDeviceNameBuffer[DISKPERF_MAXSTR];

    //
    // Private context for using WmiLib
    //
    WMILIB_CONTEXT WmilibContext;

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

#define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION)
#define PROCESSOR_COUNTERS_SIZE FIELD_OFFSET(DISK_PERFORMANCE, QueryTime)

/*
Layout of Per Processor Counters is a contiguous block of memory:
    Processor 1
+-----------------------+     +-----------------------+
|PROCESSOR_COUNTERS_SIZE| ... |PROCESSOR_COUNTERS_SIZE|
+-----------------------+     +-----------------------+
where PROCESSOR_COUNTERS_SIZE is less than sizeof(DISK_PERFORMANCE) since
we only put those we actually use for counting.
*/

UNICODE_STRING DiskPerfRegistryPath;


//
// Function declarations
//

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    );

NTSTATUS
DiskPerfForwardIrpSynchronous(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfAddDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PDEVICE_OBJECT PhysicalDeviceObject
    );


NTSTATUS
DiskPerfDispatchPnp(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfDispatchPower(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfStartDevice(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfRemoveDevice(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfSendToNextDriver(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );


NTSTATUS
DiskPerfCreate(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfReadWrite(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

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

NTSTATUS
DiskPerfDeviceControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
DiskPerfShutdownFlush(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

VOID
DiskPerfUnload(
    IN PDRIVER_OBJECT DriverObject
    );

NTSTATUS DiskPerfWmi(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

VOID
DiskPerfLogError(
    IN PDEVICE_OBJECT DeviceObject,
    IN ULONG UniqueId,
    IN NTSTATUS ErrorCode,
    IN NTSTATUS Status
    );

NTSTATUS
DiskPerfRegisterDevice(
    IN PDEVICE_OBJECT DeviceObject
    );

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

NTSTATUS
DiskperfQueryWmiRegInfo(
    IN PDEVICE_OBJECT DeviceObject,
    OUT ULONG *RegFlags,
    OUT PUNICODE_STRING InstanceName,
    OUT PUNICODE_STRING *RegistryPath,
    OUT PUNICODE_STRING MofResourceName,
    OUT PDEVICE_OBJECT *Pdo
    );

NTSTATUS
DiskperfQueryWmiDataBlock(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN ULONG GuidIndex,
    IN ULONG InstanceIndex,
    IN ULONG InstanceCount,
    IN OUT PULONG InstanceLengthArray,
    IN ULONG BufferAvail,
    OUT PUCHAR Buffer
    );

VOID
DiskPerfSyncFilterWithTarget(
    IN PDEVICE_OBJECT FilterDevice,
    IN PDEVICE_OBJECT TargetDevice
    );

NTSTATUS
DiskperfWmiFunctionControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN ULONG GuidIndex,
    IN WMIENABLEDISABLECONTROL Function,
    IN BOOLEAN Enable
    );

VOID
DiskPerfAddCounters(
    IN OUT PDISK_PERFORMANCE TotalCounters,
    IN PDISK_PERFORMANCE NewCounters,
    IN LARGE_INTEGER Frequency
    );

NTSTATUS
DiskPerfScsi(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp
	);

#if DBG

ULONG DiskPerfDebug = 0;

VOID
DiskPerfDBGOUT(
    ULONG DBGOUTLevel,
    PCCHAR DebugMessage,
    ...
    );

#define DBGOUT(x)   DiskPerfDBGOUT x

#else

#define DBGOUT(x)

#endif

//
// Define the sections that allow for discarding (i.e. paging) some of
// the code.
//

#ifdef ALLOC_PRAGMA
#pragma alloc_text (INIT, DriverEntry)
#pragma alloc_text (PAGE, DiskPerfCreate)
#pragma alloc_text (PAGE, DiskPerfAddDevice)
#pragma alloc_text (PAGE, DiskPerfDispatchPnp)
#pragma alloc_text (PAGE, DiskPerfStartDevice)
#pragma alloc_text (PAGE, DiskPerfRemoveDevice)
#pragma alloc_text (PAGE, DiskPerfUnload)
#pragma alloc_text (PAGE, DiskPerfWmi)
#pragma alloc_text (PAGE, DiskperfQueryWmiRegInfo)
#pragma alloc_text (PAGE, DiskperfQueryWmiDataBlock)
#pragma alloc_text (PAGE, DiskPerfRegisterDevice)
#pragma alloc_text (PAGE, DiskPerfSyncFilterWithTarget)
#pragma alloc_text (PAGE, DiskPerfScsi)
#endif

WMIGUIDREGINFO DiskperfGuidList[] =
{
    { &DiskPerfGuid,
      1,
      0
    }
};

#define DiskperfGuidCount (sizeof(DiskperfGuidList) / sizeof(WMIGUIDREGINFO))

#define USE_PERF_CTR

#ifdef USE_PERF_CTR
#define DiskPerfGetClock(a, b) (a) = KeQueryPerformanceCounter((b))
#else
#define DiskPerfGetClock(a, b) KeQuerySystemTime(&(a))
#endif


/*++

Routine Description:

Installable driver initialization entry point.
This entry point is called directly by the I/O manager to set up the disk
performance driver. The driver object is set up and then the Pnp manager
calls DiskPerfAddDevice to attach to the boot devices.

Arguments:

DriverObject - The disk performance driver object.

RegistryPath - pointer to a unicode string representing the path,
to driver-specific key in the registry.

Return Value:

STATUS_SUCCESS if successful

--*/

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )

{

    ULONG               ulIndex;
    PDRIVER_DISPATCH  * dispatch;
	DbgPrint(("access DriverEntry success in diskperf.c! \n"));
    //
    // Remember registry path
    //

    DiskPerfRegistryPath.MaximumLength = RegistryPath->Length
                                            + sizeof(UNICODE_NULL);
    DiskPerfRegistryPath.Buffer = ExAllocatePool(
                                    PagedPool,
                                    DiskPerfRegistryPath.MaximumLength); // ExAllocatePool 按類型進行申請內存
    if (DiskPerfRegistryPath.Buffer != NULL)
    {
        RtlCopyUnicodeString(&DiskPerfRegistryPath, RegistryPath); // 復制UNICODE STRING 
    } else {
        DiskPerfRegistryPath.Length = 0;
        DiskPerfRegistryPath.MaximumLength = 0;
    }
    //
    // Create dispatch points
    //
    for (ulIndex = 0, dispatch = DriverObject->MajorFunction;
         ulIndex <= IRP_MJ_MAXIMUM_FUNCTION;
         ulIndex++, dispatch++) {

        *dispatch = DiskPerfSendToNextDriver;
    }
	
	
    //
    // Set up the device driver entry points.
    //

    DriverObject->MajorFunction[IRP_MJ_CREATE]          = DiskPerfCreate;
    DriverObject->MajorFunction[IRP_MJ_READ]            = DiskPerfReadWrite;
    DriverObject->MajorFunction[IRP_MJ_WRITE]           = DiskPerfReadWrite;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]  = DiskPerfDeviceControl;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL]  = DiskPerfWmi;

    DriverObject->MajorFunction[IRP_MJ_SHUTDOWN]        = DiskPerfShutdownFlush;
    DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS]   = DiskPerfShutdownFlush;
    DriverObject->MajorFunction[IRP_MJ_PNP]             = DiskPerfDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER]           = DiskPerfDispatchPower;

    DriverObject->DriverExtension->AddDevice            = DiskPerfAddDevice;
    DriverObject->DriverUnload                          = DiskPerfUnload;

	DriverObject->MajorFunction[IRP_MJ_SCSI]			= DiskPerfScsi;
	DbgPrint(("DriverEntry exit! in diskperf.c \n"));


    return(STATUS_SUCCESS);

} // end DriverEntry()

#define FILTER_DEVICE_PROPOGATE_FLAGS            0
#define FILTER_DEVICE_PROPOGATE_CHARACTERISTICS (FILE_REMOVABLE_MEDIA |  \
                                                 FILE_READ_ONLY_DEVICE | \
                                                 FILE_FLOPPY_DISKETTE    \
                                                 )



NTSTATUS
USBSCSICompletion( IN PDEVICE_OBJECT DeviceObject,
				  IN PIRP Irp,
				  IN PVOID Context )
{
	PDEVICE_EXTENSION        deviceExtension;
	NTSTATUS                status;
	PIO_STACK_LOCATION        irpStack;

	PSCSI_REQUEST_BLOCK        CurSrb;
	PMODE_PARAMETER_HEADER    modeData;
	PDEVICE_OBJECT            pDeviceObject;

	PCDB    cdb ;
	UCHAR    opCode;
	KIRQL  IrqLevel;


	PDEVICE_EXTENSION StorExtension = ( PDEVICE_EXTENSION )	DeviceObject->DeviceExtension;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美浪妇xxxx高跟鞋交| 精品国产乱码久久久久久老虎| 欧美性猛片aaaaaaa做受| 精品福利在线导航| 午夜精品影院在线观看| 成人午夜av在线| 欧美日韩成人一区二区| 中文字幕亚洲在| 久草热8精品视频在线观看| 色先锋资源久久综合| 国产欧美视频一区二区| 蜜臀久久99精品久久久久久9 | 亚洲欧美日韩久久| 精品一区二区三区影院在线午夜 | 国产精品免费免费| 老鸭窝一区二区久久精品| 欧美性猛交一区二区三区精品| 中文成人综合网| 国产精品综合网| 日韩欧美视频在线| 日韩国产精品久久久久久亚洲| 日本高清无吗v一区| 中文字幕欧美一| av在线免费不卡| 国产精品美女久久久久久| 丁香婷婷综合激情五月色| 2024国产精品视频| 国产在线精品一区二区不卡了| 精品日韩欧美在线| 韩国三级电影一区二区| 久久亚洲二区三区| 国产精一区二区三区| 欧美精品一区二区三区四区| 蜜臀va亚洲va欧美va天堂| 91精品国产色综合久久ai换脸| 午夜视频在线观看一区| 91麻豆精品91久久久久久清纯| 五月婷婷综合激情| 91精选在线观看| 国内不卡的二区三区中文字幕| 久久久久久久一区| 成人网在线播放| 一区二区三区欧美激情| 欧美日韩在线免费视频| 日韩专区欧美专区| 精品国产一区二区三区久久影院 | 国产成人亚洲综合色影视| 久久亚洲影视婷婷| av影院午夜一区| 一区二区三区**美女毛片| 欧美日韩精品欧美日韩精品一| 日韩av中文在线观看| 欧美成人r级一区二区三区| 国产一区二区三区高清播放| 国产精品三级久久久久三级| 一本到不卡免费一区二区| 亚洲第一福利一区| 26uuu精品一区二区三区四区在线| 国产成人精品影院| 一区二区三区在线视频播放| 5858s免费视频成人| 国产精品91xxx| 亚洲一区免费在线观看| 777奇米四色成人影色区| 国产精选一区二区三区| 一区二区在线观看免费视频播放| 欧美美女一区二区在线观看| 国产一区二区久久| 亚洲精品成人精品456| 日韩欧美资源站| aaa亚洲精品| 麻豆精品一二三| 亚洲手机成人高清视频| 日韩一区二区免费高清| 91麻豆国产自产在线观看| 美女视频一区二区三区| 综合色天天鬼久久鬼色| 日韩精品中午字幕| 色综合视频一区二区三区高清| 男男gaygay亚洲| 亚洲欧美激情小说另类| 精品99一区二区三区| 欧美三级三级三级爽爽爽| 成人高清视频免费观看| 精品亚洲国产成人av制服丝袜| 亚洲自拍欧美精品| 国产精品夫妻自拍| 久久久av毛片精品| 91精品麻豆日日躁夜夜躁| 91影院在线观看| 成人综合在线网站| 国产一区二区免费视频| 奇米精品一区二区三区在线观看 | 精品国产精品网麻豆系列| 色悠悠亚洲一区二区| 国产盗摄一区二区| 麻豆国产精品视频| 亚洲va中文字幕| 国产精品的网站| 国产精品视频在线看| 精品国精品国产| 精品国产污污免费网站入口| 欧美精品视频www在线观看| 色悠悠亚洲一区二区| 91美女福利视频| 91女人视频在线观看| 成人短视频下载| www.色综合.com| 99久久国产免费看| 99综合电影在线视频| 99天天综合性| 色综合天天性综合| 成人av免费在线观看| 成人黄色av网站在线| 99久久精品99国产精品| 91视频免费看| 91麻豆免费观看| 欧美午夜精品一区二区蜜桃| 欧美午夜在线一二页| 欧美三级日本三级少妇99| 欧美久久久久免费| 日韩午夜av一区| 2014亚洲片线观看视频免费| 久久精品人人爽人人爽| 国产午夜亚洲精品不卡| 中文字幕久久午夜不卡| 中文字幕一区二区不卡| 中文字幕制服丝袜一区二区三区| 国产精品久久毛片| 亚洲色图视频免费播放| 午夜视频一区二区三区| 美女脱光内衣内裤视频久久网站 | 亚洲一区成人在线| 丝袜诱惑亚洲看片| 美日韩黄色大片| 国产成人精品1024| 在线观看亚洲一区| 欧美一区二区成人6969| 久久久久久电影| 亚洲综合一区二区精品导航| 午夜视频在线观看一区二区三区| 激情五月激情综合网| 99精品1区2区| 欧美一区二区三区色| 亚洲国产精品国自产拍av| 亚洲专区一二三| 国内精品视频一区二区三区八戒| jiyouzz国产精品久久| 欧美日韩一卡二卡| 欧美国产日韩一二三区| 午夜精品一区二区三区免费视频| 国产精品影音先锋| 欧美这里有精品| 中文字幕av一区二区三区免费看 | **欧美大码日韩| 日韩av一区二区在线影视| 粉嫩av一区二区三区在线播放| 色一情一乱一乱一91av| 久久你懂得1024| 性做久久久久久免费观看 | 久久99国产精品尤物| 91美女福利视频| 国产女同互慰高潮91漫画| 无码av免费一区二区三区试看| 国产成人免费视频网站高清观看视频 | 北条麻妃国产九九精品视频| 欧美精品亚洲一区二区在线播放| 国产精品区一区二区三| 久久丁香综合五月国产三级网站| 色先锋久久av资源部| 国产女人aaa级久久久级| 日本视频一区二区| 欧美无砖专区一中文字| 国产精品日日摸夜夜摸av| 免费成人在线网站| 欧美午夜电影网| 亚洲另类在线视频| 成人av中文字幕| 国产三级一区二区| 久久成人免费电影| 日韩欧美中文字幕精品| 婷婷成人激情在线网| 在线观看免费一区| 亚洲色图都市小说| 成人午夜在线免费| 国产亚洲成aⅴ人片在线观看| 美女诱惑一区二区| 日韩视频一区二区| 日本欧美一区二区| 欧美亚洲综合色| 亚洲午夜在线观看视频在线| 日本韩国视频一区二区| 亚洲精品国久久99热| av亚洲精华国产精华| 亚洲国产精品成人久久综合一区| 国产精一区二区三区| 欧美极品美女视频| 99这里只有精品| 亚洲理论在线观看| 欧美日韩大陆一区二区|