Added stubs for missing partition functions
authorEric Kohl <eric.kohl@reactos.org>
Fri, 8 Jun 2001 15:11:04 +0000 (15:11 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Fri, 8 Jun 2001 15:11:04 +0000 (15:11 +0000)
svn path=/trunk/; revision=1951

reactos/include/ddk/iofuncs.h
reactos/ntoskrnl/hal/x86/drive.c
reactos/ntoskrnl/hal/x86/parttab.c
reactos/ntoskrnl/include/internal/xhal.h
reactos/ntoskrnl/io/xhaldisp.c
reactos/ntoskrnl/io/xhaldrv.c

index 5ef5847..3482c49 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef _INCLUDE_DDK_IOFUNCS_H
 #define _INCLUDE_DDK_IOFUNCS_H
 #ifndef _INCLUDE_DDK_IOFUNCS_H
 #define _INCLUDE_DDK_IOFUNCS_H
-/* $Id: iofuncs.h,v 1.23 2001/05/01 23:08:17 chorns Exp $ */
+/* $Id: iofuncs.h,v 1.24 2001/06/08 15:06:51 ekohl Exp $ */
 
 /* --- EXPORTED BY NTOSKRNL --- */
 
 
 /* --- EXPORTED BY NTOSKRNL --- */
 
@@ -1181,7 +1181,7 @@ IoWritePartitionTable (
        ULONG                           SectorSize,
        ULONG                           SectorsPerTrack,
        ULONG                           NumberOfHeads,
        ULONG                           SectorSize,
        ULONG                           SectorsPerTrack,
        ULONG                           NumberOfHeads,
-       PDRIVE_LAYOUT_INFORMATION       PartitionBuffer
+       PDRIVE_LAYOUT_INFORMATION       PartitionBuffer
        );
 
 
        );
 
 
index 1255d7c..e0a5fb3 100644 (file)
@@ -1,9 +1,9 @@
-/* $Id: drive.c,v 1.2 2000/06/30 22:51:34 ekohl Exp $
+/* $Id: drive.c,v 1.3 2001/06/08 15:08:36 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  * FILE:            hal/x86/drive.c
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  * FILE:            hal/x86/drive.c
- * PURPOSE:         Drive letters
+ * PURPOSE:         Drive letter assignment
  * PROGRAMMER:      
  * UPDATE HISTORY:
  *     2000-03-25
  * PROGRAMMER:      
  * UPDATE HISTORY:
  *     2000-03-25
 
 /* FUNCTIONS *****************************************************************/
 
 
 /* FUNCTIONS *****************************************************************/
 
-VOID
-STDCALL
-IoAssignDriveLetters (
-       IN      PLOADER_PARAMETER_BLOCK LoaderBlock,
-       IN      PSTRING                 NtDeviceName,
-       OUT     PUCHAR                  NtSystemPath,
-       OUT     PSTRING                 NtSystemPathString
-       )
+VOID STDCALL
+IoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+                    IN PSTRING NtDeviceName,
+                    OUT PUCHAR NtSystemPath,
+                    OUT PSTRING NtSystemPathString)
 {
 #ifdef __NTOSKRNL__
 {
 #ifdef __NTOSKRNL__
-       HalDispatchTable.HalIoAssignDriveLetters (LoaderBlock,
-                                                  NtDeviceName,
-                                                  NtSystemPath,
-                                                  NtSystemPathString);
+   HalDispatchTable.HalIoAssignDriveLetters(LoaderBlock,
+                                           NtDeviceName,
+                                           NtSystemPath,
+                                           NtSystemPathString);
 #else
 #else
-       HalDispatchTable->HalIoAssignDriveLetters (LoaderBlock,
-                                                  NtDeviceName,
-                                                  NtSystemPath,
-                                                  NtSystemPathString);
+   HalDispatchTable->HalIoAssignDriveLetters(LoaderBlock,
+                                            NtDeviceName,
+                                            NtSystemPath,
+                                            NtSystemPathString);
 #endif
 }
 
 #endif
 }
 
index 3f53f2a..e710104 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: parttab.c,v 1.3 2000/08/21 00:12:20 ekohl Exp $
+/* $Id: parttab.c,v 1.4 2001/06/08 15:08:36 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
 
 /* FUNCTIONS *****************************************************************/
 
 
 /* FUNCTIONS *****************************************************************/
 
-NTSTATUS
-STDCALL
-IoReadPartitionTable (
-       PDEVICE_OBJECT                  DeviceObject,
-       ULONG                           SectorSize,
-       BOOLEAN                         ReturnRecognizedPartitions,
-       PDRIVE_LAYOUT_INFORMATION       * PartitionBuffer
-       )
+NTSTATUS STDCALL
+IoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
+                    ULONG SectorSize,
+                    BOOLEAN ReturnRecognizedPartitions,
+                    PDRIVE_LAYOUT_INFORMATION *PartitionBuffer)
 {
 #ifdef __NTOSKRNL__
        return HalDispatchTable.HalIoReadPartitionTable(DeviceObject,
 {
 #ifdef __NTOSKRNL__
        return HalDispatchTable.HalIoReadPartitionTable(DeviceObject,
@@ -41,29 +38,47 @@ IoReadPartitionTable (
 #endif
 }
 
 #endif
 }
 
-NTSTATUS
-STDCALL
-IoSetPartitionInformation (
-       PDEVICE_OBJECT  DeviceObject,
-       ULONG           SectorSize,
-       ULONG           PartitionNumber,
-       ULONG           PartitionType)
+
+NTSTATUS STDCALL
+IoSetPartitionInformation(PDEVICE_OBJECT DeviceObject,
+                         ULONG SectorSize,
+                         ULONG PartitionNumber,
+                         ULONG PartitionType)
 {
 {
-       UNIMPLEMENTED;
+#ifdef __NTOSKRNL__
+   return HalDispatchTable.HalIoSetPartitionInformation(DeviceObject,
+                                                       SectorSize,
+                                                       PartitionNumber,
+                                                       PartitionType);
+#else
+   return HalDispatchTable->HalIoSetPartitionInformation(DeviceObject,
+                                                        SectorSize,
+                                                        PartitionNumber,
+                                                        PartitionType);
+#endif
 }
 
 }
 
-NTSTATUS
-STDCALL
-IoWritePartitionTable (
-       PDEVICE_OBJECT                  DeviceObject,
-       ULONG                           SectorSize,
-       ULONG                           SectorsPerTrack,
-       ULONG                           NumberOfHeads,
-       PDRIVE_LAYOUT_INFORMATION       * PBuffer
-       )
+
+NTSTATUS STDCALL
+IoWritePartitionTable(PDEVICE_OBJECT DeviceObject,
+                     ULONG SectorSize,
+                     ULONG SectorsPerTrack,
+                     ULONG NumberOfHeads,
+                     PDRIVE_LAYOUT_INFORMATION PartitionBuffer)
 {
 {
-       UNIMPLEMENTED;
+#ifdef __NTOSKRNL__
+   return HalDispatchTable.HalIoWritePartitionTable(DeviceObject,
+                                                   SectorSize,
+                                                   SectorsPerTrack,
+                                                   NumberOfHeads,
+                                                   PartitionBuffer);
+#else
+   return HalDispatchTable->HalIoWritePartitionTable(DeviceObject,
+                                                    SectorSize,
+                                                    SectorsPerTrack,
+                                                    NumberOfHeads,
+                                                    PartitionBuffer);
+#endif
 }
 
 }
 
-
 /* EOF */
 /* EOF */
index 2579987..1e44512 100644 (file)
@@ -1,32 +1,35 @@
 #ifndef __INCLUDE_INTERNAL_XHAL_H
 #define __INCLUDE_INTERNAL_XHAL_H
 
 #ifndef __INCLUDE_INTERNAL_XHAL_H
 #define __INCLUDE_INTERNAL_XHAL_H
 
-VOID
-FASTCALL
-xHalExamineMBR (
-       IN      PDEVICE_OBJECT  DeviceObject,
-       IN      ULONG           SectorSize,
-       IN      ULONG           MBRTypeIdentifier,
-       OUT     PVOID           * Buffer
-       );
+VOID FASTCALL
+xHalExamineMBR(IN PDEVICE_OBJECT DeviceObject,
+              IN ULONG SectorSize,
+              IN ULONG MBRTypeIdentifier,
+              OUT PVOID *Buffer);
 
 
-VOID
-FASTCALL
-xHalIoAssignDriveLetters (
-       IN      PLOADER_PARAMETER_BLOCK LoaderBlock,
-       IN      PSTRING                 NtDeviceName,
-       OUT     PUCHAR                  NtSystemPath,
-       OUT     PSTRING                 NtSystemPathString
-       );
+VOID FASTCALL
+xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+                        IN PSTRING NtDeviceName,
+                        OUT PUCHAR NtSystemPath,
+                        OUT PSTRING NtSystemPathString);
 
 
-NTSTATUS
-FASTCALL
-xHalIoReadPartitionTable (
-       PDEVICE_OBJECT                  DeviceObject,
-       ULONG                           SectorSize,
-       BOOLEAN                         ReturnRecognizedPartitions,
-       PDRIVE_LAYOUT_INFORMATION       * PartitionBuffer
-       );
+NTSTATUS FASTCALL
+xHalIoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
+                        ULONG SectorSize,
+                        BOOLEAN ReturnRecognizedPartitions,
+                        PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
 
 
+NTSTATUS FASTCALL
+xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
+                             IN ULONG SectorSize,
+                             IN ULONG PartitionNumber,
+                             IN ULONG PartitionType);
+
+NTSTATUS STDCALL
+xHalIoWritePartitionTable(IN PDEVICE_OBJECT DeviceObject,
+                         IN ULONG SectorSize,
+                         IN ULONG SectorsPerTrack,
+                         IN ULONG NumberOfHeads,
+                         IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
 
 #endif
 
 #endif
index d43dd38..a847773 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xhaldisp.c,v 1.3 2001/02/10 22:51:09 dwelch Exp $
+/* $Id: xhaldisp.c,v 1.4 2001/06/08 15:11:04 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -27,8 +27,8 @@ HAL_DISPATCH EXPORTED HalDispatchTable =
        xHalExamineMBR,
        xHalIoAssignDriveLetters,
        xHalIoReadPartitionTable,
        xHalExamineMBR,
        xHalIoAssignDriveLetters,
        xHalIoReadPartitionTable,
-       NULL,                   // xHalIoSetPartitionInformation,
-       NULL,                   // xHalIoWritePartitionTable,
+       xHalIoSetPartitionInformation,
+       xHalIoWritePartitionTable,
        NULL,                   // HalReferenceHandlerForBus
        NULL,                   // HalReferenceBusHandler
        NULL                    // HalDereferenceBusHandler
        NULL,                   // HalReferenceHandlerForBus
        NULL,                   // HalReferenceBusHandler
        NULL                    // HalDereferenceBusHandler
index 3f37f3f..3dfc2d4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xhaldrv.c,v 1.9 2001/06/07 21:16:41 ekohl Exp $
+/* $Id: xhaldrv.c,v 1.10 2001/06/08 15:11:04 ekohl Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -66,79 +66,80 @@ typedef struct _PARTITION_TABLE
 /* FUNCTIONS *****************************************************************/
 
 static NTSTATUS
 /* FUNCTIONS *****************************************************************/
 
 static NTSTATUS
-xHalpQueryDriveLayout (
-       IN      PUNICODE_STRING DeviceName,
-       OUT     PDRIVE_LAYOUT_INFORMATION *LayoutInfo
-       )
+xHalpQueryDriveLayout(IN PUNICODE_STRING DeviceName,
+                     OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo)
 {
 {
-       IO_STATUS_BLOCK StatusBlock;
-       DISK_GEOMETRY DiskGeometry;
-       PDEVICE_OBJECT DeviceObject = NULL;
-       PFILE_OBJECT FileObject;
-       KEVENT Event;
-       PIRP Irp;
-       NTSTATUS Status;
-
-       DPRINT ("xHalpQueryDriveLayout %wZ %p\n",
-               DeviceName,
-               LayoutInfo);
-
-       /*
-        * Get the drives sector size
-        */
-       Status = IoGetDeviceObjectPointer (DeviceName,
-                                          FILE_READ_DATA,
-                                          &FileObject,
-                                          &DeviceObject);
-       if (!NT_SUCCESS(Status))
-       {
-               DPRINT ("Status %x\n",Status);
-               return Status;
-       }
+   IO_STATUS_BLOCK StatusBlock;
+   DISK_GEOMETRY DiskGeometry;
+   PDEVICE_OBJECT DeviceObject = NULL;
+   PFILE_OBJECT FileObject;
+   KEVENT Event;
+   PIRP Irp;
+   NTSTATUS Status;
 
 
-       KeInitializeEvent (&Event,
-                          NotificationEvent,
-                          FALSE);
-
-       Irp = IoBuildDeviceIoControlRequest (IOCTL_DISK_GET_DRIVE_GEOMETRY,
-                                            DeviceObject,
-                                            NULL,
-                                            0,
-                                            &DiskGeometry,
-                                            sizeof(DISK_GEOMETRY),
-                                            FALSE,
-                                            &Event,
-                                            &StatusBlock);
-       if (Irp == NULL)
-       {
-               ObDereferenceObject (FileObject);
-               return STATUS_INSUFFICIENT_RESOURCES;
-       }
+   DPRINT("xHalpQueryDriveLayout %wZ %p\n",
+         DeviceName,
+         LayoutInfo);
 
 
-       Status = IoCallDriver(DeviceObject, Irp);
-       if (Status == STATUS_PENDING)
-       {
-               KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
-               Status = StatusBlock.Status;
-       }
-       if (!NT_SUCCESS(Status))
-       {
-               ObDereferenceObject (FileObject);
-               return Status;
+   /* Get the drives sector size */
+   Status = IoGetDeviceObjectPointer(DeviceName,
+                                    FILE_READ_DATA,
+                                    &FileObject,
+                                    &DeviceObject);
+   if (!NT_SUCCESS(Status))
+     {
+       DPRINT("Status %x\n",Status);
+       return Status;
        }
 
        }
 
-       DPRINT("DiskGeometry.BytesPerSector: %d\n",
-              DiskGeometry.BytesPerSector);
+   KeInitializeEvent(&Event,
+                    NotificationEvent,
+                    FALSE);
+
+   Irp = IoBuildDeviceIoControlRequest(IOCTL_DISK_GET_DRIVE_GEOMETRY,
+                                      DeviceObject,
+                                      NULL,
+                                      0,
+                                      &DiskGeometry,
+                                      sizeof(DISK_GEOMETRY),
+                                      FALSE,
+                                      &Event,
+                                      &StatusBlock);
+   if (Irp == NULL)
+     {
+       ObDereferenceObject(FileObject);
+       return STATUS_INSUFFICIENT_RESOURCES;
+     }
 
 
-       /* read the partition table */
-       Status = IoReadPartitionTable (DeviceObject,
-                                      DiskGeometry.BytesPerSector,
-                                      FALSE,
-                                      LayoutInfo);
+   Status = IoCallDriver(DeviceObject,
+                        Irp);
+   if (Status == STATUS_PENDING)
+     {
+       KeWaitForSingleObject(&Event,
+                             Executive,
+                             KernelMode,
+                             FALSE,
+                             NULL);
+       Status = StatusBlock.Status;
+     }
+   if (!NT_SUCCESS(Status))
+     {
+       ObDereferenceObject(FileObject);
+       return Status;
+     }
 
 
-       ObDereferenceObject (FileObject);
+   DPRINT("DiskGeometry.BytesPerSector: %d\n",
+         DiskGeometry.BytesPerSector);
 
 
-       return Status;
+   /* read the partition table */
+   Status = IoReadPartitionTable(DeviceObject,
+                                DiskGeometry.BytesPerSector,
+                                FALSE,
+                                LayoutInfo);
+
+   ObDereferenceObject(FileObject);
+
+   return Status;
 }
 
 
 }
 
 
@@ -148,139 +149,138 @@ xHalExamineMBR(IN PDEVICE_OBJECT DeviceObject,
               IN ULONG MBRTypeIdentifier,
               OUT PVOID *Buffer)
 {
               IN ULONG MBRTypeIdentifier,
               OUT PVOID *Buffer)
 {
-       KEVENT Event;
-       IO_STATUS_BLOCK StatusBlock;
-       LARGE_INTEGER Offset;
-       PUCHAR LocalBuffer;
-       PIRP Irp;
-       NTSTATUS Status;
-
-       DPRINT ("xHalExamineMBR()\n");
-       *Buffer = NULL;
-
-       if (SectorSize < 512)
-               SectorSize = 512;
-       if (SectorSize > 4096)
-               SectorSize = 4096;
-
-       LocalBuffer = (PUCHAR)ExAllocatePool (PagedPool,
-                                             SectorSize);
-       if (LocalBuffer == NULL)
-               return;
-
-       KeInitializeEvent (&Event,
-                          NotificationEvent,
-                          FALSE);
-
-       Offset.QuadPart = 0;
-
-       Irp = IoBuildSynchronousFsdRequest (IRP_MJ_READ,
-                                           DeviceObject,
-                                           LocalBuffer,
-                                           SectorSize,
-                                           &Offset,
-                                           &Event,
-                                           &StatusBlock);
-
-       Status = IoCallDriver (DeviceObject,
-                              Irp);
-       if (Status == STATUS_PENDING)
-       {
-               KeWaitForSingleObject (&Event,
-                                      Executive,
-                                      KernelMode,
-                                      FALSE,
-                                      NULL);
-               Status = StatusBlock.Status;
-       }
+   KEVENT Event;
+   IO_STATUS_BLOCK StatusBlock;
+   LARGE_INTEGER Offset;
+   PUCHAR LocalBuffer;
+   PIRP Irp;
+   NTSTATUS Status;
 
 
-       if (!NT_SUCCESS(Status))
-       {
-               DPRINT ("xHalExamineMBR failed (Status = 0x%08lx)\n",
-                       Status);
-               ExFreePool (LocalBuffer);
-               return;
-       }
+   DPRINT("xHalExamineMBR()\n");
+   *Buffer = NULL;
 
 
-       if (LocalBuffer[0x1FE] != 0x55 || LocalBuffer[0x1FF] != 0xAA)
-       {
-               DPRINT ("xHalExamineMBR: invalid MBR signature\n");
-               ExFreePool (LocalBuffer);
-               return;
-       }
+   if (SectorSize < 512)
+     SectorSize = 512;
+   if (SectorSize > 4096)
+     SectorSize = 4096;
 
 
-       if (LocalBuffer[0x1C2] != MBRTypeIdentifier)
-       {
-               DPRINT ("xHalExamineMBR: invalid MBRTypeIdentifier\n");
-               ExFreePool (LocalBuffer);
-               return;
-       }
+   LocalBuffer = (PUCHAR)ExAllocatePool(PagedPool,
+                                       SectorSize);
+   if (LocalBuffer == NULL)
+     return;
+
+   KeInitializeEvent(&Event,
+                    NotificationEvent,
+                    FALSE);
+
+   Offset.QuadPart = 0;
+
+   Irp = IoBuildSynchronousFsdRequest(IRP_MJ_READ,
+                                     DeviceObject,
+                                     LocalBuffer,
+                                     SectorSize,
+                                     &Offset,
+                                     &Event,
+                                     &StatusBlock);
+
+   Status = IoCallDriver(DeviceObject,
+                        Irp);
+   if (Status == STATUS_PENDING)
+     {
+       KeWaitForSingleObject(&Event,
+                             Executive,
+                             KernelMode,
+                             FALSE,
+                             NULL);
+       Status = StatusBlock.Status;
+     }
 
 
-       *Buffer = (PVOID)LocalBuffer;
+   if (!NT_SUCCESS(Status))
+     {
+       DPRINT("xHalExamineMBR failed (Status = 0x%08lx)\n",
+              Status);
+       ExFreePool(LocalBuffer);
+       return;
+     }
+
+   if (LocalBuffer[0x1FE] != 0x55 || LocalBuffer[0x1FF] != 0xAA)
+     {
+       DPRINT("xHalExamineMBR: invalid MBR signature\n");
+       ExFreePool(LocalBuffer);
+       return;
+     }
+
+   if (LocalBuffer[0x1C2] != MBRTypeIdentifier)
+     {
+       DPRINT("xHalExamineMBR: invalid MBRTypeIdentifier\n");
+       ExFreePool(LocalBuffer);
+       return;
+     }
+
+   *Buffer = (PVOID)LocalBuffer;
 }
 
 }
 
+
 static VOID
 static VOID
-HalpAssignDrive (
-       IN      PUNICODE_STRING PartitionName,
-       IN OUT  PULONG DriveMap,
-       IN      ULONG DriveNumber
-       )
+HalpAssignDrive(IN PUNICODE_STRING PartitionName,
+               IN OUT PULONG DriveMap,
+               IN ULONG DriveNumber)
 {
 {
-       WCHAR DriveNameBuffer[8];
-       UNICODE_STRING DriveName;
-       ULONG i;
-
-       DPRINT("HalpAssignDrive()\n");
-
-       if ((DriveNumber != AUTO_DRIVE) && (DriveNumber < 24))
-       {
-               /* force assignment */
-               if ((*DriveMap & (1 << DriveNumber)) != 0)
-               {
-                       DbgPrint("Drive letter already used!\n");
-                       return;
-               }
-       }
-       else
-       {
-               /* automatic assignment */
-               DriveNumber = AUTO_DRIVE;
-
-               for (i = 2; i < 24; i++)
-               {
-                       if ((*DriveMap & (1 << i)) == 0)
-                       {
-                               DriveNumber = i;
-                               break;
-                       }
-               }
-
-               if (DriveNumber == AUTO_DRIVE)
-               {
-                       DbgPrint("No drive letter available!\n");
-                       return;
-               }
-       }
+   WCHAR DriveNameBuffer[8];
+   UNICODE_STRING DriveName;
+   ULONG i;
 
 
-       DPRINT("DriveNumber %d\n", DriveNumber);
+   DPRINT("HalpAssignDrive()\n");
 
 
-       /* set bit in drive map */
-       *DriveMap = *DriveMap | (1 << DriveNumber);
+   if ((DriveNumber != AUTO_DRIVE) && (DriveNumber < 24))
+     {
+       /* force assignment */
+       if ((*DriveMap & (1 << DriveNumber)) != 0)
+         {
+            DbgPrint("Drive letter already used!\n");
+            return;
+         }
+     }
+   else
+     {
+       /* automatic assignment */
+       DriveNumber = AUTO_DRIVE;
 
 
-       /* build drive name */
-       swprintf (DriveNameBuffer,
-                 L"\\??\\%C:",
-                 'A' + DriveNumber);
-       RtlInitUnicodeString (&DriveName,
-                             DriveNameBuffer);
+       for (i = 2; i < 24; i++)
+         {
+            if ((*DriveMap & (1 << i)) == 0)
+              {
+                 DriveNumber = i;
+                 break;
+              }
+         }
+
+       if (DriveNumber == AUTO_DRIVE)
+         {
+            DbgPrint("No drive letter available!\n");
+            return;
+         }
+     }
+
+   DPRINT("DriveNumber %d\n", DriveNumber);
+
+   /* set bit in drive map */
+   *DriveMap = *DriveMap | (1 << DriveNumber);
 
 
-       DPRINT("  %wZ ==> %wZ\n",
-              &DriveName,
-              PartitionName);
+   /* build drive name */
+   swprintf(DriveNameBuffer,
+           L"\\??\\%C:",
+           'A' + DriveNumber);
+   RtlInitUnicodeString(&DriveName,
+                       DriveNameBuffer);
 
 
-       /* create symbolic link */
-       IoCreateSymbolicLink (&DriveName,
-                             PartitionName);
+   DPRINT("  %wZ ==> %wZ\n",
+         &DriveName,
+         PartitionName);
+
+   /* create symbolic link */
+   IoCreateSymbolicLink(&DriveName,
+                       PartitionName);
 }
 
 
 }
 
 
@@ -732,7 +732,7 @@ xHalIoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
                        IsRecognizedPartition (PartitionTable->Partition[i].PartitionType);
                  LayoutBuffer->PartitionEntry[Count].RewritePartition = FALSE;
 
                        IsRecognizedPartition (PartitionTable->Partition[i].PartitionType);
                  LayoutBuffer->PartitionEntry[Count].RewritePartition = FALSE;
 
-                 DPRINT1(" %ld: nr: %d boot: %1x type: %x start: 0x%I64x count: 0x%I64x\n",
+                 DPRINT(" %ld: nr: %d boot: %1x type: %x start: 0x%I64x count: 0x%I64x\n",
                         Count,
                         LayoutBuffer->PartitionEntry[Count].PartitionNumber,
                         LayoutBuffer->PartitionEntry[Count].BootIndicator,
                         Count,
                         LayoutBuffer->PartitionEntry[Count].PartitionNumber,
                         LayoutBuffer->PartitionEntry[Count].BootIndicator,
@@ -764,4 +764,25 @@ xHalIoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
    return STATUS_SUCCESS;
 }
 
    return STATUS_SUCCESS;
 }
 
+
+NTSTATUS FASTCALL
+xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
+                             IN ULONG SectorSize,
+                             IN ULONG PartitionNumber,
+                             IN ULONG PartitionType)
+{
+   return STATUS_NOT_IMPLEMENTED;
+}
+
+
+NTSTATUS FASTCALL
+xHalIoWritePartitionTable(IN PDEVICE_OBJECT DeviceObject,
+                         IN ULONG SectorSize,
+                         IN ULONG SectorsPerTrack,
+                         IN ULONG NumberOfHeads,
+                         IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer)
+{
+   return STATUS_NOT_IMPLEMENTED;
+}
+
 /* EOF */
 /* EOF */