mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
Fixed bootable partition bug
svn path=/trunk/; revision=1895
This commit is contained in:
parent
cbcc365a25
commit
7398918d11
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: xhaldrv.c,v 1.7 2000/08/25 15:55:02 ekohl Exp $
|
/* $Id: xhaldrv.c,v 1.8 2001/05/06 22:32:34 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -27,10 +27,20 @@
|
||||||
#define SIGNATURE_OFFSET 0x01b8
|
#define SIGNATURE_OFFSET 0x01b8
|
||||||
#define PARTITION_TBL_SIZE 4
|
#define PARTITION_TBL_SIZE 4
|
||||||
|
|
||||||
|
/*
|
||||||
#define IsUsablePartition(P) \
|
#define IsUsablePartition(P) \
|
||||||
((P) != PTEmpty && \
|
((P) != PTEmpty && \
|
||||||
(P) != PTDosExtended && \
|
(P) != PTDosExtended && \
|
||||||
(P) != PTWin95ExtendedLBA)
|
(P) < PTWin95ExtendedLBA)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IsUsablePartition(P) \
|
||||||
|
((P) == PTDOS3xPrimary || \
|
||||||
|
(P) == PTOLDDOS16Bit || \
|
||||||
|
(P) == PTDos5xPrimary || \
|
||||||
|
(P) == PTWin95FAT32 || \
|
||||||
|
(P) == PTWin95FAT32LBA || \
|
||||||
|
(P) == PTWin95FAT16LBA)
|
||||||
|
|
||||||
|
|
||||||
typedef struct _PARTITION
|
typedef struct _PARTITION
|
||||||
|
@ -277,278 +287,284 @@ HalpAssignDrive (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID FASTCALL
|
||||||
FASTCALL
|
xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
|
||||||
xHalIoAssignDriveLetters (
|
IN PSTRING NtDeviceName,
|
||||||
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
|
OUT PUCHAR NtSystemPath,
|
||||||
IN PSTRING NtDeviceName,
|
OUT PSTRING NtSystemPathString)
|
||||||
OUT PUCHAR NtSystemPath,
|
|
||||||
OUT PSTRING NtSystemPathString
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
PDRIVE_LAYOUT_INFORMATION LayoutInfo;
|
PDRIVE_LAYOUT_INFORMATION LayoutInfo;
|
||||||
PCONFIGURATION_INFORMATION ConfigInfo;
|
PCONFIGURATION_INFORMATION ConfigInfo;
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
IO_STATUS_BLOCK StatusBlock;
|
IO_STATUS_BLOCK StatusBlock;
|
||||||
UNICODE_STRING UnicodeString1;
|
UNICODE_STRING UnicodeString1;
|
||||||
UNICODE_STRING UnicodeString2;
|
UNICODE_STRING UnicodeString2;
|
||||||
HANDLE FileHandle;
|
HANDLE FileHandle;
|
||||||
PWSTR Buffer1;
|
PWSTR Buffer1;
|
||||||
PWSTR Buffer2;
|
PWSTR Buffer2;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ULONG DriveMap = 0;
|
ULONG DriveMap = 0;
|
||||||
ULONG j;
|
ULONG j;
|
||||||
|
|
||||||
DPRINT("xHalIoAssignDriveLetters()\n");
|
DPRINT("xHalIoAssignDriveLetters()\n");
|
||||||
|
|
||||||
ConfigInfo = IoGetConfigurationInformation ();
|
ConfigInfo = IoGetConfigurationInformation ();
|
||||||
|
|
||||||
Buffer1 = (PWSTR)ExAllocatePool (PagedPool,
|
Buffer1 = (PWSTR)ExAllocatePool(PagedPool,
|
||||||
64 * sizeof(WCHAR));
|
64 * sizeof(WCHAR));
|
||||||
Buffer2 = (PWSTR)ExAllocatePool (PagedPool,
|
Buffer2 = (PWSTR)ExAllocatePool(PagedPool,
|
||||||
32 * sizeof(WCHAR));
|
32 * sizeof(WCHAR));
|
||||||
|
|
||||||
/* Create PhysicalDrive links */
|
/* Create PhysicalDrive links */
|
||||||
DPRINT("Physical disk drives: %d\n", ConfigInfo->DiskCount);
|
DPRINT("Physical disk drives: %d\n", ConfigInfo->DiskCount);
|
||||||
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Harddisk%d\\Partition0",
|
L"\\Device\\Harddisk%d\\Partition0",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
InitializeObjectAttributes (&ObjectAttributes,
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
&UnicodeString1,
|
&UnicodeString1,
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
Status = NtOpenFile (&FileHandle,
|
Status = NtOpenFile(&FileHandle,
|
||||||
0x10001,
|
0x10001,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&StatusBlock,
|
&StatusBlock,
|
||||||
1,
|
1,
|
||||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
NtClose (FileHandle);
|
NtClose(FileHandle);
|
||||||
|
|
||||||
swprintf (Buffer2,
|
swprintf(Buffer2,
|
||||||
L"\\??\\PhysicalDrive%d",
|
L"\\??\\PhysicalDrive%d",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString2,
|
RtlInitUnicodeString(&UnicodeString2,
|
||||||
Buffer2);
|
Buffer2);
|
||||||
|
|
||||||
DPRINT("Creating link: %S ==> %S\n",
|
DPRINT("Creating link: %S ==> %S\n",
|
||||||
Buffer2,
|
Buffer2,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
IoCreateSymbolicLink (&UnicodeString2,
|
IoCreateSymbolicLink(&UnicodeString2,
|
||||||
&UnicodeString1);
|
&UnicodeString1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign pre-assigned (registry) partitions */
|
/* Assign pre-assigned (registry) partitions */
|
||||||
|
|
||||||
/* Assign bootable partitions */
|
/* Assign bootable partitions */
|
||||||
DPRINT("Assigning bootable partitions:\n");
|
DPRINT("Assigning bootable partitions:\n");
|
||||||
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Harddisk%d\\Partition0",
|
L"\\Device\\Harddisk%d\\Partition0",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
Status = xHalpQueryDriveLayout (&UnicodeString1,
|
Status = xHalpQueryDriveLayout(&UnicodeString1,
|
||||||
&LayoutInfo);
|
&LayoutInfo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DbgPrint("xHalpQueryDriveLayout() failed (Status = 0x%lx)\n",
|
DbgPrint("xHalpQueryDriveLayout() failed (Status = 0x%lx)\n",
|
||||||
Status);
|
Status);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Logical partitions: %d\n",
|
DPRINT("Logical partitions: %d\n",
|
||||||
LayoutInfo->PartitionCount);
|
LayoutInfo->PartitionCount);
|
||||||
|
|
||||||
/* search for bootable partitions */
|
/* search for bootable partitions */
|
||||||
for (j = 0; j < LayoutInfo->PartitionCount; j++)
|
for (j = 0; j < LayoutInfo->PartitionCount; j++)
|
||||||
{
|
{
|
||||||
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
||||||
j,
|
j,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
||||||
LayoutInfo->PartitionEntry[j].BootIndicator,
|
LayoutInfo->PartitionEntry[j].BootIndicator,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionType,
|
LayoutInfo->PartitionEntry[j].PartitionType,
|
||||||
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
||||||
|
|
||||||
if (LayoutInfo->PartitionEntry[j].BootIndicator)
|
if ((LayoutInfo->PartitionEntry[j].BootIndicator == TRUE) &&
|
||||||
{
|
IsUsablePartition(LayoutInfo->PartitionEntry[j].PartitionType))
|
||||||
swprintf (Buffer2,
|
{
|
||||||
L"\\Device\\Harddisk%d\\Partition%d",
|
swprintf(Buffer2,
|
||||||
i,
|
L"\\Device\\Harddisk%d\\Partition%d",
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
i,
|
||||||
RtlInitUnicodeString (&UnicodeString2,
|
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
||||||
Buffer2);
|
RtlInitUnicodeString(&UnicodeString2,
|
||||||
|
Buffer2);
|
||||||
|
|
||||||
DPRINT(" %wZ\n", &UnicodeString2);
|
DPRINT(" %wZ\n", &UnicodeString2);
|
||||||
|
|
||||||
/* assign it */
|
/* assign it */
|
||||||
HalpAssignDrive (&UnicodeString2,
|
HalpAssignDrive(&UnicodeString2,
|
||||||
&DriveMap,
|
&DriveMap,
|
||||||
AUTO_DRIVE);
|
AUTO_DRIVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ExFreePool (LayoutInfo);
|
ExFreePool (LayoutInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign remaining primary partitions */
|
/* Assign remaining primary partitions */
|
||||||
DPRINT("Assigning primary partitions:\n");
|
DPRINT("Assigning primary partitions:\n");
|
||||||
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Harddisk%d\\Partition0",
|
L"\\Device\\Harddisk%d\\Partition0",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
Status = xHalpQueryDriveLayout (&UnicodeString1,
|
Status = xHalpQueryDriveLayout(&UnicodeString1,
|
||||||
&LayoutInfo);
|
&LayoutInfo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DbgPrint("xHalpQueryDriveLayout() failed (Status = 0x%lx)\n",
|
DbgPrint("xHalpQueryDriveLayout(%wZ) failed (Status = 0x%lx)\n",
|
||||||
Status);
|
&UnicodeString1,
|
||||||
continue;
|
Status);
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
DPRINT("Logical partitions: %d\n",
|
DPRINT("Logical partitions: %d\n",
|
||||||
LayoutInfo->PartitionCount);
|
LayoutInfo->PartitionCount);
|
||||||
|
|
||||||
/* search for primary (non-bootable) partitions */
|
/* search for primary (non-bootable) partitions */
|
||||||
for (j = 0; j < PARTITION_TBL_SIZE; j++)
|
for (j = 0; j < PARTITION_TBL_SIZE; j++)
|
||||||
{
|
{
|
||||||
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
||||||
j,
|
j,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
||||||
LayoutInfo->PartitionEntry[j].BootIndicator,
|
LayoutInfo->PartitionEntry[j].BootIndicator,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionType,
|
LayoutInfo->PartitionEntry[j].PartitionType,
|
||||||
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
||||||
|
|
||||||
if ((LayoutInfo->PartitionEntry[j].BootIndicator == FALSE) &&
|
if ((LayoutInfo->PartitionEntry[j].BootIndicator == FALSE) &&
|
||||||
IsUsablePartition(LayoutInfo->PartitionEntry[j].PartitionType))
|
IsUsablePartition(LayoutInfo->PartitionEntry[j].PartitionType))
|
||||||
{
|
{
|
||||||
swprintf (Buffer2,
|
swprintf(Buffer2,
|
||||||
L"\\Device\\Harddisk%d\\Partition%d",
|
L"\\Device\\Harddisk%d\\Partition%d",
|
||||||
i,
|
i,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
||||||
RtlInitUnicodeString (&UnicodeString2,
|
RtlInitUnicodeString(&UnicodeString2,
|
||||||
Buffer2);
|
Buffer2);
|
||||||
|
|
||||||
/* assign it */
|
/* assign it */
|
||||||
DPRINT(" %wZ\n", &UnicodeString2);
|
DPRINT(" %wZ\n",
|
||||||
HalpAssignDrive (&UnicodeString2, &DriveMap, AUTO_DRIVE);
|
&UnicodeString2);
|
||||||
}
|
HalpAssignDrive(&UnicodeString2,
|
||||||
}
|
&DriveMap,
|
||||||
|
AUTO_DRIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ExFreePool (LayoutInfo);
|
ExFreePool(LayoutInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign extended (logical) partitions */
|
/* Assign extended (logical) partitions */
|
||||||
DPRINT("Assigning extended (logical) partitions:\n");
|
DPRINT("Assigning extended (logical) partitions:\n");
|
||||||
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
for (i = 0; i < ConfigInfo->DiskCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Harddisk%d\\Partition0",
|
L"\\Device\\Harddisk%d\\Partition0",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
Status = xHalpQueryDriveLayout (&UnicodeString1,
|
Status = xHalpQueryDriveLayout(&UnicodeString1,
|
||||||
&LayoutInfo);
|
&LayoutInfo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DbgPrint("xHalpQueryDriveLayout() failed (Status = 0x%lx)\n",
|
DbgPrint("xHalpQueryDriveLayout() failed (Status = 0x%lx)\n",
|
||||||
Status);
|
Status);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Logical partitions: %d\n",
|
DPRINT("Logical partitions: %d\n",
|
||||||
LayoutInfo->PartitionCount);
|
LayoutInfo->PartitionCount);
|
||||||
|
|
||||||
/* search for extended partitions */
|
/* search for extended partitions */
|
||||||
for (j = PARTITION_TBL_SIZE; j < LayoutInfo->PartitionCount; j++)
|
for (j = PARTITION_TBL_SIZE; j < LayoutInfo->PartitionCount; j++)
|
||||||
{
|
{
|
||||||
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
DPRINT(" %d: nr:%x boot:%x type:%x startblock:%lu count:%lu\n",
|
||||||
j,
|
j,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
LayoutInfo->PartitionEntry[j].PartitionNumber,
|
||||||
LayoutInfo->PartitionEntry[j].BootIndicator,
|
LayoutInfo->PartitionEntry[j].BootIndicator,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionType,
|
LayoutInfo->PartitionEntry[j].PartitionType,
|
||||||
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
LayoutInfo->PartitionEntry[j].StartingOffset.u.LowPart,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
LayoutInfo->PartitionEntry[j].PartitionLength.u.LowPart);
|
||||||
|
|
||||||
if (IsUsablePartition(LayoutInfo->PartitionEntry[j].PartitionType) &&
|
if (IsUsablePartition(LayoutInfo->PartitionEntry[j].PartitionType) &&
|
||||||
(LayoutInfo->PartitionEntry[j].PartitionNumber != 0))
|
(LayoutInfo->PartitionEntry[j].PartitionNumber != 0))
|
||||||
{
|
{
|
||||||
swprintf (Buffer2,
|
swprintf(Buffer2,
|
||||||
L"\\Device\\Harddisk%d\\Partition%d",
|
L"\\Device\\Harddisk%d\\Partition%d",
|
||||||
i,
|
i,
|
||||||
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
LayoutInfo->PartitionEntry[j].PartitionNumber);
|
||||||
RtlInitUnicodeString (&UnicodeString2,
|
RtlInitUnicodeString(&UnicodeString2,
|
||||||
Buffer2);
|
Buffer2);
|
||||||
|
|
||||||
/* assign it */
|
/* assign it */
|
||||||
DPRINT(" %wZ\n", &UnicodeString2);
|
DPRINT(" %wZ\n",
|
||||||
HalpAssignDrive (&UnicodeString2, &DriveMap, AUTO_DRIVE);
|
&UnicodeString2);
|
||||||
}
|
HalpAssignDrive(&UnicodeString2,
|
||||||
}
|
&DriveMap,
|
||||||
|
AUTO_DRIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ExFreePool (LayoutInfo);
|
ExFreePool(LayoutInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign floppy drives */
|
/* Assign floppy drives */
|
||||||
DPRINT("Floppy drives: %d\n", ConfigInfo->FloppyCount);
|
DPRINT("Floppy drives: %d\n", ConfigInfo->FloppyCount);
|
||||||
for (i = 0; i < ConfigInfo->FloppyCount; i++)
|
for (i = 0; i < ConfigInfo->FloppyCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Floppy%d",
|
L"\\Device\\Floppy%d",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
/* assign drive letters A: or B: or first free drive letter */
|
/* assign drive letters A: or B: or first free drive letter */
|
||||||
DPRINT(" %wZ\n", &UnicodeString1);
|
DPRINT(" %wZ\n",
|
||||||
HalpAssignDrive (&UnicodeString1,
|
&UnicodeString1);
|
||||||
&DriveMap,
|
HalpAssignDrive(&UnicodeString1,
|
||||||
(i < 2) ? i : AUTO_DRIVE);
|
&DriveMap,
|
||||||
}
|
(i < 2) ? i : AUTO_DRIVE);
|
||||||
|
}
|
||||||
|
|
||||||
/* Assign cdrom drives */
|
/* Assign cdrom drives */
|
||||||
DPRINT("CD-Rom drives: %d\n", ConfigInfo->CDRomCount);
|
DPRINT("CD-Rom drives: %d\n", ConfigInfo->CDRomCount);
|
||||||
for (i = 0; i < ConfigInfo->CDRomCount; i++)
|
for (i = 0; i < ConfigInfo->CDRomCount; i++)
|
||||||
{
|
{
|
||||||
swprintf (Buffer1,
|
swprintf(Buffer1,
|
||||||
L"\\Device\\Cdrom%d",
|
L"\\Device\\Cdrom%d",
|
||||||
i);
|
i);
|
||||||
RtlInitUnicodeString (&UnicodeString1,
|
RtlInitUnicodeString(&UnicodeString1,
|
||||||
Buffer1);
|
Buffer1);
|
||||||
|
|
||||||
/* assign first free drive letter */
|
/* assign first free drive letter */
|
||||||
DPRINT(" %wZ\n", &UnicodeString1);
|
DPRINT(" %wZ\n", &UnicodeString1);
|
||||||
HalpAssignDrive (&UnicodeString1,
|
HalpAssignDrive(&UnicodeString1,
|
||||||
&DriveMap,
|
&DriveMap,
|
||||||
AUTO_DRIVE);
|
AUTO_DRIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Anything else ?? */
|
/* Anything else ?? */
|
||||||
|
|
||||||
|
|
||||||
ExFreePool (Buffer2);
|
ExFreePool(Buffer2);
|
||||||
ExFreePool (Buffer1);
|
ExFreePool(Buffer1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue