}
}
- DPRINT("DriveNumber %d\n", DriveNumber);
+ DPRINT("DriveNumber %lu\n", DriveNumber);
/* Build drive name */
swprintf(DriveNameBuffer,
NULL);
Status = ZwOpenDirectoryObject (&DirectoryHandle,
- SYMBOLIC_LINK_ALL_ACCESS,
+ DIRECTORY_ALL_ACCESS,
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
Skip = 0;
while (NT_SUCCESS(Status))
{
- Status = NtQueryDirectoryObject (DirectoryHandle,
+ Status = ZwQueryDirectoryObject (DirectoryHandle,
DirectoryInfo,
2 * PAGE_SIZE,
FALSE,
}
}
}
+
+ ZwClose(DirectoryHandle);
+
ExFreePoolWithTag(DirectoryInfo, TAG_FILE_SYSTEM);
return RDiskCount;
}
}
}
- DPRINT("DiskGeometry.BytesPerSector: %d\n",
+ DPRINT("DiskGeometry.BytesPerSector: %lu\n",
DiskGeometry.BytesPerSector);
if (DeviceObject->Characteristics & FILE_REMOVABLE_MEDIA)
RDiskCount = xHalpGetRDiskCount();
- DPRINT("RDiskCount %d\n", RDiskCount);
+ DPRINT("RDiskCount %lu\n", RDiskCount);
- Buffer1 = (PWSTR)ExAllocatePoolWithTag(PagedPool,
- 64 * sizeof(WCHAR), TAG_FILE_SYSTEM);
- Buffer2 = (PWSTR)ExAllocatePoolWithTag(PagedPool,
- 32 * sizeof(WCHAR), TAG_FILE_SYSTEM);
+ Buffer1 = ExAllocatePoolWithTag(PagedPool,
+ 64 * sizeof(WCHAR),
+ TAG_FILE_SYSTEM);
+ if (!Buffer1) return;
- PartialInformation = (PKEY_VALUE_PARTIAL_INFORMATION)ExAllocatePoolWithTag(PagedPool,
- sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(REG_DISK_MOUNT_INFO), TAG_FILE_SYSTEM);
+ Buffer2 = ExAllocatePoolWithTag(PagedPool,
+ 32 * sizeof(WCHAR),
+ TAG_FILE_SYSTEM);
+ if (!Buffer2)
+ {
+ ExFreePoolWithTag(Buffer1, TAG_FILE_SYSTEM);
+ return;
+ }
- if (!Buffer1 || !Buffer2 || !PartialInformation) return;
+ PartialInformation = ExAllocatePoolWithTag(PagedPool,
+ sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(REG_DISK_MOUNT_INFO),
+ TAG_FILE_SYSTEM);
+ if (!PartialInformation)
+ {
+ ExFreePoolWithTag(Buffer2, TAG_FILE_SYSTEM);
+ ExFreePoolWithTag(Buffer1, TAG_FILE_SYSTEM);
+ return;
+ }
DiskMountInfo = (PREG_DISK_MOUNT_INFO) PartialInformation->Data;
- /* Open or Create the 'MountedDevices' key */
+ /* Create or open the 'MountedDevices' key */
RtlInitUnicodeString(&UnicodeString1, L"\\Registry\\Machine\\SYSTEM\\MountedDevices");
InitializeObjectAttributes(&ObjectAttributes,
&UnicodeString1,
- OBJ_CASE_INSENSITIVE,
+ OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL);
- Status = ZwOpenKey(&hKey,
+ Status = ZwCreateKey(&hKey,
KEY_ALL_ACCESS,
- &ObjectAttributes);
- if (!NT_SUCCESS(Status))
- {
- Status = ZwCreateKey(&hKey,
- KEY_ALL_ACCESS,
- &ObjectAttributes,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- NULL);
- }
+ &ObjectAttributes,
+ 0,
+ NULL,
+ REG_OPTION_NON_VOLATILE,
+ NULL);
if (!NT_SUCCESS(Status))
{
hKey = NULL;
}
/* 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,
{
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,
ExFreePoolWithTag(PartialInformation, TAG_FILE_SYSTEM);
ExFreePoolWithTag(Buffer2, TAG_FILE_SYSTEM);
ExFreePoolWithTag(Buffer1, TAG_FILE_SYSTEM);
- if (hKey) ZwClose(hKey);
+ if (hKey) ObCloseHandle(hKey, KernelMode);
+ return;
}
RtlZeroMemory(LayoutArray,
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",
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);
/* 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);
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",
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",
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",
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",
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",
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",
}
/* 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);
ExFreePoolWithTag(PartialInformation, TAG_FILE_SYSTEM);
ExFreePoolWithTag(Buffer2, TAG_FILE_SYSTEM);
ExFreePoolWithTag(Buffer1, TAG_FILE_SYSTEM);
- if (hKey)
- {
- ZwClose(hKey);
- }
+ if (hKey) ObCloseHandle(hKey, KernelMode);
}
#endif
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)
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
{
PartitionInfo->PartitionLength.QuadPart = 0;
PartitionInfo->HiddenSectors = 0;
- /* FIXME: REACTOS HACK */
PartitionInfo->PartitionNumber = 0;
}
}
/* 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;
}
}
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);
/* 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;
do
{
/* Reset the event since we reuse it */
- KeResetEvent(&Event);
+ KeClearEvent(&Event);
/* Build the read IRP */
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_READ,
PartitionDescriptor->PartitionType = (UCHAR)PartitionType;
/* Reset the reusable event */
- KeResetEvent(&Event);
+ KeClearEvent(&Event);
/* Build the write IRP */
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_WRITE,