PLIST_ENTRY ListHead, NextEntry;
OBJECT_ATTRIBUTES ObjectAttributes;
WCHAR SourceString[54];
-
+
//
// Scan memory descriptors
//
MemoryDescriptor = CONTAINING_RECORD(NextEntry,
MEMORY_ALLOCATION_DESCRIPTOR,
ListEntry);
-
+
//
// Needs to be a ROM/RAM descriptor
//
//
NextEntry = NextEntry->Flink;
}
-
+
//
// Nothing found?
//
0,
0);
}
-
+
//
// Setup the input buffer
//
RamdiskCreate.DiskGuid = RAMDISK_BOOTDISK_GUID;
RamdiskCreate.DriveLetter = L'C';
RamdiskCreate.Options.Fixed = TRUE;
-
+
//
// Check for commandline parameters
//
// Make everything upper case
//
_strupr(CommandLine);
-
+
//
// Check for offset parameter
//
RamdiskCreate.DiskOffset = atol(OffsetValue + 1);
}
}
-
+
//
// Reduce the disk length
//
RamdiskCreate.DiskLength.QuadPart -= RamdiskCreate.DiskOffset;
-
+
//
// Check for length parameter
//
}
}
}
-
+
//
// Setup object attributes
//
OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
NULL,
NULL);
-
+
//
// Open a handle to the driver
//
Status = ZwOpenFile(&DriverHandle,
- GENERIC_ALL,
+ GENERIC_ALL | SYNCHRONIZE,
&ObjectAttributes,
&IoStatusBlock,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
0);
}
-
+
//
// Send create command
//
0,
0);
}
-
+
//
// Convert the GUID
//
0,
0);
}
-
+
//
// Build the symbolic link name and target
//
SymbolicLinkName.Length = 38;
SymbolicLinkName.MaximumLength = 38 + sizeof(UNICODE_NULL);
SymbolicLinkName.Buffer = L"\\ArcName\\ramdisk(0)";
-
+
//
// Create the symbolic link
//
0,
0);
}
-
+
//
// We made it
//