Author: hbelusca
Date: Sat Jan 10 00:21:33 2015
New Revision: 66022
URL: http://svn.reactos.org/svn/reactos?rev=66022&view=rev
Log:
[FREELDR]: Commit a temporary "hackfix" for (Pc)GetTime: on VBox when booting with PXE, for some mysterious reason, Int386(0x1A) call with AH = 0x02 (Get CMOS Time) *never ever* returns!! (however without PXE everything works). So... is it some kind of stack overflow or whatever that makes the Int386 function stack messy? Or something else? So in the meantime we use direct CMOS port reads. Timo, Hervé (and others), can you please review? And in particular why does it happen only with PXE?
Modified:
trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/…
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c [iso-8859-1] Sat Jan 10 00:21:33 2015
@@ -20,10 +20,50 @@
#define BCD_INT(bcd) (((bcd & 0xf0) >> 4) * 10 + (bcd &0x0f))
+#ifndef INT386_WITH_INT_1A_AH_02_04__IS__FIXED
+
+/* CMOS Registers and Ports */
+#define CMOS_CONTROL_PORT (PUCHAR)0x70
+#define CMOS_DATA_PORT (PUCHAR)0x71
+
+#define RTC_REGISTER_A 0x0A
+#define RTC_REG_A_UIP 0x80
+
+static UCHAR
+HalpReadCmos(IN UCHAR Reg)
+{
+ /* Select the register */
+ WRITE_PORT_UCHAR(CMOS_CONTROL_PORT, Reg);
+
+ /* Query the value */
+ return READ_PORT_UCHAR(CMOS_DATA_PORT);
+}
+
+#endif
+
TIMEINFO*
PcGetTime(VOID)
{
static TIMEINFO TimeInfo;
+
+#ifndef INT386_WITH_INT_1A_AH_02_04__IS__FIXED
+
+ /* Loop while update is in progress */
+ while ((HalpReadCmos(RTC_REGISTER_A)) & RTC_REG_A_UIP);
+
+ /* Set the time data */
+ TimeInfo.Second = BCD_INT(HalpReadCmos(0));
+ TimeInfo.Minute = BCD_INT(HalpReadCmos(2));
+ TimeInfo.Hour = BCD_INT(HalpReadCmos(4));
+ TimeInfo.Day = BCD_INT(HalpReadCmos(7));
+ TimeInfo.Month = BCD_INT(HalpReadCmos(8));
+ TimeInfo.Year = BCD_INT(HalpReadCmos(9));
+
+ /* Compensate for the century field */
+ TimeInfo.Year += (TimeInfo.Year > 80) ? 1900: 2000;
+
+#else
+
REGS Regs;
for (;;)
@@ -86,6 +126,9 @@
break;
}
+
+#endif
+
return &TimeInfo;
}
Author: hbelusca
Date: Fri Jan 9 19:58:19 2015
New Revision: 66021
URL: http://svn.reactos.org/svn/reactos?rev=66021&view=rev
Log:
[NTOS]: Bring into evidence an existing hack in PnPMgr, in the hope it'll be fixed and not remain here again for years...
Modified:
trunk/reactos/ntoskrnl/io/pnpmgr/pnpinit.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpinit.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpinit…
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnpinit.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpinit.c [iso-8859-1] Fri Jan 9 19:58:19 2015
@@ -59,6 +59,8 @@
/* ReactOS HACK for SETUPLDR */
if (KeLoaderBlock->SetupLdrBlock)
{
+ DPRINT1("WARNING!! In PiInitCacheGroupInformation, using ReactOS HACK for SETUPLDR!!\n");
+
/* Bogus data */
PiInitGroupOrderTableCount = 0;
PiInitGroupOrderTable = (PVOID)0xBABEB00B;
Author: akhaldi
Date: Fri Jan 9 16:57:24 2015
New Revision: 66018
URL: http://svn.reactos.org/svn/reactos?rev=66018&view=rev
Log:
[RAMDISK] Fix some comment typos. Convert comments to C style. No code changes.
Modified:
trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c
Modified: trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/class/ramd…
==============================================================================
--- trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c [iso-8859-1] Fri Jan 9 16:57:24 2015
@@ -90,14 +90,10 @@
typedef struct _RAMDISK_DRIVE_EXTENSION
{
- //
- // Inherited base class
- //
+ /* Inherited base class */
RAMDISK_EXTENSION;
- //
- // Data we get from the creator
- //
+ /* Data we get from the creator */
GUID DiskGuid;
UNICODE_STRING GuidString;
UNICODE_STRING SymbolicLinkName;
@@ -108,9 +104,7 @@
WCHAR DriveLetter;
ULONG BasePage;
- //
- // Data we get from the disk
- //
+ /* Data we get from the disk */
ULONG BytesPerSector;
ULONG SectorsPerTrack;
ULONG NumberOfHeads;
@@ -141,9 +135,7 @@
ULONG MinView, DefView, MinViewLength, DefViewLength, MaxViewLength;
RTL_QUERY_REGISTRY_TABLE QueryTable[10];
- //
- // Set defaults
- //
+ /* Set defaults */
MaximumViewLength = 0x10000000u;
MaximumPerDiskViewLength = 0x10000000u;
ReportDetectedDevice = 0;
@@ -154,9 +146,7 @@
MinimumViewLength = 0x10000u;
DefaultViewLength = 0x100000u;
- //
- // Setup the query table and query the registry
- //
+ /* Setup the query table and query the registry */
RtlZeroMemory(QueryTable, sizeof(QueryTable));
QueryTable[0].Flags = 1;
QueryTable[0].Name = L"Parameters";
@@ -193,9 +183,7 @@
NULL,
NULL);
- //
- // Parse minimum view count, cannot be bigger than 256 or smaller than 2
- //
+ /* Parse minimum view count, cannot be bigger than 256 or smaller than 2 */
MinView = MinimumViewCount;
if (MinimumViewCount >= 2)
{
@@ -207,9 +195,7 @@
}
MinimumViewCount = MinView;
- //
- // Parse default view count, cannot be bigger than 256 or smaller than minimum
- //
+ /* Parse default view count, cannot be bigger than 256 or smaller than minimum */
DefView = DefaultViewCount;
if (DefaultViewCount >= MinView)
{
@@ -221,9 +207,7 @@
}
DefaultViewCount = DefView;
- //
- // Parse maximum view count, cannot be bigger than 256 or smaller than default
- //
+ /* Parse maximum view count, cannot be bigger than 256 or smaller than default */
if (MaximumViewCount >= DefView)
{
if (MaximumViewCount > 256) MaximumViewCount = 256;
@@ -233,9 +217,7 @@
MaximumViewCount = DefView;
}
- //
- // Parse minimum view length, cannot be bigger than 1GB or smaller than 64KB
- //
+ /* Parse minimum view length, cannot be bigger than 1GB or smaller than 64KB */
MinViewLength = MinimumViewLength;
if (MinimumViewLength >= 0x10000)
{
@@ -247,9 +229,7 @@
}
MinimumViewLength = MinViewLength;
- //
- // Parse default view length, cannot be bigger than 1GB or smaller than minimum
- //
+ /* Parse default view length, cannot be bigger than 1GB or smaller than minimum */
DefViewLength = DefaultViewLength;
if (DefaultViewLength >= MinViewLength)
{
@@ -261,9 +241,7 @@
}
DefaultViewLength = DefViewLength;
- //
- // Parse maximum view length, cannot be bigger than 1GB or smaller than default
- //
+ /* Parse maximum view length, cannot be bigger than 1GB or smaller than default */
MaxViewLength = MaximumViewLength;
if (MaximumViewLength >= DefViewLength)
{
@@ -275,9 +253,7 @@
}
MaximumViewLength = MaxViewLength;
- //
- // Parse maximum view length per disk, cannot be smaller than 16MB
- //
+ /* Parse maximum view length per disk, cannot be smaller than 16MB */
if (MaximumPerDiskViewLength >= 0x1000000)
{
if (MaxViewLength > 0xFFFFFFFF) MaximumPerDiskViewLength = -1;
@@ -302,54 +278,34 @@
LARGE_INTEGER ActualOffset;
LARGE_INTEGER ActualPages;
- //
- // We only support boot disks for now
- //
+ /* We only support boot disks for now */
ASSERT(DeviceExtension->DiskType == RAMDISK_BOOT_DISK);
- //
- // Calculate the actual offset in the drive
- //
+ /* Calculate the actual offset in the drive */
ActualOffset.QuadPart = DeviceExtension->DiskOffset + Offset.QuadPart;
- //
- // Convert to pages
- //
+ /* Convert to pages */
ActualPages.QuadPart = ActualOffset.QuadPart >> PAGE_SHIFT;
- //
- // Now add the base page
- //
+ /* Now add the base page */
ActualPages.QuadPart = DeviceExtension->BasePage + ActualPages.QuadPart;
- //
- // Calculate final amount of bytes
- //
+ /* Calculate final amount of bytes */
PhysicalAddress.QuadPart = ActualPages.QuadPart << PAGE_SHIFT;
- //
- // Calculate pages spanned for the mapping
- //
+ /* Calculate pages spanned for the mapping */
ActualLength = ADDRESS_AND_SIZE_TO_SPAN_PAGES(ActualOffset.QuadPart, Length);
- //
- // And convert this back to bytes
- //
+ /* And convert this back to bytes */
ActualLength <<= PAGE_SHIFT;
- //
- // Get the offset within the page
- //
+ /* Get the offset within the page */
PageOffset = BYTE_OFFSET(ActualOffset.QuadPart);
- //
- // Map the I/O Space from the loader
- //
+ /* Map the I/O Space from the loader */
MappedBase = MmMapIoSpace(PhysicalAddress, ActualLength, MmCached);
- //
- // Return actual offset within the page as well as the length
- //
+ /* Return actual offset within the page as well as the length */
if (MappedBase) MappedBase = (PVOID)((ULONG_PTR)MappedBase + PageOffset);
*OutputLength = Length;
return MappedBase;
@@ -366,39 +322,25 @@
SIZE_T ActualLength;
ULONG PageOffset;
- //
- // We only support boot disks for now
- //
+ /* We only support boot disks for now */
ASSERT(DeviceExtension->DiskType == RAMDISK_BOOT_DISK);
- //
- // Calculate the actual offset in the drive
- //
+ /* Calculate the actual offset in the drive */
ActualOffset.QuadPart = DeviceExtension->DiskOffset + Offset.QuadPart;
- //
- // Calculate pages spanned for the mapping
- //
+ /* Calculate pages spanned for the mapping */
ActualLength = ADDRESS_AND_SIZE_TO_SPAN_PAGES(ActualOffset.QuadPart, Length);
- //
- // And convert this back to bytes
- //
+ /* And convert this back to bytes */
ActualLength <<= PAGE_SHIFT;
- //
- // Get the offset within the page
- //
+ /* Get the offset within the page */
PageOffset = BYTE_OFFSET(ActualOffset.QuadPart);
- //
- // Calculate actual base address where we mapped this
- //
+ /* Calculate actual base address where we mapped this */
BaseAddress = (PVOID)((ULONG_PTR)BaseAddress - PageOffset);
- //
- // Unmap the I/O space we got from the loader
- //
+ /* Unmap the I/O space we got from the loader */
MmUnmapIoSpace(BaseAddress, ActualLength);
}
@@ -424,26 +366,18 @@
LARGE_INTEGER CurrentOffset, CylinderSize, DiskLength;
ULONG CylinderCount, SizeByCylinders;
- //
- // Check if we're a boot RAM disk
- //
+ /* Check if we're a boot RAM disk */
DiskType = Input->DiskType;
if (DiskType >= RAMDISK_BOOT_DISK)
{
- //
- // Check if we're an ISO
- //
+ /* Check if we're an ISO */
if (DiskType == RAMDISK_BOOT_DISK)
{
- //
- // NTLDR mounted us somewhere
- //
+ /* NTLDR mounted us somewhere */
BasePage = Input->BasePage;
if (!BasePage) return STATUS_INVALID_PARAMETER;
- //
- // Sanitize disk options
- //
+ /* Sanitize disk options */
Input->Options.Fixed = TRUE;
Input->Options.Readonly = Input->Options.ExportAsCd |
Input->Options.Readonly;
@@ -453,25 +387,17 @@
}
else
{
- //
- // The only other possibility is a WIM disk
- //
+ /* The only other possibility is a WIM disk */
if (DiskType != RAMDISK_WIM_DISK)
{
- //
- // Fail
- //
+ /* Fail */
return STATUS_INVALID_PARAMETER;
}
- //
- // Read the view count instead
- //
+ /* Read the view count instead */
// ViewCount = Input->ViewCount;
- //
- // Sanitize disk options
- //
+ /* Sanitize disk options */
Input->Options.Hidden = FALSE;
Input->Options.NoDosDevice = FALSE;
Input->Options.Readonly = FALSE;
@@ -479,52 +405,36 @@
Input->Options.Fixed = TRUE;
}
- //
- // Are we just validating and returning to the user?
- //
+ /* Are we just validating and returning to the user? */
if (ValidateOnly) return STATUS_SUCCESS;
- //
- // Build the GUID string
- //
+ /* Build the GUID string */
Status = RtlStringFromGUID(&Input->DiskGuid, &GuidString);
if (!(NT_SUCCESS(Status)) || !(GuidString.Buffer))
{
- //
- // Fail
- //
+ /* Fail */
Status = STATUS_INSUFFICIENT_RESOURCES;
goto FailCreate;
}
- //
- // Allocate our device name
- //
+ /* Allocate our device name */
Length = GuidString.Length + 32;
- Buffer = ExAllocatePoolWithTag(NonPagedPool,
- Length,
- 'dmaR');
+ Buffer = ExAllocatePoolWithTag(NonPagedPool, Length, 'dmaR');
if (!Buffer)
{
- //
- // Fail
- //
+ /* Fail */
Status = STATUS_INSUFFICIENT_RESOURCES;
goto FailCreate;
}
- //
- // Build the device name string
- //
+ /* Build the device name string */
DeviceName.Buffer = Buffer;
DeviceName.Length = Length - 2;
DeviceName.MaximumLength = Length;
wcsncpy(Buffer, L"\\Device\\Ramdisk", Length / sizeof(WCHAR));
wcsncat(Buffer, GuidString.Buffer, Length / sizeof(WCHAR));
- //
- // Create the drive device
- //
+ /* Create the drive device */
Status = IoCreateDevice(DeviceExtension->DeviceObject->DriverObject,
sizeof(RAMDISK_DRIVE_EXTENSION),
&DeviceName,
@@ -535,19 +445,13 @@
&DeviceObject);
if (!NT_SUCCESS(Status)) goto FailCreate;
- //
- // Grab the drive extension
- //
+ /* Grab the drive extension */
DriveExtension = DeviceObject->DeviceExtension;
- //
- // Check if we need a DOS device
- //
+ /* Check if we need a DOS device */
if (!Input->Options.NoDosDevice)
{
- //
- // Build the symbolic link name
- //
+ /* Build the symbolic link name */
SymbolicLinkName.MaximumLength = GuidString.Length + 36;
SymbolicLinkName.Length = GuidString.Length + 34;
Buffer = ExAllocatePoolWithTag(NonPagedPool,
@@ -556,9 +460,7 @@
SymbolicLinkName.Buffer = Buffer;
if (Buffer)
{
- //
- // Create it
- //
+ /* Create it */
wcsncpy(Buffer,
L"\\GLOBAL??\\Ramdisk",
SymbolicLinkName.MaximumLength / sizeof(WCHAR));
@@ -568,9 +470,7 @@
Status = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
if (!NT_SUCCESS(Status))
{
- //
- // Nevermind...
- //
+ /* Nevermind... */
Input->Options.NoDosDevice = TRUE;
ExFreePool(Buffer);
SymbolicLinkName.Buffer = NULL;
@@ -578,25 +478,17 @@
}
else
{
- //
- // No DOS device
- //
+ /* No DOS device */
Input->Options.NoDosDevice = TRUE;
}
- //
- // It this an ISO boot ramdisk?
- //
+ /* Is this an ISO boot ramdisk? */
if (Input->DiskType == RAMDISK_BOOT_DISK)
{
- //
- // Does it need a drive letter?
- //
+ /* Does it need a drive letter? */
if (!Input->Options.NoDriveLetter)
{
- //
- // Build it and take over the existing symbolic link
- //
+ /* Build it and take over the existing symbolic link */
_snwprintf(LocalBuffer,
30,
L"\\DosDevices\\%wc:",
@@ -605,32 +497,23 @@
IoDeleteSymbolicLink(&DriveString);
IoCreateSymbolicLink(&DriveString, &DeviceName);
- //
- // Save the drive letter
- //
+ /* Save the drive letter */
DriveExtension->DriveLetter = Input->DriveLetter;
}
}
}
- //
- // Setup the device object flags
- //
+ /* Setup the device object flags */
DeviceObject->Flags |= (DO_XIP | DO_POWER_PAGABLE | DO_DIRECT_IO);
DeviceObject->AlignmentRequirement = 1;
- //
- // Build the drive FDO
- //
+ /* Build the drive FDO */
*NewDriveExtension = DriveExtension;
DriveExtension->Type = RamdiskDrive;
DiskLength = Input->DiskLength;
ExInitializeFastMutex(&DriveExtension->DiskListLock);
- IoInitializeRemoveLock(&DriveExtension->RemoveLock,
- 'dmaR',
- 1,
- 0);
+ IoInitializeRemoveLock(&DriveExtension->RemoveLock, 'dmaR', 1, 0);
DriveExtension->DriveDeviceName = DeviceName;
DriveExtension->SymbolicLinkName = SymbolicLinkName;
DriveExtension->GuidString = GuidString;
@@ -647,23 +530,17 @@
DriveExtension->SectorsPerTrack = 0;
DriveExtension->NumberOfHeads = 0;
- //
- // Make sure we don't free it later
- //
+ /* Make sure we don't free it later */
DeviceName.Buffer = NULL;
SymbolicLinkName.Buffer = NULL;
GuidString.Buffer = NULL;
- //
- // Check if this is an boot disk, or a registry ram drive
- //
+ /* Check if this is a boot disk, or a registry ram drive */
if (!(Input->Options.ExportAsCd) &&
(Input->DiskType == RAMDISK_BOOT_DISK))
{
- //
- // Not an ISO boot, but it's a boot FS -- map it to figure out the
- // drive settings
- //
+ /* Not an ISO boot, but it's a boot FS -- map it to figure out the
+ * drive settings */
CurrentOffset.QuadPart = 0;
BaseAddress = RamdiskMapPages(DriveExtension,
CurrentOffset,
@@ -671,25 +548,19 @@
&BytesRead);
if (BaseAddress)
{
- //
- // Get the data
- //
+ /* Get the data */
BootSector = (PPACKED_BOOT_SECTOR)BaseAddress;
FatUnpackBios(&BiosBlock, &BootSector->PackedBpb);
BytesPerSector = BiosBlock.BytesPerSector;
SectorsPerTrack = BiosBlock.SectorsPerTrack;
Heads = BiosBlock.Heads;
- //
- // Save it
- //
+ /* Save it */
DriveExtension->BytesPerSector = BytesPerSector;
DriveExtension->SectorsPerTrack = SectorsPerTrack;
DriveExtension->NumberOfHeads = Heads;
- //
- // Unmap now
- //
+ /* Unmap now */
CurrentOffset.QuadPart = 0;
RamdiskUnmapPages(DriveExtension,
BaseAddress,
@@ -698,47 +569,35 @@
}
else
{
- //
- // Fail
- //
+ /* Fail */
Status = STATUS_INSUFFICIENT_RESOURCES;
goto FailCreate;
}
}
- //
- // Check if the drive settings haven't been set yet
- //
+ /* Check if the drive settings haven't been set yet */
if ((DriveExtension->BytesPerSector == 0) ||
(DriveExtension->SectorsPerTrack == 0) ||
(DriveExtension->NumberOfHeads == 0))
{
- //
- // Check if this is a CD
- //
+ /* Check if this is a CD */
if (Input->Options.ExportAsCd)
{
- //
- // Setup partition parameters default for ISO 9660
- //
+ /* Setup partition parameters default for ISO 9660 */
DriveExtension->BytesPerSector = 2048;
DriveExtension->SectorsPerTrack = 32;
DriveExtension->NumberOfHeads = 64;
}
else
{
- //
- // Setup partition parameters default for FAT
- //
+ /* Setup partition parameters default for FAT */
DriveExtension->BytesPerSector = 512;
DriveExtension->SectorsPerTrack = 128;
DriveExtension->NumberOfHeads = 16;
}
}
- //
- // Calculate the cylinder size
- //
+ /* Calculate the cylinder size */
CylinderSize.QuadPart = DriveExtension->BytesPerSector *
DriveExtension->SectorsPerTrack *
DriveExtension->NumberOfHeads;
@@ -747,32 +606,22 @@
DriveExtension->Cylinders = CylinderCount;
if ((DiskLength.HighPart > 0) || (SizeByCylinders < DiskLength.LowPart))
{
- //
- // Align cylinder size up
- //
+ /* Align cylinder size up */
DriveExtension->Cylinders++;
}
- //
- // Acquire the disk lock
- //
+ /* Acquire the disk lock */
KeEnterCriticalRegion();
ExAcquireFastMutex(&DeviceExtension->DiskListLock);
- //
- // Insert us
- //
+ /* Insert us */
InsertTailList(&DeviceExtension->DiskList, &DriveExtension->DiskList);
- //
- // Release the lock
- //
+ /* Release the lock */
ExReleaseFastMutex(&DeviceExtension->DiskListLock);
KeLeaveCriticalRegion();
- //
- // Clear init flag
- //
+ /* Clear init flag */
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
return STATUS_SUCCESS;
}
@@ -797,92 +646,63 @@
NTSTATUS Status;
PIO_STACK_LOCATION IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
- //
- // Get the device extension and our input data
- //
+ /* Get the device extension and our input data */
DeviceExtension = DeviceObject->DeviceExtension;
Length = IoStackLocation->Parameters.DeviceIoControl.InputBufferLength;
Input = (PRAMDISK_CREATE_INPUT)Irp->AssociatedIrp.SystemBuffer;
- //
- // Validate input parameters
- //
+ /* Validate input parameters */
if ((Length < sizeof(RAMDISK_CREATE_INPUT)) ||
(Input->Version != sizeof(RAMDISK_CREATE_INPUT)))
{
- //
- // Invalid input
- //
return STATUS_INVALID_PARAMETER;
}
- //
- // Validate the disk type
- //
+ /* Validate the disk type */
DiskType = Input->DiskType;
if (DiskType == RAMDISK_WIM_DISK) return STATUS_INVALID_PARAMETER;
- //
- // Look at the disk type
- //
+ /* Look at the disk type */
if (DiskType == RAMDISK_BOOT_DISK)
{
- //
- // We only allow this as an early-init boot
- //
+ /* We only allow this as an early-init boot */
if (!KeLoaderBlock) return STATUS_INVALID_PARAMETER;
- //
- // Save command-line flags
- //
+ /* Save command-line flags */
if (ExportBootDiskAsCd) Input->Options.ExportAsCd = TRUE;
if (IsWinPEBoot) Input->Options.NoDriveLetter = TRUE;
}
- //
- // Validate the disk type
- //
+ /* Validate the disk type */
if ((Input->Options.ExportAsCd) && (DiskType != RAMDISK_BOOT_DISK))
{
- //
- // If the type isn't CDFS, it has to at least be raw CD
- //
+ /* If the type isn't CDFS, it has to at least be raw CD */
if (DiskType != RAMDISK_MEMORY_MAPPED_DISK) return STATUS_INVALID_PARAMETER;
}
- //
- // Check if this is an actual file
- //
+ /* Check if this is an actual file */
if (DiskType <= RAMDISK_MEMORY_MAPPED_DISK)
{
- //
- // Validate the file name
- //
+ /* Validate the file name */
FileNameStart = (PWCHAR)((ULONG_PTR)Input + Length);
FileNameEnd = Input->FileName + 1;
while ((FileNameEnd < FileNameStart) && *(FileNameEnd)) FileNameEnd++;
if (FileNameEnd == FileNameStart) return STATUS_INVALID_PARAMETER;
}
- //
- // Create the actual device
- //
+ /* Create the actual device */
Status = RamdiskCreateDiskDevice(DeviceExtension,
Input,
ValidateOnly,
&DriveExtension);
if (NT_SUCCESS(Status))
{
- //
- // Invalidate and set success
- //
+ /* Invalidate and set success */
IoInvalidateDeviceRelations(DeviceExtension->PhysicalDeviceObject, 0);
Irp->IoStatus.Information = STATUS_SUCCESS;
}
- //
- // We're done
- //
+ /* We're done */
return Status;
}
@@ -898,40 +718,30 @@
ULONG Length;
PIO_STACK_LOCATION IoStackLocation;
- //
- // Validate the length
- //
+ /* Validate the length */
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
if (IoStackLocation->Parameters.DeviceIoControl.
OutputBufferLength < sizeof(PARTITION_INFORMATION))
{
- //
- // Invalid length
- //
+ /* Invalid length */
Status = STATUS_BUFFER_TOO_SMALL;
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
return Status;
}
- //
- // Map the partition table
- //
+ /* Map the partition table */
BaseAddress = RamdiskMapPages(DeviceExtension, Zero, PAGE_SIZE, &Length);
if (!BaseAddress)
{
- //
- // No memory
- //
+ /* No memory */
Status = STATUS_INSUFFICIENT_RESOURCES;
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
return Status;
}
- //
- // Fill out the information
- //
+ /* Fill out the information */
PartitionInfo = Irp->AssociatedIrp.SystemBuffer;
PartitionInfo->StartingOffset.QuadPart = DeviceExtension->BytesPerSector;
PartitionInfo->PartitionLength.QuadPart = DeviceExtension->BytesPerSector *
@@ -947,14 +757,10 @@
PartitionType);
PartitionInfo->RewritePartition = FALSE;
- //
- // Unmap the partition table
- //
+ /* Unmap the partition table */
RamdiskUnmapPages(DeviceExtension, BaseAddress, Zero, Length);
- //
- // Done
- //
+ /* Done */
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof(PARTITION_INFORMATION);
return STATUS_SUCCESS;
@@ -972,9 +778,7 @@
LARGE_INTEGER Zero = {{0, 0}};
PPARTITION_INFORMATION PartitionInfo;
- //
- // First validate input
- //
+ /* First validate input */
Stack = IoGetCurrentIrpStackLocation(Irp);
if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(PARTITION_INFORMATION))
{
@@ -982,9 +786,7 @@
goto SetAndQuit;
}
- //
- // Map to get MBR
- //
+ /* Map to get MBR */
BaseAddress = RamdiskMapPages(DeviceExtension, Zero, PAGE_SIZE, &BytesRead);
if (BaseAddress == NULL)
{
@@ -992,16 +794,11 @@
goto SetAndQuit;
}
- //
- // Set the new partition type
- // On partition 0, field system indicator
- //
+ /* Set the new partition type on partition 0, field system indicator */
PartitionInfo = (PPARTITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer;
*((PCHAR)BaseAddress + 450) = PartitionInfo->PartitionType;
- //
- // And unmap
- //
+ /* And unmap */
RamdiskUnmapPages(DeviceExtension, BaseAddress, Zero, BytesRead);
Status = STATUS_SUCCESS;
@@ -1021,46 +818,30 @@
PIO_STACK_LOCATION IoStackLocation;
PIRP Irp = Context;
- //
- // Get the stack location
- //
+ /* Get the stack location */
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
- //
- // Free the work item
- //
+ /* Free the work item */
IoFreeWorkItem(Irp->Tail.Overlay.DriverContext[0]);
- //
- // Grab the device extension and lock it
- //
+ /* Grab the device extension and lock it */
DeviceExtension = DeviceObject->DeviceExtension;
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
if (NT_SUCCESS(Status))
{
- //
- // Discriminate by major code
- //
+ /* Discriminate by major code */
switch (IoStackLocation->MajorFunction)
{
- //
- // Device control
- //
+ /* Device control */
case IRP_MJ_DEVICE_CONTROL:
{
- //
- // Let's take a look at the IOCTL
- //
+ /* Let's take a look at the IOCTL */
switch (IoStackLocation->Parameters.DeviceIoControl.IoControlCode)
{
- //
- // Ramdisk create request
- //
+ /* Ramdisk create request */
case FSCTL_CREATE_RAM_DISK:
{
- //
- // This time we'll do it for real
- //
+ /* This time we'll do it for real */
Status = RamdiskCreateRamdisk(DeviceObject, Irp, FALSE);
break;
}
@@ -1086,45 +867,34 @@
break;
}
- //
- // We're here
- //
+ /* We're here */
break;
}
- //
- // Read or write request
- //
+ /* Read or write request */
case IRP_MJ_READ:
case IRP_MJ_WRITE:
UNIMPLEMENTED_DBGBREAK("Read/Write request\n");
break;
- //
- // Internal request (SCSI?)
- //
+ /* Internal request (SCSI?) */
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
UNIMPLEMENTED_DBGBREAK("SCSI request\n");
break;
- //
- // Flush request
- //
+ /* Flush request */
case IRP_MJ_FLUSH_BUFFERS:
UNIMPLEMENTED_DBGBREAK("Flush request\n");
break;
- //
- // Anything else
- //
+ /* Anything else */
default:
- UNIMPLEMENTED_DBGBREAK("Invalid request: %lx\n", IoStackLocation->MajorFunction);
+ UNIMPLEMENTED_DBGBREAK("Invalid request: %lx\n",
+ IoStackLocation->MajorFunction);
break;
}
- //
- // Complete the I/O
- //
+ /* Complete the I/O */
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
@@ -1132,9 +902,7 @@
return;
}
- //
- // Fail the I/O
- //
+ /* Fail the I/O */
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -1147,29 +915,21 @@
{
PIO_WORKITEM WorkItem;
- //
- // Mark the IRP pending
- //
+ /* Mark the IRP pending */
IoMarkIrpPending(Irp);
- //
- // Allocate a work item
- //
+ /* Allocate a work item */
WorkItem = IoAllocateWorkItem(DeviceObject);
if (WorkItem)
{
- //
- // Queue it up
- //
+ /* Queue it up */
Irp->Tail.Overlay.DriverContext[0] = WorkItem;
IoQueueWorkItem(WorkItem, RamdiskWorkerThread, DelayedWorkQueue, Irp);
return STATUS_PENDING;
}
else
{
- //
- // Fail
- //
+ /* Fail */
return STATUS_INSUFFICIENT_RESOURCES;
}
}
@@ -1187,22 +947,16 @@
PVOID Source, Destination;
NTSTATUS Status;
- //
- // Get the MDL and check if it's mapped
- //
+ /* Get the MDL and check if it's mapped */
Mdl = Irp->MdlAddress;
if (Mdl->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | MDL_SOURCE_IS_NONPAGED_POOL))
{
- //
- // Use the mapped address
- //
+ /* Use the mapped address */
SystemVa = Mdl->MappedSystemVa;
}
else
{
- //
- // Map it ourselves
- //
+ /* Map it ourselves */
SystemVa = MmMapLockedPagesSpecifyCache(Mdl,
0,
MmCached,
@@ -1211,98 +965,67 @@
NormalPagePriority);
}
- //
- // Make sure we were able to map it
- //
+ /* Make sure we were able to map it */
CurrentBase = SystemVa;
if (!SystemVa) return STATUS_INSUFFICIENT_RESOURCES;
- //
- // Initialize default
- //
+ /* Initialize default */
Irp->IoStatus.Information = 0;
- //
- // Get the I/O Stack Location and capture the data
- //
+ /* Get the I/O Stack Location and capture the data */
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
CurrentOffset = IoStackLocation->Parameters.Read.ByteOffset;
BytesLeft = IoStackLocation->Parameters.Read.Length;
if (!BytesLeft) return STATUS_INVALID_PARAMETER;
- //
- // Do the copy loop
- //
+ /* Do the copy loop */
while (TRUE)
{
- //
- // Map the pages
- //
+ /* Map the pages */
BaseAddress = RamdiskMapPages(DeviceExtension,
CurrentOffset,
BytesLeft,
&BytesRead);
if (!BaseAddress) return STATUS_INSUFFICIENT_RESOURCES;
- //
- // Update our lengths
- //
+ /* Update our lengths */
Irp->IoStatus.Information += BytesRead;
CopyLength = BytesRead;
- //
- // Check if this was a read or write
- //
+ /* Check if this was a read or write */
Status = STATUS_SUCCESS;
if (IoStackLocation->MajorFunction == IRP_MJ_READ)
{
- //
- // Set our copy parameters
- //
+ /* Set our copy parameters */
Destination = CurrentBase;
Source = BaseAddress;
goto DoCopy;
}
else if (IoStackLocation->MajorFunction == IRP_MJ_WRITE)
{
- //
- // Set our copy parameters
- //
+ /* Set our copy parameters */
Destination = BaseAddress;
Source = CurrentBase;
DoCopy:
- //
- // Copy the data
- //
+ /* Copy the data */
RtlCopyMemory(Destination, Source, CopyLength);
}
else
{
- //
- // Prepare us for failure
- //
+ /* Prepare us for failure */
BytesLeft = CopyLength;
Status = STATUS_INVALID_PARAMETER;
}
- //
- // Unmap the pages
- //
- RamdiskUnmapPages(DeviceExtension,
- BaseAddress,
- CurrentOffset,
- BytesRead);
-
- //
- // Update offset and bytes left
- //
+ /* Unmap the pages */
+ RamdiskUnmapPages(DeviceExtension, BaseAddress, CurrentOffset, BytesRead);
+
+ /* Update offset and bytes left */
BytesLeft -= BytesRead;
CurrentOffset.QuadPart += BytesRead;
CurrentBase = (PVOID)((ULONG_PTR)CurrentBase + BytesRead);
- //
- // Check if we're done
- //
+ /* Check if we're done */
if (!BytesLeft) return Status;
}
}
@@ -1312,9 +1035,7 @@
RamdiskOpenClose(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
- //
- // Complete the IRP
- //
+ /* Complete the IRP */
Irp->IoStatus.Information = 1;
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -1327,87 +1048,61 @@
IN PIRP Irp)
{
PRAMDISK_DRIVE_EXTENSION DeviceExtension;
- // ULONG Length;
- // LARGE_INTEGER ByteOffset;
+ //ULONG Length;
+ //LARGE_INTEGER ByteOffset;
PIO_STACK_LOCATION IoStackLocation;
NTSTATUS Status, ReturnStatus;
- //
- // Get the device extension and make sure this isn't a bus
- //
+ /* Get the device extension and make sure this isn't a bus */
DeviceExtension = DeviceObject->DeviceExtension;
if (DeviceExtension->Type == RamdiskBus)
{
- //
- // Fail
- //
+ /* Fail */
Status = STATUS_INVALID_DEVICE_REQUEST;
goto Complete;
}
- //
- // Capture parameters
- //
+ /* Capture parameters */
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
- // Length = IoStackLocation->Parameters.Read.Length;
- // ByteOffset = IoStackLocation->Parameters.Read.ByteOffset;
-
- //
- // FIXME: Validate offset
- //
-
- //
- // FIXME: Validate sector
- //
-
- //
- // Validate write
- //
+ //Length = IoStackLocation->Parameters.Read.Length;
+ //ByteOffset = IoStackLocation->Parameters.Read.ByteOffset;
+
+ /* FIXME: Validate offset */
+
+ /* FIXME: Validate sector */
+
+ /* Validate write */
if ((IoStackLocation->MajorFunction == IRP_MJ_WRITE) &&
(DeviceExtension->DiskOptions.Readonly))
{
- //
- // Fail, this is read-only
- //
+ /* Fail, this is read-only */
Status = STATUS_MEDIA_WRITE_PROTECTED;
goto Complete;
}
- //
- // See if we want to do this sync or async
- //
+ /* See if we want to do this sync or async */
if (DeviceExtension->DiskType > RAMDISK_MEMORY_MAPPED_DISK)
{
- //
- // Do it sync
- //
+ /* Do it sync */
Status = RamdiskReadWriteReal(Irp, DeviceExtension);
goto Complete;
}
- //
- // Queue it to the worker
- //
+ /* Queue it to the worker */
Status = SendIrpToThread(DeviceObject, Irp);
ReturnStatus = STATUS_PENDING;
- //
- // Check if we're pending or not
- //
+ /* Check if we're pending or not */
if (Status != STATUS_PENDING)
{
Complete:
- //
- // Complete the IRP
- //
+ /* Complete the IRP */
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_DISK_INCREMENT);
ReturnStatus = Status;
}
- //
- // Return to caller
- //
+ /* Return to caller */
return ReturnStatus;
}
@@ -1424,45 +1119,31 @@
PCDROM_TOC Toc;
PDISK_GEOMETRY DiskGeometry;
- //
- // Grab the remove lock
- //
+ /* Grab the remove lock */
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
if (!NT_SUCCESS(Status))
{
- //
- // Fail the IRP
- //
+ /* Fail the IRP */
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
- //
- // Setup some defaults
- //
+ /* Setup some defaults */
Status = STATUS_INVALID_DEVICE_REQUEST;
Information = 0;
- //
- // Check if this is an bus device or the drive
- //
+ /* Check if this is an bus device or the drive */
if (DeviceExtension->Type == RamdiskBus)
{
- //
- // Check what the request is
- //
+ /* Check what the request is */
switch (IoStackLocation->Parameters.DeviceIoControl.IoControlCode)
{
- //
- // Request to create a ramdisk
- //
+ /* Request to create a ramdisk */
case FSCTL_CREATE_RAM_DISK:
{
- //
- // Do it
- //
+ /* Do it */
Status = RamdiskCreateRamdisk(DeviceObject, Irp, TRUE);
if (!NT_SUCCESS(Status)) goto CompleteRequest;
break;
@@ -1470,18 +1151,15 @@
default:
{
- //
- // We don't handle anything else yet
- //
- UNIMPLEMENTED_DBGBREAK("FSCTL: 0x%lx is UNSUPPORTED!\n", IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
+ /* We don't handle anything else yet */
+ UNIMPLEMENTED_DBGBREAK("FSCTL: 0x%lx is UNSUPPORTED!\n",
+ IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
}
}
}
else
{
- //
- // Check what the request is
- //
+ /* Check what the request is */
switch (IoStackLocation->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_DISK_CHECK_VERIFY:
@@ -1489,9 +1167,7 @@
case IOCTL_STORAGE_CHECK_VERIFY2:
case IOCTL_CDROM_CHECK_VERIFY:
{
- //
- // Just pretend it's OK, don't do more
- //
+ /* Just pretend it's OK, don't do more */
Status = STATUS_SUCCESS;
break;
}
@@ -1501,22 +1177,16 @@
case IOCTL_DISK_GET_DRIVE_GEOMETRY:
case IOCTL_CDROM_GET_DRIVE_GEOMETRY:
{
- //
- // Validate the length
- //
+ /* Validate the length */
if (IoStackLocation->Parameters.DeviceIoControl.
OutputBufferLength < sizeof(DISK_GEOMETRY))
{
- //
- // Invalid length
- //
+ /* Invalid length */
Status = STATUS_BUFFER_TOO_SMALL;
break;
}
- //
- // Fill it out
- //
+ /* Fill it out */
DiskGeometry = Irp->AssociatedIrp.SystemBuffer;
DiskGeometry->Cylinders.QuadPart = DriveExtension->Cylinders;
DiskGeometry->BytesPerSector = DriveExtension->BytesPerSector;
@@ -1525,9 +1195,7 @@
DiskGeometry->MediaType = DriveExtension->DiskOptions.Fixed ?
FixedMedia : RemovableMedia;
- //
- // We're done
- //
+ /* We're done */
Status = STATUS_SUCCESS;
Information = sizeof(DISK_GEOMETRY);
break;
@@ -1535,28 +1203,20 @@
case IOCTL_CDROM_READ_TOC:
{
- //
- // Validate the length
- //
+ /* Validate the length */
if (IoStackLocation->Parameters.DeviceIoControl.
OutputBufferLength < sizeof(CDROM_TOC))
{
- //
- // Invalid length
- //
+ /* Invalid length */
Status = STATUS_BUFFER_TOO_SMALL;
break;
}
- //
- // Clear the TOC
- //
+ /* Clear the TOC */
Toc = Irp->AssociatedIrp.SystemBuffer;
RtlZeroMemory(Toc, sizeof(CDROM_TOC));
- //
- // Fill it out
- //
+ /* Fill it out */
Toc->Length[0] = 0;
Toc->Length[1] = RAMDISK_TOC_SIZE - sizeof(Toc->Length);
Toc->FirstTrack = 1;
@@ -1565,9 +1225,7 @@
Toc->TrackData[0].Control = TOC_DATA_TRACK;
Toc->TrackData[0].TrackNumber = 1;
- //
- // We're done
- //
+ /* We're done */
Status = STATUS_SUCCESS;
Information = RAMDISK_TOC_SIZE;
break;
@@ -1581,40 +1239,28 @@
case IOCTL_DISK_GET_PARTITION_INFO:
{
- //
- // Validate the length
- //
+ /* Validate the length */
if (IoStackLocation->Parameters.DeviceIoControl.
OutputBufferLength < sizeof(PARTITION_INFORMATION))
{
- //
- // Invalid length
- //
+ /* Invalid length */
Status = STATUS_BUFFER_TOO_SMALL;
break;
}
- //
- // Check if we need to do this sync or async
- //
+ /* Check if we need to do this sync or async */
if (DriveExtension->DiskType > RAMDISK_MEMORY_MAPPED_DISK)
{
- //
- // Call the helper function
- //
+ /* Call the helper function */
Status = RamdiskGetPartitionInfo(Irp, DriveExtension);
}
else
{
- //
- // Do it asynchronously later
- //
+ /* Do it asynchronously later */
goto CallWorker;
}
- //
- // We're done
- //
+ /* We're done */
Information = Irp->IoStatus.Information;
break;
}
@@ -1631,50 +1277,40 @@
case IOCTL_VOLUME_GET_GPT_ATTRIBUTES:
case IOCTL_VOLUME_OFFLINE:
{
- UNIMPLEMENTED_DBGBREAK("IOCTL: 0x%lx is UNIMPLEMENTED!\n", IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
+ UNIMPLEMENTED_DBGBREAK("IOCTL: 0x%lx is UNIMPLEMENTED!\n",
+ IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
break;
}
default:
{
- //
- // Drive code not emulated
- //
- DPRINT1("IOCTL: 0x%lx is UNSUPPORTED!\n", IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
+ /* Drive code not emulated */
+ DPRINT1("IOCTL: 0x%lx is UNSUPPORTED!\n",
+ IoStackLocation->Parameters.DeviceIoControl.IoControlCode);
break;
}
}
- //
- // If requests drop down here, we just return them complete them
- //
+ /* If requests drop down here, we just return them complete them */
goto CompleteRequest;
}
- //
- // Queue the request to our worker thread
- //
+ /* Queue the request to our worker thread */
CallWorker:
Status = SendIrpToThread(DeviceObject, Irp);
CompleteRequest:
- //
- // Release the lock
- //
+ /* Release the lock */
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
if (Status != STATUS_PENDING)
{
- //
- // Complete the request
- //
+ /* Complete the request */
Irp->IoStatus.Status = Status;
Irp->IoStatus.Information = Information;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
- //
- // Return status
- //
+ /* Return status */
return Status;
}
@@ -1692,18 +1328,14 @@
PDEVICE_OBJECT* DriveDeviceObject;
RAMDISK_DEVICE_STATE State;
- //
- // Get the device extension and check if this is a drive
- //
+ /* Get the device extension and check if this is a drive */
DeviceExtension = DeviceObject->DeviceExtension;
if (DeviceExtension->Type == RamdiskDrive)
{
NTSTATUS Status;
PDEVICE_RELATIONS DeviceRelations;
- //
- // We're a child device, only handle target device relations
- //
+ /* We're a child device, only handle target device relations */
if (Type != TargetDeviceRelation)
{
Status = Irp->IoStatus.Status;
@@ -1711,15 +1343,13 @@
return Status;
}
- //
- // Allocate a buffer big enough to contain only one DO
- //
- DeviceRelations = ExAllocatePoolWithTag(PagedPool, sizeof(DeviceRelations), 'dmaR');
+ /* Allocate a buffer big enough to contain only one DO */
+ DeviceRelations = ExAllocatePoolWithTag(PagedPool,
+ sizeof(DeviceRelations),
+ 'dmaR');
if (DeviceRelations != NULL)
{
- //
- // Reference the DO and add it to the buffer
- //
+ /* Reference the DO and add it to the buffer */
ObReferenceObject(DeviceObject);
DeviceRelations->Objects[0] = DeviceObject;
DeviceRelations->Count = 1;
@@ -1730,75 +1360,53 @@
Status = STATUS_INSUFFICIENT_RESOURCES;
}
- //
- // Return our processing & complete
- //
+ /* Return our processing & complete */
Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
- //
- // Anything but bus relations, we don't handle
- //
+ /* We don't handle anything but bus relations */
if (Type != BusRelations) goto PassToNext;
- //
- // Acquire the disk list lock
- //
+ /* Acquire the disk list lock */
KeEnterCriticalRegion();
ExAcquireFastMutex(&DeviceExtension->DiskListLock);
- //
- // Did a device already fill relations?
- //
+ /* Did a device already fill relations? */
DeviceRelations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
if (DeviceRelations)
{
- //
- // Use the data
- //
+ /* Use the data */
Count = DeviceRelations->Count;
}
else
{
- //
- // We're the first
- //
+ /* We're the first */
Count = 0;
}
- //
- // Now loop our drives
- //
+ /* Now loop our drives */
DiskCount = 0;
ListHead = &DeviceExtension->DiskList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
- //
- // As long as it wasn't removed, count it in
- //
+ /* As long as it wasn't removed, count it in */
DriveExtension = CONTAINING_RECORD(NextEntry,
RAMDISK_DRIVE_EXTENSION,
DiskList);
if (DriveExtension->State < RamdiskStateBusRemoved) DiskCount++;
- //
- // Move to the next one
- //
+ /* Move to the next one */
NextEntry = NextEntry->Flink;
}
- //
- // Now we know our final count
- //
+ /* Now we know our final count */
FinalCount = Count + DiskCount;
- //
- // Allocate the structure
- //
+ /* Allocate the structure */
OurDeviceRelations = ExAllocatePoolWithTag(PagedPool,
FIELD_OFFSET(DEVICE_RELATIONS,
Objects) +
@@ -1807,9 +1415,7 @@
'dmaR');
if (!OurDeviceRelations)
{
- //
- // Fail
- //
+ /* Fail */
ExReleaseFastMutex(&DeviceExtension->DiskListLock);
KeLeaveCriticalRegion();
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
@@ -1817,101 +1423,69 @@
return STATUS_INSUFFICIENT_RESOURCES;
}
- //
- // Check if we already had some relations
- //
+ /* Check if we already had some relations */
if (Count)
{
- //
- // Copy them in
- //
+ /* Copy them in */
RtlCopyMemory(OurDeviceRelations->Objects,
DeviceRelations->Objects,
Count * sizeof(PDEVICE_OBJECT));
}
- //
- // Save the count
- //
+ /* Save the count */
OurDeviceRelations->Count = FinalCount;
- //
- // Now loop our drives again
- //
+ /* Now loop our drives again */
ListHead = &DeviceExtension->DiskList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
- //
- // Go to the end of the list
- //
+ /* Go to the end of the list */
DriveDeviceObject = &OurDeviceRelations->Objects[Count];
- //
- // Get the drive state
- //
+ /* Get the drive state */
DriveExtension = CONTAINING_RECORD(NextEntry,
RAMDISK_DRIVE_EXTENSION,
DiskList);
State = DriveExtension->State;
- //
- // If it was removed or enumerated, we don't touch the device object
- //
+ /* If it was removed or enumerated, we don't touch the device object */
if (State >= RamdiskStateBusRemoved)
{
- //
- // If it was removed, we still have to keep track of this though
- //
+ /* If it was removed, we still have to keep track of this though */
if (State == RamdiskStateBusRemoved)
{
- //
- // Mark it as enumerated now, but don't actually reference it
- //
+ /* Mark it as enumerated now, but don't actually reference it */
DriveExtension->State = RamdiskStateEnumerated;
}
}
else
{
- //
- // First time it's enumerated, reference the device object
- //
+ /* First time it's enumerated, reference the device object */
ObReferenceObject(DriveExtension->DeviceObject);
- //
- // Save the object pointer, and move on
- //
+ /* Save the object pointer and move on */
*DriveDeviceObject++ = DriveExtension->PhysicalDeviceObject;
}
if (DriveExtension->State < RamdiskStateBusRemoved) DiskCount++;
- //
- // Move to the next one
- //
+ /* Move to the next one */
NextEntry = NextEntry->Flink;
}
- //
- // Release the lock
- //
+ /* Release the lock */
ExReleaseFastMutex(&DeviceExtension->DiskListLock);
KeLeaveCriticalRegion();
- //
- // Cleanup old relations
- //
+ /* Cleanup old relations */
if (DeviceRelations) ExFreePool(DeviceRelations);
- //
- // Complete our IRP
- //
+ /* Complete our IRP */
Irp->IoStatus.Information = (ULONG_PTR)OurDeviceRelations;
Irp->IoStatus.Status = STATUS_SUCCESS;
- //
- // Pass to the next driver
- //
+ /* Pass to the next driver */
PassToNext:
IoCopyCurrentIrpStackLocationToNext(Irp);
return IoCallDriver(DeviceExtension->AttachedDevice, Irp);
@@ -1938,15 +1512,11 @@
DeviceExtension = DeviceObject->DeviceExtension;
- //
- // Acquire disks list lock
- //
+ /* Acquire disks list lock */
KeEnterCriticalRegion();
ExAcquireFastMutex(&DeviceExtension->DiskListLock);
- //
- // Loop over drives
- //
+ /* Loop over drives */
ListHead = &DeviceExtension->DiskList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
@@ -1955,78 +1525,50 @@
RAMDISK_DRIVE_EXTENSION,
DiskList);
- //
- // Delete the disk
- //
+ /* Delete the disk */
IoAcquireRemoveLock(&DriveExtension->RemoveLock, NULL);
RamdiskDeleteDiskDevice(DriveExtension->PhysicalDeviceObject, NULL);
- //
- // RamdiskDeleteDiskDevice releases list lock, so reacquire it
- //
+ /* RamdiskDeleteDiskDevice releases list lock, so reacquire it */
KeEnterCriticalRegion();
ExAcquireFastMutex(&DeviceExtension->DiskListLock);
}
- //
- // Release disks list lock
- //
+ /* Release disks list lock */
ExReleaseFastMutex(&DeviceExtension->DiskListLock);
KeLeaveCriticalRegion();
- //
- // Prepare to pass to the lower driver
- //
+ /* Prepare to pass to the lower driver */
IoSkipCurrentIrpStackLocation(Irp);
- //
- // Here everything went fine
- //
+ /* Here everything went fine */
Irp->IoStatus.Status = STATUS_SUCCESS;
- //
- // Call lower driver
- //
+ /* Call lower driver */
Status = IoCallDriver(DeviceExtension->AttachedDevice, Irp);
- //
- // Update state
- //
+ /* Update state */
DeviceExtension->State = RamdiskStateBusRemoved;
- //
- // Release the lock, and ensure that everyone
- // has finished its job before we continue
- // The lock has been acquired by the dispatcher
- //
+ /* Release the lock and ensure that everyone has finished its job before
+ * we continue. The lock has been acquired by the dispatcher */
IoReleaseRemoveLockAndWait(&DeviceExtension->RemoveLock, Irp);
- //
- // If there's a drive name
- //
+ /* If there's a drive name */
if (DeviceExtension->DriveDeviceName.Buffer)
{
- //
- // Inform it's going to be disabled
- // and free the drive name
- //
+ /* Inform it's going to be disabled and free the drive name */
IoSetDeviceInterfaceState(&DeviceExtension->DriveDeviceName, FALSE);
RtlFreeUnicodeString(&DeviceExtension->DriveDeviceName);
}
- //
- // Part from the stack, detach from lower device
- //
+ /* Part from the stack, detach from lower device */
IoDetachDevice(DeviceExtension->AttachedDevice);
- //
- // Finally, delete device
- //
+ /* Finally, delete device */
RamdiskBusFdo = NULL;
IoDeleteDevice(DeviceObject);
- //
- // Return status from lower driver
- //
+ /* Return status from lower driver */
return Status;
}
@@ -2043,18 +1585,14 @@
Status = STATUS_SUCCESS;
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
- //
- // Get what is being queried
- //
+ /* Get what is being queried */
switch (IoStackLocation->Parameters.QueryId.IdType)
{
case BusQueryDeviceID:
{
- //
- // Allocate a buffer long enough to receive Ramdisk\RamDisk in any case
- // In case we don't have RAMDISK_REGISTRY_DISK, we then need two more
- // chars to store Ramdisk\RamVolume instead
- //
+ /* Allocate a buffer long enough to receive Ramdisk\RamDisk in any case
+ * In case we don't have RAMDISK_REGISTRY_DISK, we then need two more
+ * chars to store Ramdisk\RamVolume instead */
StringLength = 4 * (DriveExtension->DiskType != RAMDISK_REGISTRY_DISK) + sizeof(L"Ramdisk\\RamDisk");
OutputString = ExAllocatePoolWithTag(PagedPool, StringLength, 'dmaR');
if (OutputString == NULL)
@@ -2078,13 +1616,11 @@
case BusQueryHardwareIDs:
{
- //
- // Allocate a buffer long enough to receive Ramdisk\RamDisk in any case
- // In case we don't have RAMDISK_REGISTRY_DISK, we then need two more
- // chars to store Ramdisk\RamVolume instead
- // We also need an extra char, because it is required that the string
- // is null-terminated twice
- //
+ /* Allocate a buffer long enough to receive Ramdisk\RamDisk in any case
+ * In case we don't have RAMDISK_REGISTRY_DISK, we then need two more
+ * chars to store Ramdisk\RamVolume instead
+ * We also need an extra char, because it is required that the string
+ * is null-terminated twice */
StringLength = 4 * (DriveExtension->DiskType != RAMDISK_REGISTRY_DISK) +
sizeof(UNICODE_NULL) + sizeof(L"Ramdisk\\RamDisk");
OutputString = ExAllocatePoolWithTag(PagedPool, StringLength, 'dmaR');
@@ -2132,23 +1668,25 @@
case BusQueryInstanceID:
{
- OutputString = ExAllocatePoolWithTag(PagedPool, DriveExtension->GuidString.MaximumLength, 'dmaR');
+ OutputString = ExAllocatePoolWithTag(PagedPool,
+ DriveExtension->GuidString.MaximumLength,
+ 'dmaR');
if (OutputString == NULL)
{
Status = STATUS_INSUFFICIENT_RESOURCES;
break;
}
- wcsncpy(OutputString, DriveExtension->GuidString.Buffer, DriveExtension->GuidString.MaximumLength / sizeof(WCHAR));
+ wcsncpy(OutputString,
+ DriveExtension->GuidString.Buffer,
+ DriveExtension->GuidString.MaximumLength / sizeof(WCHAR));
break;
}
case BusQueryDeviceSerialNumber:
{
- //
- // Nothing to do
- //
+ /* Nothing to do */
break;
}
}
@@ -2173,18 +1711,15 @@
DeviceCapabilities = IoStackLocation->Parameters.DeviceCapabilities.Capabilities;
DriveExtension = DeviceObject->DeviceExtension;
- //
- // Validate our input buffer
- //
- if (DeviceCapabilities->Version != 1 || DeviceCapabilities->Size < sizeof(DEVICE_CAPABILITIES))
+ /* Validate our input buffer */
+ if (DeviceCapabilities->Version != 1 ||
+ DeviceCapabilities->Size < sizeof(DEVICE_CAPABILITIES))
{
Status = STATUS_UNSUCCESSFUL;
}
else
{
- //
- // And set everything we know about our capabilities
- //
+ /* And set everything we know about our capabilities */
DeviceCapabilities->Removable = MarkRamdisksAsRemovable;
DeviceCapabilities->UniqueID = TRUE;
DeviceCapabilities->SilentInstall = TRUE;
@@ -2213,9 +1748,7 @@
DeviceTextType = IoStackLocation->Parameters.QueryDeviceText.DeviceTextType;
Status = STATUS_SUCCESS;
- //
- // Just copy our constants, according to the input
- //
+ /* Just copy our constants, according to the input */
switch (DeviceTextType)
{
case DeviceTextDescription:
@@ -2261,9 +1794,7 @@
PPNP_BUS_INFORMATION PnpBusInfo;
NTSTATUS Status = STATUS_SUCCESS;
- //
- // Allocate output memory
- //
+ /* Allocate output memory */
PnpBusInfo = ExAllocatePoolWithTag(PagedPool, sizeof(PNP_BUS_INFORMATION), 'dmaR');
if (PnpBusInfo == NULL)
{
@@ -2271,9 +1802,7 @@
}
else
{
- //
- // Copy our bus GUID and set our legacy type
- //
+ /* Copy our bus GUID and set our legacy type */
RtlCopyMemory(&PnpBusInfo->BusTypeGuid, &GUID_BUS_TYPE_RAMDISK, sizeof(GUID));
PnpBusInfo->LegacyBusType = PNPBus;
PnpBusInfo->BusNumber = 0;
@@ -2292,9 +1821,7 @@
IN PVOID Context)
{
- //
- // Just set the event to unlock caller
- //
+ /* Just set the event to unlock caller */
KeSetEvent((PKEVENT)Context, 0, FALSE);
return STATUS_MORE_PROCESSING_REQUIRED;
@@ -2311,26 +1838,18 @@
UCHAR Minor;
KEVENT Event;
- //
- // Get the device extension and stack location
- //
+ /* Get the device extension and stack location */
DeviceExtension = DeviceObject->DeviceExtension;
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
Minor = IoStackLocation->MinorFunction;
- //
- // Check if the bus is removed
- //
+ /* Check if the bus is removed */
if (DeviceExtension->State == RamdiskStateBusRemoved)
{
- //
- // Only remove-device and query-id are allowed
- //
+ /* Only remove-device and query-id are allowed */
if ((Minor != IRP_MN_REMOVE_DEVICE) && (Minor != IRP_MN_QUERY_ID))
{
- //
- // Fail anything else
- //
+ /* Fail anything else */
Status = STATUS_NO_SUCH_DEVICE;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -2338,24 +1857,18 @@
}
}
- //
- // Acquire the remove lock
- //
+ /* Acquire the remove lock */
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
if (!NT_SUCCESS(Status))
{
- //
- // Fail the IRP
- //
+ /* Fail the IRP */
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
- //
- // Query the IRP type
- //
+ /* Query the IRP type */
switch (Minor)
{
case IRP_MN_START_DEVICE:
@@ -2366,17 +1879,13 @@
DEVICE_INSTALL_STATE InstallState;
PRAMDISK_DRIVE_EXTENSION DriveExtension = (PRAMDISK_DRIVE_EXTENSION)DeviceExtension;
- //
- // If we already have a drive name, free it
- //
+ /* If we already have a drive name, free it */
if (DriveExtension->DriveDeviceName.Buffer)
{
ExFreePool(DriveExtension->DriveDeviceName.Buffer);
}
- //
- // Register our device interface
- //
+ /* Register our device interface */
if (DriveExtension->DiskType != RAMDISK_REGISTRY_DISK)
{
Status = IoRegisterDeviceInterface(DeviceObject,
@@ -2392,11 +1901,8 @@
&DriveExtension->DriveDeviceName);
}
- //
- // If we were asked not to assign a drive letter or
- // if getting a name failed, just return saying
- // we're now started
- //
+ /* If we were asked not to assign a drive letter or if getting
+ * a name failed, just return saying we're now started */
if (DriveExtension->DiskOptions.NoDriveLetter ||
DriveExtension->DriveDeviceName.Buffer == NULL)
{
@@ -2405,49 +1911,38 @@
break;
}
- //
- // Now get our installation state
- //
- Status = IoGetDeviceProperty(DeviceObject, DevicePropertyInstallState,
- sizeof(InstallState), &InstallState, &ResultLength);
- //
- // If querying the information failed, assume success
- //
+ /* Now get our installation state */
+ Status = IoGetDeviceProperty(DeviceObject,
+ DevicePropertyInstallState,
+ sizeof(InstallState),
+ &InstallState,
+ &ResultLength);
+ /* If querying the information failed, assume success */
if (!NT_SUCCESS(Status))
{
InstallState = InstallStateInstalled;
}
- //
- // If we were properly installed, then, enable the interface
- //
+ /* If we were properly installed, then, enable the interface */
if (InstallState == InstallStateInstalled)
{
Status = IoSetDeviceInterfaceState(&DriveExtension->DriveDeviceName, TRUE);
}
- //
- // We're fine & up
- //
+ /* We're fine & up */
DriveExtension->State = RamdiskStateStarted;
Irp->IoStatus.Status = Status;
break;
}
- //
- // Prepare next stack to pass it down
- //
+ /* Prepare next stack to pass it down */
IoCopyCurrentIrpStackLocationToNext(Irp);
- //
- // Initialize our notification event & our completion routine
- //
+ /* Initialize our notification event & our completion routine */
KeInitializeEvent(&Event, NotificationEvent, FALSE);
IoSetCompletionRoutine(Irp, RamdiskIoCompletionRoutine, &Event, TRUE, TRUE, TRUE);
- //
- // Call lower driver
- //
+ /* Call lower driver */
Status = IoCallDriver(DeviceExtension->AttachedDevice, Irp);
if (Status == STATUS_PENDING)
{
@@ -2455,9 +1950,7 @@
Status = Irp->IoStatus.Status;
}
- //
- // If it succeed to start, then, enable ourselve and we're up!
- //
+ /* If it succeed to start then enable ourselves and we're up! */
if (NT_SUCCESS(Status))
{
Status = IoSetDeviceInterfaceState(&DeviceExtension->DriveDeviceName, TRUE);
@@ -2480,28 +1973,22 @@
case IRP_MN_REMOVE_DEVICE:
{
- //
- // Remove the proper device
- //
+ /* Remove the proper device */
if (DeviceExtension->Type == RamdiskBus)
{
Status = RamdiskRemoveBusDevice(DeviceObject, Irp);
- //
- // Return here, lower device has already been called
- // And remove lock released. This is needed by the function.
- //
+ /* Return here, lower device has already been called
+ * And remove lock released. This is needed by the function. */
return Status;
}
else
{
Status = RamdiskDeleteDiskDevice(DeviceObject, Irp);
- //
- // Complete the IRP here and return
- // Here again we don't have to release remove lock
- // This has already been done by the function.
- //
+ /* Complete the IRP here and return
+ * Here again we don't have to release remove lock
+ * This has already been done by the function. */
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
@@ -2514,9 +2001,7 @@
case IRP_MN_QUERY_ID:
{
- //
- // Are we a drive?
- //
+ /* Are we a drive? */
if (DeviceExtension->Type == RamdiskDrive)
{
Status = RamdiskQueryId((PRAMDISK_DRIVE_EXTENSION)DeviceExtension, Irp);
@@ -2526,9 +2011,7 @@
case IRP_MN_QUERY_BUS_INFORMATION:
{
- //
- // Are we a drive?
- //
+ /* Are we a drive? */
if (DeviceExtension->Type == RamdiskDrive)
{
Status = RamdiskQueryBusInformation(DeviceObject, Irp);
@@ -2542,9 +2025,7 @@
case IRP_MN_QUERY_DEVICE_TEXT:
{
- //
- // Are we a drive?
- //
+ /* Are we a drive? */
if (DeviceExtension->Type == RamdiskDrive)
{
Status = RamdiskQueryDeviceText((PRAMDISK_DRIVE_EXTENSION)DeviceExtension, Irp);
@@ -2554,9 +2035,7 @@
case IRP_MN_QUERY_DEVICE_RELATIONS:
{
- //
- // Call our main routine
- //
+ /* Call our main routine */
Status = RamdiskQueryDeviceRelations(IoStackLocation->
Parameters.
QueryDeviceRelations.Type,
@@ -2567,9 +2046,7 @@
case IRP_MN_QUERY_CAPABILITIES:
{
- //
- // Are we a drive?
- //
+ /* Are we a drive? */
if (DeviceExtension->Type == RamdiskDrive)
{
Status = RamdiskQueryCapabilities(DeviceObject, Irp);
@@ -2580,9 +2057,7 @@
case IRP_MN_QUERY_RESOURCES:
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
{
- //
- // Complete immediately without touching it
- //
+ /* Complete immediately without touching it */
IoCompleteRequest(Irp, IO_NO_INCREMENT);
goto ReleaseAndReturn;
}
@@ -2592,27 +2067,19 @@
break;
}
- //
- // Are we the bus?
- //
+ /* Are we the bus? */
if (DeviceExtension->Type == RamdiskBus)
{
- //
- // Do we have an attached device?
- //
+ /* Do we have an attached device? */
if (DeviceExtension->AttachedDevice)
{
- //
- // Forward the IRP
- //
+ /* Forward the IRP */
IoSkipCurrentIrpStackLocation(Irp);
Status = IoCallDriver(DeviceExtension->AttachedDevice, Irp);
}
}
- //
- // Release the lock and return status
- //
+ /* Release the lock and return status */
ReleaseAndReturn:
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
return Status;
@@ -2629,27 +2096,18 @@
DeviceExtension = DeviceObject->DeviceExtension;
- //
- // If we have a device extension, take extra caution
- // with the lower driver
- //
+ /* If we have a device extension, take extra caution with the lower driver */
if (DeviceExtension != NULL)
{
PoStartNextPowerIrp(Irp);
- //
- // Device has not been removed yet, so
- // pass to the attached/lower driver
- //
+ /* Device has not been removed yet, so pass to the attached/lower driver */
if (DeviceExtension->State < RamdiskStateBusRemoved)
{
IoSkipCurrentIrpStackLocation(Irp);
return PoCallDriver(DeviceExtension->AttachedDevice, Irp);
}
- //
- // Otherwise, simply complete the IRP
- // Notifying that deletion is pending
- //
+ /* Otherwise, simply complete the IRP notifying that deletion is pending */
else
{
Irp->IoStatus.Status = STATUS_DELETE_PENDING;
@@ -2658,26 +2116,19 @@
}
}
- //
- // Get stack and deal with minor functions
- //
+ /* Get stack and deal with minor functions */
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
switch (IoStackLocation->MinorFunction)
{
case IRP_MN_SET_POWER:
{
- //
- // If setting device power state
- // it's all fine and return success
- //
+ /* If setting device power state it's all fine and return success */
if (DevicePowerState)
{
Irp->IoStatus.Status = STATUS_SUCCESS;
}
- //
- // Get appropriate status for return
- //
+ /* Get appropriate status for return */
Status = Irp->IoStatus.Status;
PoStartNextPowerIrp(Irp);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -2686,12 +2137,8 @@
case IRP_MN_QUERY_POWER:
{
- //
- // We can obviously accept all states
- // So just return success
- //
- Status =
- Irp->IoStatus.Status = STATUS_SUCCESS;
+ /* We can obviously accept all states so just return success */
+ Status = Irp->IoStatus.Status = STATUS_SUCCESS;
PoStartNextPowerIrp(Irp);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
break;
@@ -2699,9 +2146,7 @@
default:
{
- //
- // Just complete and save status for return
- //
+ /* Just complete and save status for return */
Status = Irp->IoStatus.Status;
PoStartNextPowerIrp(Irp);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -2722,19 +2167,14 @@
DeviceExtension = DeviceObject->DeviceExtension;
- //
- // If we have a device extension, forward the IRP
- // to the attached device
- //
+ /* If we have a device extension, forward the IRP to the attached device */
if (DeviceExtension != NULL)
{
IoSkipCurrentIrpStackLocation(Irp);
Status = IoCallDriver(DeviceExtension->AttachedDevice, Irp);
}
- //
- // Otherwise just complete the request
- // And return the status with which we complete it
- //
+ /* Otherwise just complete the request
+ * And return the status with which we complete it */
else
{
Status = Irp->IoStatus.Status;
@@ -2754,36 +2194,28 @@
DeviceExtension = DeviceObject->DeviceExtension;
- //
- // Having a proper device is mandatory
- //
+ /* Having a proper device is mandatory */
if (DeviceExtension->State > RamdiskStateStopped)
{
Status = STATUS_DEVICE_DOES_NOT_EXIST;
goto CompleteIRP;
}
- //
- // Acquire the remove lock
- //
+ /* Acquire the remove lock */
Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock, Irp);
if (!NT_SUCCESS(Status))
{
goto CompleteIRP;
}
- //
- // Queue the IRP for worker
- //
+ /* Queue the IRP for worker */
Status = SendIrpToThread(DeviceObject, Irp);
if (Status != STATUS_PENDING)
{
goto CompleteIRP;
}
- //
- // Release the remove lock
- //
+ /* Release the remove lock */
IoReleaseRemoveLock(&DeviceExtension->RemoveLock, Irp);
goto Quit;
@@ -2806,11 +2238,9 @@
DeviceExtension = DeviceObject->DeviceExtension;
- //
- // Ensure we have drive extension
- // Only perform flush on disks that have been created
- // from registry entries
- //
+ /* Ensure we have drive extension
+ * Only perform flush on disks that have been created
+ * from registry entries */
if (DeviceExtension->Type != RamdiskDrive ||
DeviceExtension->DiskType > RAMDISK_MEMORY_MAPPED_DISK)
{
@@ -2820,16 +2250,11 @@
return STATUS_SUCCESS;
}
- //
- // Queue the IRP for worker
- //
+ /* Queue the IRP for worker */
Status = SendIrpToThread(DeviceObject, Irp);
if (Status != STATUS_PENDING)
{
- //
- // Queueing failed - complete the IRP
- // and return failure
- //
+ /* Queuing failed - complete the IRP and return failure */
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -2842,9 +2267,7 @@
NTAPI
RamdiskUnload(IN PDRIVER_OBJECT DriverObject)
{
- //
- // Just release registry path if previously allocated
- //
+ /* Just release registry path if previously allocated */
if (DriverRegistryPath.Buffer)
{
ExFreePoolWithTag(DriverRegistryPath.Buffer, 'dmaR');
@@ -2862,14 +2285,10 @@
UNICODE_STRING DeviceName;
PDEVICE_OBJECT DeviceObject;
- //
- // Only create the bus FDO once
- //
+ /* Only create the bus FDO once */
if (RamdiskBusFdo) return STATUS_DEVICE_ALREADY_ATTACHED;
- //
- // Create the bus FDO
- //
+ /* Create the bus FDO */
RtlInitUnicodeString(&DeviceName, L"\\Device\\Ramdisk");
Status = IoCreateDevice(DriverObject,
sizeof(RAMDISK_BUS_EXTENSION),
@@ -2880,92 +2299,65 @@
&DeviceObject);
if (NT_SUCCESS(Status))
{
- //
- // Initialize the bus FDO extension
- //
+ /* Initialize the bus FDO extension */
DeviceExtension = DeviceObject->DeviceExtension;
RtlZeroMemory(DeviceObject->DeviceExtension,
sizeof(RAMDISK_BUS_EXTENSION));
- //
- // Set bus FDO flags
- //
+ /* Set bus FDO flags */
DeviceObject->Flags |= DO_POWER_PAGABLE | DO_DIRECT_IO;
- //
- // Setup the bus FDO extension
- //
+ /* Setup the bus FDO extension */
DeviceExtension->Type = RamdiskBus;
ExInitializeFastMutex(&DeviceExtension->DiskListLock);
- IoInitializeRemoveLock(&DeviceExtension->RemoveLock,
- 'dmaR',
- 1,
- 0);
+ IoInitializeRemoveLock(&DeviceExtension->RemoveLock, 'dmaR', 1, 0);
InitializeListHead(&DeviceExtension->DiskList);
DeviceExtension->PhysicalDeviceObject = PhysicalDeviceObject;
DeviceExtension->DeviceObject = DeviceObject;
- //
- // Register the RAM disk device interface
- //
+ /* Register the RAM disk device interface */
Status = IoRegisterDeviceInterface(PhysicalDeviceObject,
&RamdiskBusInterface,
NULL,
&DeviceExtension->BusDeviceName);
if (!NT_SUCCESS(Status))
{
- //
- // Fail
- //
+ /* Fail */
IoDeleteDevice(DeviceObject);
return Status;
}
- //
- // Attach us to the device stack
- //
+ /* Attach us to the device stack */
AttachedDevice = IoAttachDeviceToDeviceStack(DeviceObject,
PhysicalDeviceObject);
DeviceExtension->AttachedDevice = AttachedDevice;
if (!AttachedDevice)
{
- //
- // Fail
- //
+ /* Fail */
IoSetDeviceInterfaceState(&DeviceExtension->BusDeviceName, 0);
RtlFreeUnicodeString(&DeviceExtension->BusDeviceName);
IoDeleteDevice(DeviceObject);
return STATUS_NO_SUCH_DEVICE;
}
- //
- // Bus FDO is initialized
- //
+ /* Bus FDO is initialized */
RamdiskBusFdo = DeviceObject;
- //
- // Loop for loader block
- //
+ /* Loop for loader block */
if (KeLoaderBlock)
{
- //
- // Are we being booted from setup? Not yet supported
- //
+ /* Are we being booted from setup? Not yet supported */
if (KeLoaderBlock->SetupLdrBlock)
DPRINT1("FIXME: RamdiskAddDevice is UNSUPPORTED when being started from SETUPLDR!\n");
- // ASSERT(!KeLoaderBlock->SetupLdrBlock);
- }
-
- //
- // All done
- //
+ //ASSERT(!KeLoaderBlock->SetupLdrBlock);
+ }
+
+ /* All done */
DeviceObject->Flags &= DO_DEVICE_INITIALIZING;
Status = STATUS_SUCCESS;
}
- //
- // Return status
- //
+ /* Return status */
return Status;
}
@@ -2979,14 +2371,10 @@
NTSTATUS Status;
DPRINT("RAM Disk Driver Initialized\n");
- //
- // Query ramdisk parameters
- //
+ /* Query ramdisk parameters */
QueryParameters(RegistryPath);
- //
- // Save the registry path
- //
+ /* Save the registry path */
DriverRegistryPath = *RegistryPath;
DriverRegistryPath.Buffer = ExAllocatePoolWithTag(PagedPool,
RegistryPath->Length +
@@ -2995,9 +2383,7 @@
if (!DriverRegistryPath.Buffer) return STATUS_INSUFFICIENT_RESOURCES;
RtlCopyUnicodeString(&DriverRegistryPath, RegistryPath);
- //
- // Set device routines
- //
+ /* Set device routines */
DriverObject->MajorFunction[IRP_MJ_CREATE] = RamdiskOpenClose;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = RamdiskOpenClose;
DriverObject->MajorFunction[IRP_MJ_READ] = RamdiskReadWrite;
@@ -3011,53 +2397,35 @@
DriverObject->DriverExtension->AddDevice = RamdiskAddDevice;
DriverObject->DriverUnload = RamdiskUnload;
- //
- // Check for a loader block
- //
+ /* Check for a loader block */
if (KeLoaderBlock)
{
- //
- // Get the boot device name
- //
+ /* Get the boot device name */
BootDeviceName = KeLoaderBlock->ArcBootDeviceName;
if (BootDeviceName)
{
- //
- // Check if we're booting from ramdisk
- //
+ /* Check if we're booting from ramdisk */
if ((strlen(BootDeviceName) >= 10) &&
!(_strnicmp(BootDeviceName, "ramdisk(0)", 10)))
{
- //
- // We'll have to tell the PnP Manager
- //
+ /* We'll have to tell the PnP Manager */
ReportDetectedDevice = TRUE;
- //
- // Check for a command line
- //
+ /* Check for a command line */
CommandLine = KeLoaderBlock->LoadOptions;
if (CommandLine)
{
- //
- // Check if this is an ISO boot
- //
+ /* Check if this is an ISO boot */
if (strstr(CommandLine, "RDEXPORTASCD"))
{
- //
- // Remember for later
- //
+ /* Remember for later */
ExportBootDiskAsCd = TRUE;
}
- //
- // Check if this is PE boot
- //
+ /* Check if this is PE boot */
if (strstr(CommandLine, "MININT"))
{
- //
- // Remember for later
- //
+ /* Remember for later */
IsWinPEBoot = TRUE;
}
}
@@ -3066,21 +2434,15 @@
}
}
- //
- // Installing from Ramdisk isn't supported yet
- //
+ /* Installing from Ramdisk isn't supported yet */
if (KeLoaderBlock->SetupLdrBlock)
DPRINT1("FIXME: Installing from RamDisk is UNSUPPORTED!\n");
- // ASSERT(!KeLoaderBlock->SetupLdrBlock);
-
- //
- // Are we reporting the device
- //
+ //ASSERT(!KeLoaderBlock->SetupLdrBlock);
+
+ /* Are we reporting the device */
if (ReportDetectedDevice)
{
- //
- // Do it
- //
+ /* Do it */
Status = IoReportDetectedDevice(DriverObject,
InterfaceTypeUndefined,
0xFFFFFFFF,
@@ -3091,15 +2453,11 @@
&PhysicalDeviceObject);
if (NT_SUCCESS(Status))
{
- //
- // Create the device object
- //
+ /* Create the device object */
Status = RamdiskAddDevice(DriverObject, PhysicalDeviceObject);
if (NT_SUCCESS(Status))
{
- //
- // We're done
- //
+ /* We're done */
PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
Status = STATUS_SUCCESS;
}
@@ -3107,14 +2465,10 @@
}
else
{
- //
- // Done
- //
+ /* Done */
Status = STATUS_SUCCESS;
}
- //
- // Done
- //
+ /* Done */
return Status;
}