summaryrefslogtreecommitdiff
path: root/storage/ramdisk/src/ramdisk.h
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-04-29 09:48:49 -0700
committerDave Wilson <[email protected]>2015-04-29 10:47:29 -0700
commitd40232638faaab19de557e70a3ee938da7a35295 (patch)
tree14e61c973745949af186b7940e3a53d25322f5de /storage/ramdisk/src/ramdisk.h
parent02e5b090a6131a7cc1b90f4a9373117c9e3c7088 (diff)
samples update for //build
Diffstat (limited to 'storage/ramdisk/src/ramdisk.h')
-rw-r--r--storage/ramdisk/src/ramdisk.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/storage/ramdisk/src/ramdisk.h b/storage/ramdisk/src/ramdisk.h
new file mode 100644
index 00000000..764e1094
--- /dev/null
+++ b/storage/ramdisk/src/ramdisk.h
@@ -0,0 +1,196 @@
+/*++
+
+Copyright (c) 1990-2003 Microsoft Corporation, All Rights Reserved
+
+Module Name:
+
+ ramdisk.h
+
+Abstract:
+
+ This file includes data declarations for the Ram Disk driver for NT.
+
+Environment:
+
+ Kernel mode only.
+
+--*/
+
+#ifndef _RAMDISK_H_
+#define _RAMDISK_H_
+
+#pragma warning(disable:4201) // nameless struct/union warning
+
+#include <ntddk.h>
+#include <ntdddisk.h>
+
+#pragma warning(default:4201)
+
+#include <wdf.h>
+#define NTSTRSAFE_LIB
+#include <ntstrsafe.h>
+#include "forward_progress.h"
+
+#define NT_DEVICE_NAME L"\\Device\\Ramdisk"
+#define DOS_DEVICE_NAME L"\\DosDevices\\"
+
+#define RAMDISK_TAG 'DmaR' // "RamD"
+#define DOS_DEVNAME_LENGTH (sizeof(DOS_DEVICE_NAME)+sizeof(WCHAR)*10)
+#define DRIVE_LETTER_LENGTH (sizeof(WCHAR)*10)
+
+#define DRIVE_LETTER_BUFFER_SIZE 10
+#define DOS_DEVNAME_BUFFER_SIZE (sizeof(DOS_DEVICE_NAME) / 2) + 10
+
+#define RAMDISK_MEDIA_TYPE 0xF8
+#define DIR_ENTRIES_PER_SECTOR 16
+
+#define DEFAULT_DISK_SIZE (1024*1024) // 1 MB
+#define DEFAULT_ROOT_DIR_ENTRIES 512
+#define DEFAULT_SECTORS_PER_CLUSTER 2
+#define DEFAULT_DRIVE_LETTER L"Z:"
+
+typedef struct _DISK_INFO {
+ ULONG DiskSize; // Ramdisk size in bytes
+ ULONG RootDirEntries; // No. of root directory entries
+ ULONG SectorsPerCluster; // Sectors per cluster
+ UNICODE_STRING DriveLetter; // Drive letter to be used
+} DISK_INFO, *PDISK_INFO;
+
+typedef struct _DEVICE_EXTENSION {
+ PUCHAR DiskImage; // Pointer to beginning of disk image
+ DISK_GEOMETRY DiskGeometry; // Drive parameters built by Ramdisk
+ DISK_INFO DiskRegInfo; // Disk parameters from the registry
+ UNICODE_STRING SymbolicLink; // Dos symbolic name; Drive letter
+ WCHAR DriveLetterBuffer[DRIVE_LETTER_BUFFER_SIZE];
+ WCHAR DosDeviceNameBuffer[DOS_DEVNAME_BUFFER_SIZE];
+} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
+
+WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_EXTENSION, DeviceGetExtension)
+
+typedef struct _QUEUE_EXTENSION {
+ PDEVICE_EXTENSION DeviceExtension;
+} QUEUE_EXTENSION, *PQUEUE_EXTENSION;
+
+WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUEUE_EXTENSION, QueueGetExtension)
+
+#pragma pack(1)
+
+typedef struct _BOOT_SECTOR
+{
+ UCHAR bsJump[3]; // x86 jmp instruction, checked by FS
+ CCHAR bsOemName[8]; // OEM name of formatter
+ USHORT bsBytesPerSec; // Bytes per Sector
+ UCHAR bsSecPerClus; // Sectors per Cluster
+ USHORT bsResSectors; // Reserved Sectors
+ UCHAR bsFATs; // Number of FATs - we always use 1
+ USHORT bsRootDirEnts; // Number of Root Dir Entries
+ USHORT bsSectors; // Number of Sectors
+ UCHAR bsMedia; // Media type - we use RAMDISK_MEDIA_TYPE
+ USHORT bsFATsecs; // Number of FAT sectors
+ USHORT bsSecPerTrack; // Sectors per Track - we use 32
+ USHORT bsHeads; // Number of Heads - we use 2
+ ULONG bsHiddenSecs; // Hidden Sectors - we set to 0
+ ULONG bsHugeSectors; // Number of Sectors if > 32 MB size
+ UCHAR bsDriveNumber; // Drive Number - not used
+ UCHAR bsReserved1; // Reserved
+ UCHAR bsBootSignature; // New Format Boot Signature - 0x29
+ ULONG bsVolumeID; // VolumeID - set to 0x12345678
+ CCHAR bsLabel[11]; // Label - set to RamDisk
+ CCHAR bsFileSystemType[8];// File System Type - FAT12 or FAT16
+ CCHAR bsReserved2[448]; // Reserved
+ UCHAR bsSig2[2]; // Originial Boot Signature - 0x55, 0xAA
+} BOOT_SECTOR, *PBOOT_SECTOR;
+
+typedef struct _DIR_ENTRY
+{
+ UCHAR deName[8]; // File Name
+ UCHAR deExtension[3]; // File Extension
+ UCHAR deAttributes; // File Attributes
+ UCHAR deReserved; // Reserved
+ USHORT deTime; // File Time
+ USHORT deDate; // File Date
+ USHORT deStartCluster; // First Cluster of file
+ ULONG deFileSize; // File Length
+} DIR_ENTRY, *PDIR_ENTRY;
+
+#pragma pack()
+
+//
+// Directory Entry Attributes
+//
+
+#define DIR_ATTR_READONLY 0x01
+#define DIR_ATTR_HIDDEN 0x02
+#define DIR_ATTR_SYSTEM 0x04
+#define DIR_ATTR_VOLUME 0x08
+#define DIR_ATTR_DIRECTORY 0x10
+#define DIR_ATTR_ARCHIVE 0x20
+
+DRIVER_INITIALIZE DriverEntry;
+
+#if KMDF_VERSION_MINOR >= 7
+
+EVT_WDF_DRIVER_DEVICE_ADD RamDiskEvtDeviceAdd;
+EVT_WDF_DEVICE_CONTEXT_CLEANUP RamDiskEvtDeviceContextCleanup;
+EVT_WDF_IO_QUEUE_IO_READ RamDiskEvtIoRead;
+EVT_WDF_IO_QUEUE_IO_WRITE RamDiskEvtIoWrite;
+EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL RamDiskEvtIoDeviceControl;
+
+#else
+
+NTSTATUS
+RamDiskEvtDeviceAdd(
+ IN WDFDRIVER Driver,
+ IN PWDFDEVICE_INIT DeviceInit
+ );
+
+VOID
+RamDiskEvtDeviceContextCleanup(
+ IN WDFOBJECT Device
+ );
+
+VOID
+RamDiskEvtIoRead(
+ IN WDFQUEUE Queue,
+ IN WDFREQUEST Request,
+ IN size_t Length
+ );
+
+VOID
+RamDiskEvtIoWrite(
+ IN WDFQUEUE Queue,
+ IN WDFREQUEST Request,
+ IN size_t Length
+ );
+
+VOID
+RamDiskEvtIoDeviceControl(
+ IN WDFQUEUE Queue,
+ IN WDFREQUEST Request,
+ IN size_t OutputBufferLength,
+ IN size_t InputBufferLength,
+ IN ULONG IoControlCode
+ );
+
+#endif
+
+VOID
+RamDiskQueryDiskRegParameters(
+ _In_ PWSTR RegistryPath,
+ _In_ PDISK_INFO DiskRegInfo
+ );
+
+NTSTATUS
+RamDiskFormatDisk(
+ IN PDEVICE_EXTENSION DeviceExtension
+ );
+
+BOOLEAN
+RamDiskCheckParameters(
+ IN PDEVICE_EXTENSION devExt,
+ IN LARGE_INTEGER ByteOffset,
+ IN size_t Length
+ );
+
+#endif // _RAMDISK_H_
+