ReactOS 0.4.16-dev-1946-g52006dd
ramdisk.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

ARC_STATUS RamDiskInitialize (IN BOOLEAN InitRamDisk, IN PCSTR LoadOptions OPTIONAL, IN PCSTR DefaultPath OPTIONAL)
 

Variables

PVOID gInitRamDiskBase
 
ULONG gInitRamDiskSize
 

Function Documentation

◆ RamDiskInitialize()

ARC_STATUS RamDiskInitialize ( IN BOOLEAN  InitRamDisk,
IN PCSTR LoadOptions  OPTIONAL,
IN PCSTR DefaultPath  OPTIONAL 
)

Definition at line 229 of file ramdisk.c.

233{
234 TRACE("RamDiskInitialize(%s, '%s', '%s')\n",
235 InitRamDisk ? "INIT" : "REGULAR",
236 LoadOptions ? LoadOptions : "n/a",
237 DefaultPath ? DefaultPath : "n/a");
238
239 /* Reset the RAMDISK device */
240 if ((RamDiskBase != gInitRamDiskBase) &&
242 (gInitRamDiskSize != 0))
243 {
244 /* This is not the initial Ramdisk, so we can free the allocated memory */
246 }
248 RamDiskFileSize = 0;
251 RamDiskOffset = 0;
252
253 if (InitRamDisk)
254 {
255 /* We initialize the initial Ramdisk: it should be present in memory */
257 return ENODEV;
258
259 // TODO: Handle SDI image.
260
263 ASSERT(RamDiskFileSize < 0x100000000); // See FIXME about 4GB support in RamDiskLoadVirtualFile().
264 }
265 else
266 {
267 /* We initialize the Ramdisk from the load options */
269 CHAR FileName[MAX_PATH] = "";
270
271 /* If we don't have any load options, initialize an empty Ramdisk */
272 if (LoadOptions)
273 {
274 PCSTR Option;
276
277 /* Ramdisk image file name */
278 Option = NtLdrGetOptionEx(LoadOptions, "RDPATH=", &FileNameLength);
279 if (Option && (FileNameLength > 7))
280 {
281 /* Copy the file name */
282 Option += 7; FileNameLength -= 7;
284 Option, FileNameLength * sizeof(CHAR));
285 }
286
287 /* Ramdisk image length */
288 Option = NtLdrGetOption(LoadOptions, "RDIMAGELENGTH=");
289 if (Option)
290 {
291 RamDiskImageLength = _atoi64(Option + 14);
292 }
293
294 /* Ramdisk image offset */
295 Option = NtLdrGetOption(LoadOptions, "RDIMAGEOFFSET=");
296 if (Option)
297 {
298 RamDiskImageOffset = atol(Option + 14);
299 }
300 }
301
302 if (*FileName)
303 Status = RamDiskLoadVirtualFile(FileName, DefaultPath);
304 else
305 Status = RamDiskLoadVirtualFile(DefaultPath, NULL);
306 if (Status != ESUCCESS)
307 return Status;
308 }
309
310 /* Adjust the Ramdisk image length if needed */
313
314 /* Register the RAMDISK device */
316 {
317 FsRegisterDevice("ramdisk(0)", &RamDiskVtbl);
319 }
320
321 return ESUCCESS;
322}
#define ENODEV
Definition: acclib.h:89
static BOOLEAN RamDiskDeviceRegistered
Definition: ramdisk.c:23
static ULONGLONG RamDiskFileSize
Definition: ramdisk.c:25
static PVOID RamDiskBase
Definition: ramdisk.c:24
static ULONG RamDiskImageOffset
Definition: ramdisk.c:27
static ARC_STATUS RamDiskLoadVirtualFile(IN PCSTR FileName, IN PCSTR DefaultPath OPTIONAL)
Definition: ramdisk.c:110
static const DEVVTBL RamDiskVtbl
Definition: ramdisk.c:100
PVOID gInitRamDiskBase
Definition: ramdisk.c:20
static ULONGLONG RamDiskOffset
Definition: ramdisk.c:28
static ULONGLONG RamDiskImageLength
Definition: ramdisk.c:26
ULONG gInitRamDiskSize
Definition: ramdisk.c:21
VOID FsRegisterDevice(_In_ PCSTR DeviceName, _In_ const DEVVTBL *FuncTable)
Definition: fs.c:673
VOID MmFreeMemory(PVOID MemoryPointer)
Definition: mm.c:215
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define MAX_PATH
Definition: compat.h:34
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ HANDLE _In_ ULONG FileNameLength
Definition: fltkernel.h:1129
Status
Definition: gdiplustypes.h:25
#define ASSERT(a)
Definition: mode.c:44
PCSTR NtLdrGetOption(IN PCSTR Options, IN PCSTR OptionName)
Definition: ntldropts.c:128
PCSTR NtLdrGetOptionEx(IN PCSTR Options, IN PCSTR OptionName, OUT PULONG OptionLength OPTIONAL)
Definition: ntldropts.c:117
NTSTRSAFEAPI RtlStringCbCopyNA(_Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc, _In_ size_t cbToCopy)
Definition: ntstrsafe.h:395
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
@ ESUCCESS
Definition: arc.h:32
ULONG ARC_STATUS
Definition: arc.h:4
_Check_return_ _ACRTIMP __int64 __cdecl _atoi64(_In_z_ char const *_String)
#define TRACE(s)
Definition: solgame.cpp:4
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG
Definition: typedefs.h:59
char CHAR
Definition: xmlstorage.h:175

Referenced by ArmHwDetect(), LoadAndBootWindows(), and LoadReactOSSetup().

Variable Documentation

◆ gInitRamDiskBase

PVOID gInitRamDiskBase
extern

Definition at line 20 of file ramdisk.c.

Referenced by CmdLineParse(), and RamDiskInitialize().

◆ gInitRamDiskSize

ULONG gInitRamDiskSize
extern

Definition at line 21 of file ramdisk.c.

Referenced by CmdLineParse(), and RamDiskInitialize().