|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 Microsoft Corporation
4:
5: Module Name:
6:
7: ramdisk.h
8:
9: Abstract:
10:
11: This file includes data declarations for the Ram Disk driver for NT.
12:
13: Author:
14:
15: Robert Nelson (RobertN) 10-Mar-1993.
16:
17: Environment:
18:
19: Kernel mode only.
20:
21: Notes:
22:
23: Revision History:
24:
25: --*/
26:
27:
28: #define DEFAULT_DISK_SIZE (1024*1024) // 1 MB
29: #define DEFAULT_ROOT_DIR_ENTRIES 512
30: #define DEFAULT_SECTORS_PER_CLUSTER 2
31:
32: typedef struct _RAM_DISK_EXTENSION {
33: PDEVICE_OBJECT DeviceObject;
34: PUCHAR DiskImage;
35: ULONG DiskLength;
36: ULONG NumberOfCylinders;
37: ULONG TracksPerCylinder;
38: ULONG SectorsPerTrack;
39: ULONG BytesPerSector;
40: UNICODE_STRING Win32NameString;
41: } RAMDISK_EXTENSION, *PRAMDISK_EXTENSION;
42:
43: #define RAMDISK_MEDIA_TYPE 0xF8
44: #define DIR_ENTRIES_PER_SECTOR 16
45: #define WIN32_PATH L"\\DosDevices\\"
46:
47: #if DBG
48: #define RAMDBUGCHECK ((ULONG)0x80000000)
49: #define RAMDDIAG1 ((ULONG)0x00000001)
50: #define RAMDDIAG2 ((ULONG)0x00000002)
51: #define RAMDERRORS ((ULONG)0x00000004)
52:
53: #define RamDiskDump(LEVEL, STRING) \
54: do { \
55: if (RamDiskDebugLevel & LEVEL) { \
56: DbgPrint STRING; \
57: } \
58: if (LEVEL == RAMDBUGCHECK) { \
59: ASSERT(FALSE); \
60: } \
61: } while (0)
62: #else
63: #define RamDiskDump(LEVEL,STRING) do {NOTHING;} while (0)
64: #endif
65:
66: #pragma pack(1)
67:
68: typedef struct _BOOT_SECTOR
69: {
70: UCHAR bsJump[3]; // x86 jmp instruction, checked by FS
71: CCHAR bsOemName[8]; // OEM name of formatter
72: USHORT bsBytesPerSec; // Bytes per Sector
73: UCHAR bsSecPerClus; // Sectors per Cluster
74: USHORT bsResSectors; // Reserved Sectors
75: UCHAR bsFATs; // Number of FATs - we always use 1
76: USHORT bsRootDirEnts; // Number of Root Dir Entries
77: USHORT bsSectors; // Number of Sectors
78: UCHAR bsMedia; // Media type - we use RAMDISK_MEDIA_TYPE
79: USHORT bsFATsecs; // Number of FAT sectors
80: USHORT bsSecPerTrack; // Sectors per Track - we use 32
81: USHORT bsHeads; // Number of Heads - we use 2
82: ULONG bsHiddenSecs; // Hidden Sectors - we set to 0
83: ULONG bsHugeSectors; // Number of Sectors if > 32 MB size
84: UCHAR bsDriveNumber; // Drive Number - not used
85: UCHAR bsReserved1; // Reserved
86: UCHAR bsBootSignature; // New Format Boot Signature - 0x29
87: ULONG bsVolumeID; // VolumeID - set to 0x12345678
88: CCHAR bsLabel[11]; // Label - set to RamDisk
89: CCHAR bsFileSystemType[8];// File System Type - FAT12 or FAT16
90: CCHAR bsReserved2[448]; // Reserved
91: UCHAR bsSig2[2]; // Originial Boot Signature - 0x55, 0xAA
92: } BOOT_SECTOR, *PBOOT_SECTOR;
93:
94: typedef struct _DIR_ENTRY
95: {
96: UCHAR deName[8]; // File Name
97: UCHAR deExtension[3]; // File Extension
98: UCHAR deAttributes; // File Attributes
99: UCHAR deReserved; // Reserved
100: USHORT deTime; // File Time
101: USHORT deDate; // File Date
102: USHORT deStartCluster; // First Cluster of file
103: ULONG deFileSize; // File Length
104: } DIR_ENTRY, *PDIR_ENTRY;
105:
106: #pragma pack()
107:
108: //
109: // Directory Entry Attributes
110: //
111:
112: #define DIR_ATTR_READONLY 0x01
113: #define DIR_ATTR_HIDDEN 0x02
114: #define DIR_ATTR_SYSTEM 0x04
115: #define DIR_ATTR_VOLUME 0x08
116: #define DIR_ATTR_DIRECTORY 0x10
117: #define DIR_ATTR_ARCHIVE 0x20
118:
119: int
120: sprintf(char *s, const char *format, ...);
121:
122: //
123: // Device driver routine declarations.
124: //
125:
126: NTSTATUS
127: DriverEntry(
128: IN OUT PDRIVER_OBJECT DriverObject,
129: IN PUNICODE_STRING RegistryPath
130: );
131:
132: NTSTATUS
133: RamDiskInitializeDisk(
134: IN PDRIVER_OBJECT DriverObject,
135: IN PUNICODE_STRING ParamPath
136: );
137:
138: void
139: RamDiskFormatFat(
140: IN PRAMDISK_EXTENSION DiskExtension,
141: IN PUNICODE_STRING ParamPath
142: );
143:
144: NTSTATUS
145: RamDiskCreateClose(
146: IN PDEVICE_OBJECT DeviceObject,
147: IN PIRP Irp
148: );
149:
150: NTSTATUS
151: RamDiskDeviceControl(
152: IN PDEVICE_OBJECT DeviceObject,
153: IN PIRP Irp
154: );
155:
156: NTSTATUS
157: RamDiskReadWrite(
158: IN PDEVICE_OBJECT DeviceObject,
159: IN PIRP Irp
160: );
161:
162: VOID
163: RamDiskUnloadDriver(
164: IN PDRIVER_OBJECT DriverObject
165: );
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.