224 lines
4.0 KiB
C
224 lines
4.0 KiB
C
/*++
|
||
|
||
Copyright (c) 1995 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
port.h
|
||
|
||
Abstract:
|
||
|
||
This files defines the necessary structures, defines, and functions for
|
||
the histgram driver.
|
||
|
||
Author:
|
||
|
||
Stephane Plante (t-stephp)
|
||
|
||
Revision History:
|
||
|
||
Jan 30, 1995 -- Created
|
||
|
||
--*/
|
||
|
||
#include "ntddk.h"
|
||
#include "stdarg.h"
|
||
#include "stdio.h"
|
||
#include "ntdddisk.h"
|
||
|
||
#define HISTGRAM_CONFIGURATION 0x1
|
||
#define HISTGRAM_READS 0x2
|
||
#define HISTGRAM_READS_DUMP 0x4
|
||
#define HISTGRAM_WRITES 0x8
|
||
#define HISTGRAM_WRITES_DUMP 0x10
|
||
#define HISTGRAM_IOCTL_SIZE_FAILURE 0x20
|
||
#define HISTGRAM_IOCTL_SIZE_SUCCESS 0x40
|
||
#define HISTGRAM_IOCTL_SIZE_DUMP 0x80
|
||
#define HISTGRAM_IOCTL_DATA_FAILURE 0x100
|
||
#define HISTGRAM_IOCTL_DATA_SUCCESS 0x200
|
||
#define HISTGRAM_IOCTL_DATA_DUMP 0x400
|
||
|
||
#define HISTGRAM_GRANULARITY 0x1
|
||
#define HISTGRAM_TABLESIZE 0x2
|
||
|
||
#if DBG
|
||
extern ULONG HistgramDebug;
|
||
#endif
|
||
|
||
extern UNICODE_STRING HistGramRegistryPath;
|
||
|
||
//
|
||
// 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 PhysicalDevice;
|
||
|
||
//
|
||
// Disk number for reference on repartitioning.
|
||
//
|
||
|
||
ULONG DiskNumber;
|
||
|
||
//
|
||
// Disk Histogram Structure
|
||
//
|
||
|
||
DISK_HISTOGRAM DiskHist;
|
||
|
||
//
|
||
// Request Histogram Structure
|
||
//
|
||
|
||
DISK_HISTOGRAM ReqHist;
|
||
|
||
//
|
||
// Spinlock for counters (physical disks only)
|
||
//
|
||
|
||
KSPIN_LOCK Spinlock;
|
||
|
||
//
|
||
// The driver object for use on repartitioning.
|
||
//
|
||
|
||
PDRIVER_OBJECT DriverObject;
|
||
|
||
//
|
||
// The partition number for the last extension created
|
||
// only maintained in the physical or partition zero extension.
|
||
//
|
||
|
||
ULONG LastPartitionNumber;
|
||
|
||
//
|
||
// This is the variable that enables/disable logging of IRQ
|
||
// information. It is protected by the Spinlock variable and
|
||
// only set when configuring/reconfiguring the device. The
|
||
// ReadWrite routine *must* check this routine before accessing
|
||
// any of the variables inside of the Histograms
|
||
//
|
||
|
||
BOOLEAN HistGramEnable;
|
||
|
||
//
|
||
// This is the Starting Offset of the Partition. This number,
|
||
// added to the offset from the IRP should tell exactly where
|
||
// on the disk we are trying to access
|
||
//
|
||
|
||
LARGE_INTEGER PartitionOffset;
|
||
|
||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
||
|
||
#define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION)
|
||
|
||
|
||
//
|
||
// Function declarations
|
||
//
|
||
|
||
NTSTATUS
|
||
DriverEntry(
|
||
IN PDRIVER_OBJECT DriverObject,
|
||
IN PUNICODE_STRING RegistryPath
|
||
);
|
||
|
||
VOID
|
||
HistGramInitialize(
|
||
IN PDRIVER_OBJECT DriverObject,
|
||
IN PVOID NextDisk,
|
||
IN ULONG Count
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramCreate(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramReadWrite(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramDeviceControl(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramShutdownFlush(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramNewDiskCompletion(
|
||
IN PDEVICE_OBJECT DeviceObject,
|
||
IN PIRP Irp,
|
||
IN PVOID Context
|
||
);
|
||
|
||
VOID
|
||
HistGramDebugPrint(
|
||
ULONG DebugPrintMask,
|
||
PCCHAR DebugMessage,
|
||
...
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramOpenKey(
|
||
IN PHANDLE HandlePtr,
|
||
IN PUNICODE_STRING HistGramPath
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramCreateKey(
|
||
IN PHANDLE HandlePtr,
|
||
IN PUNICODE_STRING HistGramPath
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramReturnRegistryInformation(
|
||
IN PUNICODE_STRING HistGramPath,
|
||
IN PUCHAR ValueName,
|
||
IN OUT PVOID *FreePoolAddress,
|
||
IN OUT PVOID *Information
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramWriteRegistryInformation(
|
||
IN PUNICODE_STRING HistGramPath,
|
||
IN PUCHAR ValueName,
|
||
IN PVOID Information,
|
||
IN ULONG InformationLength,
|
||
IN ULONG Type
|
||
);
|
||
|
||
NTSTATUS
|
||
HistGramConfigure(
|
||
IN PDEVICE_EXTENSION DeviceExtension
|
||
);
|
||
|
||
|