update for HEAD-2002110401
[reactos.git] / subsys / system / usetup / drivesup.c
index c87f74e..30f5820 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/*
+/* $Id$
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/drivesup.c
@@ -94,23 +94,22 @@ GetSourcePaths(PUNICODE_STRING SourcePath,
 }
 
 
-#if 0
 CHAR
-GetDriveLetter(IN ULONG DriveNumber,
-              IN ULONG PartitionNumber)
+GetDriveLetter(ULONG DriveNumber,
+              ULONG PartitionNumber)
 {
   OBJECT_ATTRIBUTES ObjectAttributes;
   UNICODE_STRING LinkName;
   WCHAR LinkBuffer[8];
-  WCHAR Letter;
+  CHAR Letter;
   HANDLE LinkHandle;
   UNICODE_STRING TargetName;
-  WCHAR TargetBuffer[MAX_PATH];
-//  WCHAR DeviceBuffer[MAX_PATH];
+  PWCHAR TargetBuffer;
+  PWCHAR DeviceBuffer;
   ULONG Length;
+  NTSTATUS Status;
 
-  wcscpy(LinkBuffer,
-        L"\\??\\A:");
+  wcscpy(LinkBuffer, L"\\??\\A:");
 
   RtlInitUnicodeString(&LinkName,
                       LinkBuffer);
@@ -121,13 +120,21 @@ GetDriveLetter(IN ULONG DriveNumber,
                             NULL,
                             NULL);
 
+  TargetBuffer = RtlAllocateHeap(ProcessHeap, 0, MAX_PATH * sizeof(WCHAR));
+  DeviceBuffer = RtlAllocateHeap(ProcessHeap, 0, MAX_PATH * sizeof(WCHAR));
+
   TargetName.Length = 0;
   TargetName.MaximumLength = MAX_PATH * sizeof(WCHAR);
   TargetName.Buffer = TargetBuffer;
 
-  for (Letter = L'C'; Letter <= L'Z'; Letter++)
+  swprintf(DeviceBuffer,
+          L"\\Device\\Harddisk%lu\\Partition%lu",
+          DriveNumber,
+          PartitionNumber);
+
+  for (Letter = 'C'; Letter <= 'Z'; Letter++)
     {
-      LinkBuffer[4] = Letter;
+      LinkBuffer[4] = (WCHAR)Letter;
       TargetName.Length = 0;
 
       Status = NtOpenSymbolicLinkObject(&LinkHandle,
@@ -138,26 +145,23 @@ GetDriveLetter(IN ULONG DriveNumber,
          Status = NtQuerySymbolicLinkObject(LinkHandle,
                                             &TargetName,
                                             &Length);
+         NtClose(LinkHandle);
          if (NT_SUCCESS(Status))
            {
-
-
-
+             if (_wcsicmp(DeviceBuffer, TargetBuffer) == 0)
+               {
+                 RtlFreeHeap(ProcessHeap, 0, DeviceBuffer);
+                 RtlFreeHeap(ProcessHeap, 0, TargetBuffer);
+                 return(Letter);
+               }
            }
-         NtClose(LinkHandle);
        }
     }
 
-  return((CHAR)0);
-}
-#endif
-
-#if 0
-STATUS
-GetFileSystem()
-{
+  RtlFreeHeap(ProcessHeap, 0, DeviceBuffer);
+  RtlFreeHeap(ProcessHeap, 0, TargetBuffer);
 
+  return((CHAR)0);
 }
-#endif
 
 /* EOF */