[NTOS:MM] Fix ViewSize parameter passed to MiInsertVadEx() from MiCreatePebOrTeb()
[reactos.git] / ntoskrnl / fstub / disksup.c
index 210f0d0..ef5630d 100644 (file)
@@ -95,7 +95,7 @@ HalpAssignDrive(IN PUNICODE_STRING PartitionName,
         }
     }
 
-    DPRINT("DriveNumber %d\n", DriveNumber);
+    DPRINT("DriveNumber %lu\n", DriveNumber);
 
     /* Build drive name */
     swprintf(DriveNameBuffer,
@@ -173,7 +173,7 @@ xHalpGetRDiskCount(VOID)
         NULL);
 
     Status = ZwOpenDirectoryObject (&DirectoryHandle,
-        SYMBOLIC_LINK_ALL_ACCESS,
+        DIRECTORY_ALL_ACCESS,
         &ObjectAttributes);
     if (!NT_SUCCESS(Status))
     {
@@ -186,7 +186,7 @@ xHalpGetRDiskCount(VOID)
     Skip = 0;
     while (NT_SUCCESS(Status))
     {
-        Status = NtQueryDirectoryObject (DirectoryHandle,
+        Status = ZwQueryDirectoryObject (DirectoryHandle,
             DirectoryInfo,
             2 * PAGE_SIZE,
             FALSE,
@@ -223,6 +223,9 @@ xHalpGetRDiskCount(VOID)
             }
         }
     }
+
+    ZwClose(DirectoryHandle);
+
     ExFreePoolWithTag(DirectoryInfo, TAG_FILE_SYSTEM);
     return RDiskCount;
 }
@@ -369,7 +372,7 @@ xHalQueryDriveLayout(IN PUNICODE_STRING DeviceName,
         }
     }
 
-    DPRINT("DiskGeometry.BytesPerSector: %d\n",
+    DPRINT("DiskGeometry.BytesPerSector: %lu\n",
         DiskGeometry.BytesPerSector);
 
     if (DeviceObject->Characteristics & FILE_REMOVABLE_MEDIA)
@@ -444,7 +447,7 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
 
     RDiskCount = xHalpGetRDiskCount();
 
-    DPRINT("RDiskCount %d\n", RDiskCount);
+    DPRINT("RDiskCount %lu\n", RDiskCount);
 
     Buffer1 = ExAllocatePoolWithTag(PagedPool,
         64 * sizeof(WCHAR),
@@ -493,14 +496,11 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
     }
 
     /* Create PhysicalDrive links */
-    DPRINT("Physical disk drives: %d\n", ConfigInfo->DiskCount);
+    DPRINT("Physical disk drives: %lu\n", ConfigInfo->DiskCount);
     for (i = 0; i < ConfigInfo->DiskCount; i++)
     {
-        swprintf(Buffer1,
-            L"\\Device\\Harddisk%d\\Partition0",
-            i);
-        RtlInitUnicodeString(&UnicodeString1,
-            Buffer1);
+        swprintf(Buffer1, L"\\Device\\Harddisk%lu\\Partition0", i);
+        RtlInitUnicodeString(&UnicodeString1, Buffer1);
 
         InitializeObjectAttributes(&ObjectAttributes,
             &UnicodeString1,
@@ -518,11 +518,8 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
         {
             ZwClose(FileHandle);
 
-            swprintf(Buffer2,
-                L"\\??\\PhysicalDrive%d",
-                i);
-            RtlInitUnicodeString(&UnicodeString2,
-                Buffer2);
+            swprintf(Buffer2, L"\\??\\PhysicalDrive%lu", i);
+            RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
             DPRINT("Creating link: %S ==> %S\n",
                 Buffer2,
@@ -551,14 +548,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
         ConfigInfo->DiskCount * sizeof(PDRIVE_LAYOUT_INFORMATION));
     for (i = 0; i < ConfigInfo->DiskCount; i++)
     {
-        swprintf(Buffer1,
-            L"\\Device\\Harddisk%d\\Partition0",
-            i);
-        RtlInitUnicodeString(&UnicodeString1,
-            Buffer1);
+        swprintf(Buffer1, L"\\Device\\Harddisk%lu\\Partition0", i);
+        RtlInitUnicodeString(&UnicodeString1, Buffer1);
 
-        Status = xHalQueryDriveLayout(&UnicodeString1,
-            &LayoutArray[i]);
+        Status = xHalQueryDriveLayout(&UnicodeString1, &LayoutArray[i]);
         if (!NT_SUCCESS(Status))
         {
             DbgPrint("xHalQueryDriveLayout() failed (Status = 0x%lx)\n",
@@ -637,11 +630,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
                                         LayoutArray[i]->PartitionEntry[j].RewritePartition == FALSE)
                                     {
                                         swprintf(Buffer2,
-                                            L"\\Device\\Harddisk%d\\Partition%d",
-                                            i,
-                                            LayoutArray[i]->PartitionEntry[j].PartitionNumber);
-                                        RtlInitUnicodeString(&UnicodeString2,
-                                            Buffer2);
+                                                 L"\\Device\\Harddisk%lu\\Partition%lu",
+                                                 i,
+                                                 LayoutArray[i]->PartitionEntry[j].PartitionNumber);
+                                        RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                                         /* Assign drive */
                                         DPRINT("  %wZ\n", &UnicodeString2);
@@ -683,17 +675,16 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
             /* Search for bootable partition */
             for (j = 0; j < NUM_PARTITION_TABLE_ENTRIES && j < LayoutArray[DiskNumber]->PartitionCount; j++)
             {
-                if ((LayoutArray[DiskNumber]->PartitionEntry[j].BootIndicator == TRUE) &&
+                if ((LayoutArray[DiskNumber]->PartitionEntry[j].BootIndicator != FALSE) &&
                     IsRecognizedPartition(LayoutArray[DiskNumber]->PartitionEntry[j].PartitionType))
                 {
                     if (LayoutArray[DiskNumber]->PartitionEntry[j].RewritePartition == FALSE)
                     {
                         swprintf(Buffer2,
-                            L"\\Device\\Harddisk%lu\\Partition%d",
-                            DiskNumber,
-                            LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
-                        RtlInitUnicodeString(&UnicodeString2,
-                            Buffer2);
+                                 L"\\Device\\Harddisk%lu\\Partition%lu",
+                                 DiskNumber,
+                                 LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
+                        RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                         /* Assign drive */
                         DPRINT("  %wZ\n", &UnicodeString2);
@@ -730,11 +721,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
                     IsRecognizedPartition(LayoutArray[DiskNumber]->PartitionEntry[j].PartitionType))
                 {
                     swprintf(Buffer2,
-                        L"\\Device\\Harddisk%d\\Partition%d",
-                        DiskNumber,
-                        LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
-                    RtlInitUnicodeString(&UnicodeString2,
-                        Buffer2);
+                             L"\\Device\\Harddisk%lu\\Partition%lu",
+                             DiskNumber,
+                             LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
+                    RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                     /* Assign drive */
                     DPRINT("  %wZ\n",
@@ -771,11 +761,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
                     LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber != 0)
                 {
                     swprintf(Buffer2,
-                        L"\\Device\\Harddisk%d\\Partition%d",
-                        DiskNumber,
-                        LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
-                    RtlInitUnicodeString(&UnicodeString2,
-                        Buffer2);
+                             L"\\Device\\Harddisk%lu\\Partition%lu",
+                             DiskNumber,
+                             LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
+                    RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                     /* Assign drive */
                     DPRINT("  %wZ\n",
@@ -808,11 +797,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
                     IsRecognizedPartition(LayoutArray[DiskNumber]->PartitionEntry[j].PartitionType))
                 {
                     swprintf(Buffer2,
-                        L"\\Device\\Harddisk%d\\Partition%d",
-                        DiskNumber,
-                        LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
-                    RtlInitUnicodeString(&UnicodeString2,
-                        Buffer2);
+                             L"\\Device\\Harddisk%lu\\Partition%lu",
+                             DiskNumber,
+                             LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
+                    RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                     /* Assign drive */
                     DPRINT("  %wZ\n",
@@ -846,11 +834,10 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
                     LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber != 0)
                 {
                     swprintf(Buffer2,
-                        L"\\Device\\Harddisk%d\\Partition%d",
-                        DiskNumber,
-                        LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
-                    RtlInitUnicodeString(&UnicodeString2,
-                        Buffer2);
+                             L"\\Device\\Harddisk%lu\\Partition%lu",
+                             DiskNumber,
+                             LayoutArray[DiskNumber]->PartitionEntry[j].PartitionNumber);
+                    RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                     /* Assign drive */
                     DPRINT("  %wZ\n",
@@ -880,11 +867,8 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
             if (LayoutArray[i]->PartitionCount == 1 &&
                 LayoutArray[i]->PartitionEntry[0].PartitionType == 0)
             {
-                swprintf(Buffer2,
-                    L"\\Device\\Harddisk%d\\Partition1",
-                    i);
-                RtlInitUnicodeString(&UnicodeString2,
-                    Buffer2);
+                swprintf(Buffer2, L"\\Device\\Harddisk%lu\\Partition1", i);
+                RtlInitUnicodeString(&UnicodeString2, Buffer2);
 
                 /* Assign drive */
                 DPRINT("  %wZ\n",
@@ -911,14 +895,11 @@ xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
 end_assign_disks:
 
     /* Assign floppy drives */
-    DPRINT("Floppy drives: %d\n", ConfigInfo->FloppyCount);
+    DPRINT("Floppy drives: %lu\n", ConfigInfo->FloppyCount);
     for (i = 0; i < ConfigInfo->FloppyCount; i++)
     {
-        swprintf(Buffer1,
-            L"\\Device\\Floppy%d",
-            i);
-        RtlInitUnicodeString(&UnicodeString1,
-            Buffer1);
+        swprintf(Buffer1, L"\\Device\\Floppy%lu", i);
+        RtlInitUnicodeString(&UnicodeString1, Buffer1);
 
         /* Assign drive letters A: or B: or first free drive letter */
         DPRINT("  %wZ\n",
@@ -934,14 +915,11 @@ end_assign_disks:
     }
 
     /* Assign cdrom drives */
-    DPRINT("CD-Rom drives: %d\n", ConfigInfo->CdRomCount);
+    DPRINT("CD-Rom drives: %lu\n", ConfigInfo->CdRomCount);
     for (i = 0; i < ConfigInfo->CdRomCount; i++)
     {
-        swprintf(Buffer1,
-            L"\\Device\\CdRom%d",
-            i);
-        RtlInitUnicodeString(&UnicodeString1,
-            Buffer1);
+        swprintf(Buffer1, L"\\Device\\CdRom%lu", i);
+        RtlInitUnicodeString(&UnicodeString1, Buffer1);
 
         /* Assign first free drive letter */
         DPRINT("  %wZ\n", &UnicodeString1);
@@ -1035,6 +1013,9 @@ HalpGetFullGeometry(IN PDEVICE_OBJECT DeviceObject,
             return STATUS_INSUFFICIENT_RESOURCES;
         }
 
+        /* Reset event */
+        KeClearEvent(Event);
+
         /* Call the driver and check if it's pending */
         Status = IoCallDriver(DeviceObject, Irp);
         if (Status == STATUS_PENDING)
@@ -1680,8 +1661,8 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
                     UInt32x32To64(GET_PARTITION_LENGTH(PartitionDescriptor),
                                   SectorSize);
 
-                /* FIXME: REACTOS HACK */
-                PartitionInfo->PartitionNumber = i + 1;
+                /* Get the partition number */
+                PartitionInfo->PartitionNumber = (!IsContainerPartition(PartitionType)) ? i + 1 : 0;
             }
             else
             {
@@ -1692,7 +1673,6 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
                 PartitionInfo->PartitionLength.QuadPart = 0;
                 PartitionInfo->HiddenSectors = 0;
 
-                /* FIXME: REACTOS HACK */
                 PartitionInfo->PartitionNumber = 0;
             }
         }
@@ -1731,7 +1711,7 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
 
                 /* Also update the maximum sector */
                 MaxSector = GET_PARTITION_LENGTH(PartitionDescriptor);
-                DPRINT1("FSTUB: MaxSector now = %#08lx\n", MaxSector);
+                DPRINT1("FSTUB: MaxSector now = %I64d\n", MaxSector);
                 break;
             }
         }
@@ -1768,7 +1748,7 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
             DPRINT1("FSTUB: Drive %#p has no valid MBR. Make it into a "
                     "super-floppy\n",
                     DeviceObject);
-            DPRINT1("FSTUB: Drive has %#08lx sectors and is %#016I64x "
+            DPRINT1("FSTUB: Drive has %I64d sectors and is %#016I64x "
                     "bytes large\n",
                     EndSector, EndSector * DiskGeometry.BytesPerSector);
 
@@ -1812,7 +1792,11 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject,
 
     /* Free the buffer and check for success */
     if (Buffer) ExFreePoolWithTag(Buffer, TAG_FILE_SYSTEM);
-    if (!NT_SUCCESS(Status)) ExFreePoolWithTag(*PartitionBuffer, TAG_FILE_SYSTEM);
+    if (!NT_SUCCESS(Status))
+    {
+        ExFreePoolWithTag(*PartitionBuffer, TAG_FILE_SYSTEM);
+        *PartitionBuffer = NULL;
+    }
 
     /* Return status */
     return Status;
@@ -1863,7 +1847,7 @@ xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
     do
     {
         /* Reset the event since we reuse it */
-        KeResetEvent(&Event);
+        KeClearEvent(&Event);
 
         /* Build the read IRP */
         Irp = IoBuildSynchronousFsdRequest(IRP_MJ_READ,
@@ -1928,7 +1912,7 @@ xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
                 PartitionDescriptor->PartitionType = (UCHAR)PartitionType;
 
                 /* Reset the reusable event */
-                KeResetEvent(&Event);
+                KeClearEvent(&Event);
 
                 /* Build the write IRP */
                 Irp = IoBuildSynchronousFsdRequest(IRP_MJ_WRITE,